Verificar uma implementação AES-256-GCM com outra ferramenta
acabei de descobrir que nem duas páginas diferentes, que têm AES-256 implementadas, têm os mesmos valores que a saída.
Obrigado pela ajuda.editar: Preciso de verificar a minha própria implementação. disso, e eu quero fazer isso, por verificação com vetores de teste, que foram verificados por uma ferramenta já verificada.
Edit2: Estou à procura de uma forma de verificar a minha implementação. Então eu pensei em vetores de teste ou outro, já validado, ferramenta. Esta é a parte em que eu preciso de Ajuda: Onde posso encontrar vetores de teste ou tal ferramenta?
Edit3: avaliação com php
Estamos a usar o "openssl_ Encrypt" para avaliação.
$CM = "aes-256-gcm"; //cypher mode
$PT = "";//plain
$CT = "";//cypher
$key = "";
$iv = "";
$cypher = openssl_encrypt($PT, $CM, $key, $options=0, $iv, $tag);
Se queremos avaliar a etiqueta, temos de ... do:
print(unpack("h*", $tag)[1]);
Agora podemos ver, se ambos são iguais, em relação a " gcmEncryptExtIV256.rsp " com
[Keylen = 256] [IVlen = 96] [PTlen = 0] [AADlen = 0] [Taglen = 128]
Contagem = 0
Chave = b52c505a37d78eda5d34f20c22540ea1b58963cf8e5bf8ffa85f9f2492505b4
IV = 516c33929df5a3284ff463d7
PT = AAD = CT =
Tag = bdc1ac884d332457a1d2664f168c76f0
Temos:
$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]);
Isto é injusto. to bdc1ac884d332457a1d2664f168c76f0.
Então, o que fiz de errado?
1 answers
Https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/CAVP-TESTING-BLOCK-CIPHER-MODES#GCMVS é a página do programa de Validação de algoritmos criptográficos NIST (CAVP) para modos de cifra em bloco, incluindo GCM.
No fundo, contém uma ligação a um corpo de vectores de ensaio.https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zipIn, por exemplo {[2] } you get cases tipo
Count = 0
Key = 11754cd72aec309bf52f7687212e8957
IV = 3c819d9a9bed087615030b65
PT =
AAD =
CT =
Tag = 250327c674aaf477aef2675748cf6971
Assim, com a chave 11754cd72aec309bf52f7687212e8957
(que é especificada em hex) e a IV/nonce de 3c819d9a9bed087615030b65
(ainda hex), o texto simples vazio e os dados associados vazios devem produzir um cifrotexto vazio e uma marca auth de 250327c674aaf477aef2675748cf6971
(sim, ainda hex).
Há um monte de testes desse modo( chaves diferentes ,sem texto simples, sem AAD), então abundância de "Agora com AAD", então "apenas com texto simples", e, eventualmente, casos como
Count = 14
Key = f42c74bcf473f6e923119946a89a0079
IV = 14852791065b66ccfa0b2d80
PT = 819abf03a7a6b72892a5ac85604035c2
AAD = 297007ac9419553a292b0fee3a7ac3c9
CT = 48371bd7af4235c4f11c458f1789192a
Tag = 4f44e0aff49a5a20ab2c69c834
Que te deixou verificar o kit todo e o kaboodle. Um part at a time " tests Falling are probably easier to debug, though.