Cryptography 长度扩展攻击质疑
所以我一直在研究长度扩展攻击的概念,在我的研究过程中,我注意到的一些事情对我来说不是很清楚 1.研究论文解释了如何在末尾添加某种类型的数据,并生成新的数据。比如说 所需的新数据:count=10&lat=37.351&user\u id=1&long=-119.827&waffle=eggo&waffle=liege (注意2个华夫饼干)。我的问题是,如果服务器端的解析器函数可以跟踪重复的属性,那么整个长度扩展攻击会是无意义的吗?因为服务器会注意到重复的属性。与长度扩展攻击相比,用于检查任何重复项的适当解析器是否是一个好的解决方案?我知道HMAC方法和其他保护,但现在这里专门讨论解析器 2.研究表明,唯一易受攻击的数据是H(关键信息)。他们声称H(message | key)对攻击者无效,因为我们必须附加一个新的密钥(我们显然不知道)。我的问题是为什么我们必须附加一个新的密钥?当我们攻击H(关键信息)时,我们不会这样做。为什么我们不能依赖这样一个事实:我们将通过验证测试(我们将创建正确的散列),并且如果解析器尝试从中提取密钥,它将获取我们发送的块中的唯一密钥并从中恢复?为什么我们要送两把钥匙?为什么攻击H(消息|键)无效Cryptography 长度扩展攻击质疑,cryptography,sha256,sha,crypto++,dictionary-attack,Cryptography,Sha256,Sha,Crypto++,Dictionary Attack,所以我一直在研究长度扩展攻击的概念,在我的研究过程中,我注意到的一些事情对我来说不是很清楚 1.研究论文解释了如何在末尾添加某种类型的数据,并生成新的数据。比如说 所需的新数据:count=10&lat=37.351&user\u id=1&long=-119.827&waffle=eggo&waffle=liege (注意2个华夫饼干)。我的问题是,如果服务器端的解析器函数可以跟踪重复的属性,那么整个长度扩展攻击会是无意义的吗?因为服务器会注意到重复的属性。与长度扩展攻击相比,用于检查任何重复
1
并填充许多零,以便最后64(128)是长度编码(非常简单,例如,对于SHA256,最终长度必须是512的倍数)。要查看内部是否存在另一个填充,必须检查每个块,然后您可以声称存在扩展攻击。是的,您可以这样做,但是,密码学的目标之一就是减少依赖性。如果我们可以创建一个更好的签名来消除检查,那么我们建议留下其他签名。这使软件开发人员能够轻松编写更安全的实现
为什么攻击H(消息|键)无效
很简单,您将获得扩展消息message | extended
,并发送扩展散列
H(消息|键|扩展)
发送到服务器。然后服务器获取消息message | extended
并附加键message | extended | key
,并对其进行散列H(message | extended | key)
,显然这并不等于扩展的H(message | key | extended)
请注意,SHA-512/256等SHA2系列的精简版具有抗长度扩展攻击的能力。SHA3通过设计对其免疫,并支持一个简单的KMAC签名方案。它也是免疫的,因为它是用这种结构设计的