Мне нужно проверить правильность инструмента, соответствующего стандарту FIPS-197. Таким образом, я получу тройку, и я хочу расшифровать эту тройку (ключ, шифр, IV).
Есть ли способ сделать это просто? Есть ли какая-нибудь онлайн-реализация, которая может быть полезна?
Я только что узнал, что даже две разные страницы, на которых реализован AES-256, не имеют таких же значений, как вывод.
Спасибо за помощь.
Редактировать:
Мне нужно проверить мою собственную реализацию этого, и я хочу сделать это путем проверки с помощью тестовых векторов, которые были проверены уже проверенным инструментом.
Edit2:
Я ищу способ проверить мою реализацию. Поэтому я подумал о тестовых векторах или другом, уже проверенном инструменте. Это та часть, в которой мне нужна помощь: где я могу найти тестовые векторы или такой инструмент?
Мы используем «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.
Так что я сделал не так?
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
(который указан в шестнадцатеричном виде) и IV / nonce из 3c819d9a9bed087615030b65
(все еще в шестнадцатеричном виде) пустой открытый текст и пустые связанные данные должны создать пустой зашифрованный текст и тег авторизации 250327c674aaf477aef2675748cf6971
(да, все еще шестнадцатеричный).
Существует множество тестов этого режима (разные ключи, без открытого текста, без AAD), затем множество «сейчас с AAD», затем «только с открытым текстом», и, в конце концов, такие случаи, как
Count = 14
Key = f42c74bcf473f6e923119946a89a0079
IV = 14852791065b66ccfa0b2d80
PT = 819abf03a7a6b72892a5ac85604035c2
AAD = 297007ac9419553a292b0fee3a7ac3c9
CT = 48371bd7af4235c4f11c458f1789192a
Tag = 4f44e0aff49a5a20ab2c69c834
Который позволит вам проверить весь комплект и Kaboodle. Неудачные тесты «по одной части за раз», вероятно, легче отлаживать.
Других решений пока нет …