1.1 KiB
1.1 KiB
挑战二十七:从IV=Key的CBC中恢复密钥
题目描述
取用你在CBC练习中的代码并修改它,使其将CBC加密的密钥重新用作IV。
应用程序有时会将密钥用作IV,理由是发送方和接收方都必须知道密钥,通过同时用作密钥和IV可以节省一些空间。
将密钥用作IV是不安全的;能够修改传输中密文的攻击者可以让接收方解密一个值,该值将泄露密钥。
攻击步骤
练习16中的CBC代码加密一个URL字符串。验证明文的每个字节是否符合ASCII标准(即,查找高ASCII值)。不符合标准的消息应该引发异常或返回包含解密明文的错误(在现实系统中这种情况经常发生)。
使用你的代码加密至少3个块长的消息:
AES-CBC(P_1, P_2, P_3) -> C_1, C_2, C_3
修改消息(你现在是攻击者):
C_1, C_2, C_3 -> C_1, 0, C_1
解密消息(你现在是接收方)并在发现高ASCII时引发适当的错误。
作为攻击者,从错误中恢复明文,提取密钥:
P'_1 XOR P'_3