ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 用时间比较猜测一个字符串.可能吗?

2019-09-02 16:06:49  阅读:251  来源: 互联网

标签:c-3 brute-force c time cryptography


我想知道一个奇怪的想法:你给出了算法,并在算法中输入一个字符串并将其与你不知道的字符串进行比较.算法只是一个微不足道的比较,一次只有一个字符.当找到不匹配的一对时,返回0.否则返回1.

您能否使用提供的算法猜测多项式时间内的秘密字符串?

当字符串不匹配时,用于给出答案0的时间小于返回1所用的时间,因为需要较少的比较.涉及的时间非常短,因此您可以多次尝试单个实例以获得更准确的估算.估计我们可能有关于秘密字符串的信息所花费的时间.如果这种方法正常,我们可以在多项式时间内一次猜出一个字符串.因此,如果发生这种情况,我们可以通过char尝试某种强力攻击char.

这有意义吗?还是有什么我误解的?

提前致谢.

解决方法:

你可以猜测秘密字符串,如果你可以输入你自己的字符串进行比较,或者只是观察足够的字符串(不是你选择的)与秘密字符串进行比较,如果字符串比较的编写方式使得它的执行时间揭示有关秘密字符串的信息.

这是加密软件可以具有的已知弱点,并且现在编写的所有严肃的加密软件都避免了这种弱点.

例如,为了避免泄露有关其参数的信息,可以编写一个测试两个缓冲区是相同还是不同的函数:

int crypto_memcmp(const char *s1, const char *s2, size_t n)
{
  size_t i;
  int answer;
  for (i=0; i<n; i++)
    answer = answer | (s1[i] != s2[i]);
  return answer;
}

您可以使用多种技术来检查一段代码是否通过定时攻击泄露秘密.我写了如何使用静态分析here这样做,但这是基于之前使用Valgrind(动态分析)here的想法.

请注意,它远不止于此. This article展示了你甚至不需要执行路径来依赖泄漏信息的秘密.这个秘密用于计算随后访问的一些数组索引就足够了.在现代计算机上,这会改变执行时间,因为缓存将对两个连续访问类似索引的速度比对彼此远离的索引的两次连续访问更快,从而显示有关秘密的信息.

标签:c-3,brute-force,c,time,cryptography
来源: https://codeday.me/bug/20190902/1792069.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有