Проверьте реализацию AES-256-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]

Количество = 0

Ключ = 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.

Так что я сделал не так?

1 ответ

Решение

https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/CAVP-TESTING-BLOCK-CIPHER-MODES - это страница программы проверки криптографического алгоритма 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 (который указан в шестнадцатеричном виде) и IV/nonce из 3c819d9a9bed087615030b65 (все еще в шестнадцатеричном виде) пустой открытый текст и пустые связанные данные должны создавать пустой зашифрованный текст и тег авторизации 250327c674aaf477aef2675748cf6971 (да, все еще шестнадцатеричный).

Существует множество тестов этого режима (разные ключи, без открытого текста, без AAD), затем множество "сейчас с AAD", затем "только с открытым текстом", и, в конце концов, такие случаи, как

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

Который позволит вам проверить весь комплект и Kaboodle. Неудачные тесты "по одной части за раз", вероятно, легче отлаживать.

Другие вопросы по тегам