Hash 散列函数是否与进化算法的基本假设相矛盾?

Hash 散列函数是否与进化算法的基本假设相矛盾?,hash,cryptography,genetic-algorithm,evolutionary-algorithm,Hash,Cryptography,Genetic Algorithm,Evolutionary Algorithm,使用适应度函数选择各代生存的候选对象适者生存。我相信所有的适应度函数都假设候选者的值越接近期望值,他们的输入键就必须越接近期望输入 具有生成具有给定哈希的消息不可行的属性。我理解这意味着值的接近度与键的接近度之间几乎没有关联 把这两者放在一起,难道这不意味着对于加密哈希函数来说,适者生存的假设是错误的吗?也就是说,如果您想使用进化算法来尝试找出加密散列值的相反方向,则适应度函数会将您推向错误的方向。值的接近度和键的接近度之间的相关性是进化算法的先决条件吗?是的,基于三者的良好加密哈希函数的输出,

使用适应度函数选择各代生存的候选对象适者生存。我相信所有的适应度函数都假设候选者的值越接近期望值,他们的输入键就必须越接近期望输入

具有生成具有给定哈希的消息不可行的属性。我理解这意味着值的接近度与键的接近度之间几乎没有关联


把这两者放在一起,难道这不意味着对于加密哈希函数来说,适者生存的假设是错误的吗?也就是说,如果您想使用进化算法来尝试找出加密散列值的相反方向,则适应度函数会将您推向错误的方向。值的接近度和键的接近度之间的相关性是进化算法的先决条件吗?

是的,基于三者的良好加密哈希函数的输出,构建一个一致地告诉您值a比值B更接近目标的适应度函数几乎是不可能的。这是你提到的财产。因此,对于一般情况,进化算法无法加快密码哈希函数的反转速度。然而,这并不奇怪:上述属性只在一开始有用,因为它通过查看散列值的相似性,精确地打破了进化算法加速反转的方法

概括而言,进化算法与所有其他依赖启发式引导搜索的算法一样,例如a*只有在您可以定义有意义的适应度函数启发式†时才有用。显然,通过提供太少的信息来构造不允许这样做的问题是可能的,而且很可能有更多的实际应用程序存在同样的问题。进化算法不能治愈癌症,但这也不足为奇,没有什么能治愈癌症,否则我们就换了一个不同的比喻


†另一方面,该适应度函数不必接近任何特定值,存在许多适应度可能无限增长的问题,例如,在优化代码性能时,适应度可能是每秒的操作数。

是,基于三者的良好加密哈希函数的输出,构建一个一致地告诉您值a比值B更接近目标的适应度函数几乎是不可能的。这是你提到的财产。因此,对于一般情况,进化算法无法加快密码哈希函数的反转速度。然而,这并不奇怪:上述属性只在一开始有用,因为它通过查看散列值的相似性,精确地打破了进化算法加速反转的方法

概括而言,进化算法与所有其他依赖启发式引导搜索的算法一样,例如a*只有在您可以定义有意义的适应度函数启发式†时才有用。显然,通过提供太少的信息来构造不允许这样做的问题是可能的,而且很可能有更多的实际应用程序存在同样的问题。进化算法不能治愈癌症,但这也不足为奇,没有什么能治愈癌症,否则我们就换了一个不同的比喻

†另一方面,该适应度函数不必接近任何特定值,存在许多适应度可能无限增长的问题,例如,在优化代码性能时,适应度可能是每秒的操作数

加密散列函数的特性是,生成具有给定散列的消息是不可行的。我理解这意味着值的接近度与键的接近度之间几乎没有关联

您对值与键的接近性的理解是正确的。事实上,这是散列函数的主要用途。而进化算法在这里也不起作用

然而,这并不是生成具有给定哈希的消息不可行的原因。这是因为散列函数不是1对1。例如,hasha=key=hashb是可能的。因此,如果给您一个密钥,则无法判断原始消息是a还是b

加密散列函数的特性是,生成具有给定散列的消息是不可行的。我理解这意味着值的接近度与键的接近度之间几乎没有关联

您对值与键的接近性的理解是正确的。事实上,这是散列函数的主要用途。而进化算法在这里也不起作用

然而,这并不是生成消息不可行的原因
t有一个给定的散列。这是因为散列函数不是1对1。例如,hasha=key=hashb是可能的。因此,如果给您一个密钥,就无法判断原始消息是a还是b。

可以公平地说,对于加密哈希函数,没有梯度可以引导您从一个值到另一个值,因此,它可能没有有用的适应度函数?@Gili:可以说加密哈希函数不是连续的,甚至更不可微,所以没有梯度。公平地说,对于加密哈希函数,没有梯度会引导你从一个值到另一个值,因此,它可能没有有用的适应度函数?@Gili:可以说加密哈希函数是不连续的,甚至更不可微的,所以没有什么像梯度。