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

Verify an AES-256-GCM implementation with another tool

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

有什么简单的方法吗?是否有任何在线实现可能有用?

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

感谢您的帮助。

编辑: 我需要验证我自己对此的实现,我想通过检查测试向量来执行此操作,这些测试向量已经过验证工具的验证。

编辑2: 我正在寻找一种方法来验证我的实现。所以我想到了测试向量或其他已经验证过的工具。这是我需要帮助的部分:Where can I find test-vectors or such a tool?

Edit3:使用 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”和

[Keylen = 256] [IVlen = 96] [PTlen = 0] [AADlen = 0] [Taglen = 128]

Count = 0

Key = b52c505a37d78eda5dd34f20c22540ea1b58963cf8e5bf8ffa85f9f2492505b4

IV = 516c33929df5a3284ff463d7

PT = AAD = CT =

Tag = 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) 页面。

底部包含 link 到测试向量语料库,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),然后是大量的 "now with AAD",然后是 "just with plaintext",最后是像 [=18 这样的情况=]

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

这让您可以检查整个套件和 kaboodle。不过,"one part at a time" 失败的测试可能更容易调试。