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

时间:2018-03-14 08:51:17

标签: php encryption cryptography aes aes-gcm

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

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

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

感谢您的帮助。

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

EDIT2: 我正在寻找一种方法来验证我的实现。所以我想到了测试向量或另一个已经验证过的工具。这是我需要帮助的部分:我在哪里可以找到测试向量或这样的工具?

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 =

     

标签= 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。

那我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

在底部,它包含指向测试向量语料库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(仍为十六进制),空明文和空关联数据应生成空密文和auth标记250327c674aaf477aef2675748cf6971(是的,仍然是十六进制)。

该模式有很多测试(不同的键,没有明文,没有AAD),然后有很多“现在用AAD”,然后“只用明文”,最后的情况如

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

让你检查整个套件和kaboodle。但是,“一次一部分”测试失败可能更容易调试。