使用其他工具验证 AES-256-GCM 实现



我需要验证遵循 FIPS-197 标准的工具的正确性。所以我会收到一个三元组,我想解码这个三元组(钥匙、密码、IV)。

有没有办法简单地做到这一点?是否有任何在线实施,这可能有用?

我刚刚发现,即使是两个不同的页面,实现了 AES-256,也没有与输出具有相同的值。

谢谢你的帮助。

编辑: 我需要验证我自己的实现,我想通过检查已经经过验证的工具验证的测试向量来做到这一点。

编辑2: 我正在寻找一种方法来验证我的实施。所以我想到了测试向量或其他已经验证的工具。这是我需要帮助的部分:我在哪里可以找到测试向量或这样的工具?

编辑3:用php评估

我们使用"openssl_encrypt"进行评估。

$CM = "aes-256-gcm"; //cypher mode
$PT = "";//plain
$CT = "";//cypher
$key = "";
$iv = "";
$cypher = openssl_encrypt($PT, $CM, $key, $options=0, $iv, $tag);

如果我们想评估标签,我们需要做:

print(unpack("h*", $tag)[1]);

现在我们可以看到,如果两者相等,关于"gcmEncryptExtIV256.rsp">

[凯伦 = 256] [IVlen = 96] [PTlen = 0] [AADlen = 0] [塔格伦 = 128]

计数 = 0

密钥 = b52c505a37d78eda5dd34f20c22540ea1b58963cf8e5bf8ffa85f9f2492505b4

IV = 516c33929df5a3284ff463d7

PT = AAD = CT =

标签 = bdc1ac884d332457a1d2664f168c76f0

我们有:

$CM = "aes-256-gcm"; 
$PT = ""; //plain
$CT = ""; //cypher
$key = "b52c505a37d78eda5dd34f20c22540ea1b58963cf8e5bf8ffa85f9f2492505b4 ";
$iv = "516c33929df5a3284ff463d7 ";
$cypher = openssl_encrypt($PT, $CM, $key, $options=0, $iv, $tag);
print(unpack("h*", $tag)[1]);

这不等于 bdc1ac884d332457a1d2664f168c76f0。

那我做错了什么?

https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/CAVP-TESTING-BLOCK-CIPHER-MODES#GCMVS 是用于分组密码模式(包括GCM)的NIST加密算法验证程序(CAVP)页面。

在底部,它包含一个指向测试向量语料库的链接,https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zip

例如,gcmEncryptExtIV128.rsp你得到这样的情况

Count = 0
Key = 11754cd72aec309bf52f7687212e8957
IV = 3c819d9a9bed087615030b65
PT = 
AAD = 
CT = 
Tag = 250327c674aaf477aef2675748cf6971

因此,使用密钥11754cd72aec309bf52f7687212e8957(以十六进制指定)和3c819d9a9bed087615030b65的 IV/nonce(仍然是十六进制),空明文和空关联数据应该产生一个空密文和一个250327c674aaf477aef2675748cf6971的身份验证标签(是的,仍然是十六进制)。

该模式有很多测试(不同的键,没有明文,没有AAD),然后是大量的"现在使用AAD",然后是"仅使用明文",最终出现的情况,例如

Count = 14
Key = f42c74bcf473f6e923119946a89a0079
IV = 14852791065b66ccfa0b2d80
PT = 819abf03a7a6b72892a5ac85604035c2
AAD = 297007ac9419553a292b0fee3a7ac3c9
CT = 48371bd7af4235c4f11c458f1789192a
Tag = 4f44e0aff49a5a20ab2c69c834

这使您可以检查整个套件和kaboodle。 不过,"一次一个部件"测试失败可能更容易调试。

最新更新