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

Php 使用其他工具验证AES-256-GCM实施,php,encryption,cryptography,aes,aes-gcm,Php,Encryption,Cryptography,Aes,Aes Gcm,我需要验证遵循FIPS-197标准的工具的正确性。所以我会收到一个三元组,我想解码这个三元组(key,cypher,IV) 有没有简单的方法可以做到这一点?是否有可能有用的在线实现 我刚刚发现,即使是实现了AES-256的两个不同页面,其输出值也不相同 谢谢你的帮助 编辑: 我需要验证我自己的实现,我想通过检查测试向量来完成这项工作,测试向量已经被一个已经验证过的工具验证过了 编辑2: 我正在寻找一种方法来验证我的实现。所以我想到了测试向量或者其他已经验证过的工具。这是我需要帮助的部分:在哪里可

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

有没有简单的方法可以做到这一点?是否有可能有用的在线实现

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

谢谢你的帮助

编辑: 我需要验证我自己的实现,我想通过检查测试向量来完成这项工作,测试向量已经被一个已经验证过的工具验证过了

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

Edit3:使用php进行评估 我们使用“openssl\u加密”进行评估

$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]

计数=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不相等

那么我做错了什么呢?

是针对分组密码模式(包括GCM)的NIST加密算法验证程序(CAVP)页面

在底部,它包含一个指向测试向量语料库的链接

例如,在
gcmEncryptExtIV128.rsp
中,您会遇到如下情况

Count = 0
Key = 11754cd72aec309bf52f7687212e8957
IV = 3c819d9a9bed087615030b65
PT = 
AAD = 
CT = 
Tag = 250327c674aaf477aef2675748cf6971
Count = 14
Key = f42c74bcf473f6e923119946a89a0079
IV = 14852791065b66ccfa0b2d80
PT = 819abf03a7a6b72892a5ac85604035c2
AAD = 297007ac9419553a292b0fee3a7ac3c9
CT = 48371bd7af4235c4f11c458f1789192a
Tag = 4f44e0aff49a5a20ab2c69c834
因此,使用键
11754cd72aec309bf52f7687212e8957
(以十六进制指定)和
3c819d9a9bed087615030b65
(仍然是十六进制)的IV/nonce,空明文和空关联数据应该产生空密文和
250327c67aaf47aef267548cf6971
(是的,仍然是十六进制)

这种模式有很多测试(不同的键,没有明文,没有AAD),然后是大量的“现在有AAD”,然后是“只有明文”,最后是类似的情况

Count = 0
Key = 11754cd72aec309bf52f7687212e8957
IV = 3c819d9a9bed087615030b65
PT = 
AAD = 
CT = 
Tag = 250327c674aaf477aef2675748cf6971
Count = 14
Key = f42c74bcf473f6e923119946a89a0079
IV = 14852791065b66ccfa0b2d80
PT = 819abf03a7a6b72892a5ac85604035c2
AAD = 297007ac9419553a292b0fee3a7ac3c9
CT = 48371bd7af4235c4f11c458f1789192a
Tag = 4f44e0aff49a5a20ab2c69c834

这让你可以检查整个工具包和卡布多。“一次一个部件”测试失败可能更容易调试。

我不知道这与编程有什么关系?要验证实现,必须进行测试。为了确保处理的数据是正确的,我必须使用一个已经评估过的工具来检查一个或两个测试向量。目前我想,我必须使用PHP+OpenSSL.AES是一个标准,但是操作模式、配置参数和编码可能仍然不同。没错。但假设我使用了FIPS-197(AES-256)和NIST D800-38D(GCM)建议。出于测试目的,我刚刚找到了这个文档:但它没有指定任何用于测试目的的普通/密码。这只是gcm的一部分。总之,我正在寻找一些测试向量或带有验证的参考实现。@Shalec您的“编辑3”现在基本上是一个不同的问题,您应该将其回滚并作为一个新问题而不是对这个问题进行编辑。嘿,如果我尝试用php进行评估,我永远不会找到正确的答案。我将编辑一些php代码进行评估。如果你能提前帮忙,那就太好了。