m := plaintext message
c := Encrypt(k,m) (AES-128 in counter mode)
k := Key (16 Byte)
h1 := CRC-8/16/32(m)
h2 := CRC-8/16/32(c)如果我通过一个通道发送(
CRC-8/16/32是线性相关的,我们在明文上构建它,所以我想我可以得到一些关于m或k只有c和h的信息,对吗?
如果我通过一个通道发送(
这不可能更好,因为如果是这样,那么中间的人就可以简单地创建一个有效的(h2,c)对,而如果我们发送(h1,c),他需要知道明文来计算一个有效的CRC?
如果有一个系统,就像上面提到的两种,那么中间人怎么能攻击这个系统呢?一些例子和/或数学是值得赞赏的!
我知道在实际系统中不能使用CRC进行身份验证,这是一个理论问题。有人使用CRC而不是真正的MAC。我只想了解(坏的) CRC解决方案的风险。(与数学有关的细节)
发布于 2018-04-06 09:37:05
你们的两项计划都有缺陷,这并不是因为CRC。如果用加密哈希函数替换CRC,则您的方案仍然不安全。
如果您的目标是真实性,修改第二个方案使用HMAC而不是CRC。或者不要使用单独的MAC,在GCM模式下使用AES代替CTR。
https://security.stackexchange.com/questions/183049
复制相似问题