【发布时间】:2012-01-07 08:51:21
【问题描述】:
我想知道一个奇怪的想法:给定你,算法在输入中接受一个字符串并将它与你不知道的字符串进行比较。该算法只是一个简单的比较,一次一个字符。当找到不匹配的一对时,返回 0。否则返回 1。
你能用提供的算法在多项式时间内猜出秘密字符串吗?
当一个字符串不匹配时,给出答案 0 所用的时间少于返回 1 所用的时间,因为需要较少的比较。所涉及的时间非常少,因此您可以多次尝试单个实例以获得更准确的估计。估计所花费的时间,我们可以获得有关秘密字符串的信息。如果这工作正常,我们可以在多项式时间内一次猜测一个字符。因此,如果发生这种情况,我们可以逐个字符地尝试某种蛮力攻击。
这有意义吗?还是我有什么误解?
提前致谢。
【问题讨论】:
-
好的,我只是想知道。最近有很多家庭作业问题。
-
仅仅尝试猜测 10 个字母的字符串将需要 26^10 次尝试。如果您想使用提供的方法进行猜测,则需要对每个字母进行一百次尝试,这会将所需的尝试次数增加到 (26*100)^10,这是非常不现实的。
-
@Ranty 绝对不是。假设时间准确,猜第一个字母需要 26 次尝试,然后猜第二个字母需要 26 次,……,10 字母串可以在 260 次尝试中猜出。那是如果你最不走运但有完美的测量值。如果你不那么倒霉但测量不完善,你可能需要 10 倍。
-
这就是重点。这样做,问题就变成了线性的。
-
Vector 如果您对该主题感兴趣,请搜索所谓的“定时侧信道攻击”。其中一些真的很花哨,比如利用缓存效应来获得函数的计时,理论上哪个算法应该执行 O(1)。其他侧通道是 CPU 消耗的功率(现在您可以使用硬件监视器非常准确地测量它)以及加密函数的执行对 other 程序的缓存的影响,即即使加密没有表现出时间效应,系统的其他部分也可能会。这是疯狂的东西。
标签: c++ c time cryptography brute-force