3-DES加密环境中的KCV(密钥检查值)是什么?关于什么是KCV以及它如何在3-DES加密中使用,是否有很好的文档?
答案 0 :(得分:6)
“6.15钥匙检查值
目的:该数据用于证明卡/处理器可以访问特定的DES密钥值
格式:二进制,3个字节
内容:DES密钥加密八个字节的零结果的最左边三个字节“(source)
__
“任何DES密钥的密钥检查值将通过使用ECB 3DES加密8字节'00'来计算,并使用相关密钥”(source)
__
“DES / 3DES密钥的密钥检查值(缩写为KCV或CV)是使用密钥加密16个十六进制零的结果。例如,单长度DES密钥0123456789ABCDEF的密钥检查值等于D5D44FF720683D0D。当以加密方式发送DES / 3DES密钥时,信息非常有用,并且通常由发送方发送,以确保收件人已正确接收密钥。 (source)
__
对我而言,这似乎是某种checksum。
答案 1 :(得分:2)
KCV用于例如硬件安全设备的PKCS#11标准。想象一下,您需要导入密钥,可能是多个部分。然后,您需要验证导入是否成功。您只需检查一个块加密所有零(或其最左边部分)与先前计算的KCV值。由于对称算法应该对已知的纯文本/密文攻击无懈可击,因此您不会泄漏有关密钥的任何信息。
对于硬件安全设备,密钥通常不可提取;因此,它们可能不适用于散列方法,或者哈希方法本身甚至可能不可用。因此,对所有零进行密钥加密是创建安全校验和的好方法。对于其他密钥,例如RSA密钥,通常使用散列(SHA-1)代替加密来识别密钥的(值)。
在软件中,您只需创建一个仅包含零的块,然后执行ECB加密或CBC加密,并将IV设置为全零。然后取x字节作为KCV。 KCV中的字节数取决于使用的标准。如果使用少于3个字节,即使偶然也会遇到具有相同值的键。
请注意,KCV确实泄漏了一些信息;它显示了所有零的块的密文加密是什么样的。如果您使用随机IV执行CBC加密,那应该没什么关系。另一方面,如果使用带有零IV的CTR模式加密,则可能会泄漏密钥流的前3个字节(因此也会泄漏明文)。
让我们与RobIII保持一致:source(注意:FTP)