Evolutionary Algorithms使用适应度函数来选择跨代的生存候选者(“适者生存”)。我相信所有适应度函数都假设候选者的值越接近期望值,他们的输入(“关键点”)必须越接近所需的输入。
Cryptographic Hash Functions具有“生成具有给定哈希的消息不可行”的属性。我理解这意味着值的“接近度”与键的“接近度”之间几乎没有相关性。
将这两者放在一起,并不意味着“适者生存”假设对于密码哈希函数是错误的吗? 意思是,如果你想使用进化算法试图找出加密哈希值的反向,那么适应度函数会把你推向错误的方向。值是否与“密切”之间的相关性密钥的“接近程度”是进化算法的先决条件?
答案 0 :(得分:9)
是的,根据所有三个(好)加密哈希函数的输出,构建一个一致告诉你值A比目标B更接近目标的适应度函数几乎是不可能的。这是你提到的财产。因此,进化算法无法加速反转加密哈希函数的平均情况。 然而,这不应该是一个惊喜:所述属性仅在第一时间有用,因为它精确地打破了进化算法的方法(通过查看哈希值相似性来加速逆转)。
概括这一点,进化算法(就像所有其他依赖启发式指导搜索的算法,例如A*
)只有在你能定义一个有意义的适应度函数(启发式)时才有用†。显然,有可能构造不允许这种情况的问题(例如,通过提供太少的信息),并且完全可以认为存在一些具有相同问题的更真实的应用程序。进化算法并不能治愈癌症,但这并不奇怪(没有什么可以,否则我们会转向另一种比喻)。
†在旁注中,该适应度函数不必接近任何特定值,存在许多问题,其中适应度可以无限增长,例如,在优化性能代码时,适应度可以是每秒的操作次数。
答案 1 :(得分:1)
加密散列函数具有“生成具有给定散列的消息不可行”的属性。我理解这意味着值的“接近度”与键的“接近度”之间几乎没有相关性。
您对值与键的“亲密度”的理解是正确的。实际上,这是散列函数的主要目的。进化算法在这里不会很好用。
然而,这并不是“生成具有给定哈希的消息是不可行的”。这是因为哈希函数不是1比1.例如,hash(a) = key = hash(b)
可能是。{1}}。因此,如果您获得了密钥,则无法确定原始邮件是a还是b。