其他分享
首页 > 其他分享> > c – 用时间比较猜测一个字符串.可能吗?

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

作者:互联网

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