как расшифровать с помощью случайного одноразового номера в шифровании AES

Я новичок в криптографии. Мне нужно зашифровать текст с помощью AES с некоторой конфигурацией

Encryption mode: GCM
Key size: 256 bits
Nonce size: 96 bits
MAC size: 128 bits

Поскольку AES - это симметричный алгоритм. так что у меня есть секретный ключ. Я погуглил и нашел

nonce - это случайное число, используемое, чтобы убедиться, что сообщение уникально.

Но я сомневаюсь, как я могу выполнить дешифрование, если nonce - случайное число. мне нужно хранить одноразовый номер вместе с каждым шифрованием. или любым другим способом мне нужно разделить nonce, cipher и mac с помощью ключа. как я могу использовать предоставленную конфигурацию для шифрования.


person nitin verma    schedule 25.11.2019    source источник


Ответы (2)


Но я сомневаюсь, как я могу выполнить дешифрование, если nonce - случайное число. мне нужно хранить одноразовый номер вместе с каждым шифрованием.

Да, результат сохраненного / отправленного шифрования: nonce, ciphertext, mac.

как я могу выполнить дешифрование, если nonce - случайное число

Одноразовый номер генерируется случайным образом при шифровании ввода, а затем одноразовый номер передается по зашифрованному тексту (очень часто одноразовый идентификатор добавляется в качестве первого блока). На самом деле вам нужно ОДНО ТАКОЕ значение nonce при расшифровке, тогда nonce является частью ввода для дешифрования, а не случайным

или любым другим способом мне нужно разделить nonce, cipher и mac с помощью ключа. как я могу использовать предоставленную конфигурацию для шифрования.

Существует стандартизированный формат сообщения для зашифрованного документа или зашифрованные сообщения XML, но они довольно сложные .

На самом деле - для более простых приложений очень часто мы видим вывод шифрования, составленный как IV || ciphertext || MAC (как конкатенация). IV и MAC имеют фиксированную длину, поэтому вы можете вырезать их и использовать параметры для дешифрования.

расшифровка происходит на разных машинах и на разных языках. они поделились только ключом для шифрования. тот же ключ, который они используют для дешифрования. если я добавлю любое случайное значение в качестве nonce, тогда как он узнает, какую логику я использовал для nonc

Это не имеет значения, пока вы не предоставите тот же ввод. Как уже упоминалось, вы можете передать IV (одноразовый номер) как часть сообщения и перед расшифровкой разделить одноразовый идентификатор и исходный зашифрованный текст.

Кстати: у меня есть ссылки на несколько примеров шифрования

person gusto2    schedule 25.11.2019
comment
Потрясающе, вы действительно спасли мне день !! - person nitin verma; 25.11.2019
comment
не могли бы вы дать мне лучшее представление, как я могу поделиться nonce и MAC. Я имею в виду, нужно ли мне хранить в базе данных вместе с первичным ключом или может быть другим способом. - person nitin verma; 25.11.2019
comment
Вы можете хранить двоичный одноразовый номер и MAC как хотите, если вы храните их с зашифрованным текстом, не с ключом GCM. Если вы имеете в виду первичный ключ базы данных, который идентифицирует сообщение / зашифрованный текст, то ответ, вероятно, будет положительным. - person Maarten Bodewes; 25.11.2019

Точнее, одноразовый номер должен храниться вместе с зашифрованным текстом.

Помните, что одноразовый номер, являющийся частью зашифрованного текста, не дает злоумышленнику никаких преимуществ.

Из Википедии:

Инициализация вектор имеет другие требования к безопасности, чем ключ, поэтому IV обычно не обязательно должен быть секретным. Однако в большинстве случаев важно, чтобы вектор инициализации никогда не использовался повторно с одним и тем же ключом. Для CBC и CFB повторное использование IV приводит к утечке некоторой информации о первом блоке открытого текста и о любом общем префиксе, разделяемом этими двумя сообщениями.

Цель вектора инициализации - внести некоторую случайность в процесс шифрования, чтобы злоумышленник не мог узнать, когда два идентичных сообщения открытого текста были зашифрованы с одним и тем же ключом.

IV требуется для расшифровки, вы можете просто отправить его вместе с зашифрованным текстом.

IV || ciphertext

Самый распространенный способ передать вектор инициализации - это добавить его непосредственно перед зашифрованным текстом.

person Woodstock    schedule 25.11.2019
comment
tats означает, что для дешифрования нужен nonce вместе с секретным ключом? - person nitin verma; 25.11.2019
comment
@nitinverma да, вы можете просто объединить IV и зашифрованный текст - person Woodstock; 25.11.2019
comment
как получатель поймет, что такое случайный сгенерированный одноразовый номер. - person nitin verma; 25.11.2019
comment
@nitinverma ну, это не имеет значения, поскольку IV эффективно обрабатывается как первый блок, вам не нужно разбирать его, однако, даже если вы хотите, вы можете просто удалить первое x количество бит по мере необходимости, пожалуйста отметьте вопрос как ответ. - person Woodstock; 25.11.2019
comment
Я не могу понять, как будет происходить дешифрование, не зная одноразового номера. не могли бы вы привести пример для шифрования и дешифрования - person nitin verma; 25.11.2019
comment
Вы должны зашифровать, отправить зашифрованный текст и IV. Расшифровать тем же ключом и IV. Вы можете отправить IV как часть зашифрованного текста в открытом виде. Какую часть вы не получите? На каком языке ты вообще говоришь? - person Woodstock; 25.11.2019
comment
на самом деле проблема в том, что дешифрование происходит на разных машинах и на разных языках. они поделились только ключом для шифрования. тот же ключ, который они используют для дешифрования. если я добавлю какое-либо случайное значение в качестве одноразового номера, тогда как он узнает, какую логику я использовал для одноразового номера. я использую JAVA - person nitin verma; 25.11.2019
comment
Для GCM (и любого другого режима AE) вы также должны отправить тег аутентификации (MAC) от шифратора к дешифратору. Довольно часто тег добавляется к end зашифрованного текста, особенно в Java, где провайдер делает это за вас (и если вам нужен какой-то другой формат, вы должны снять его, а затем прикрепить обратно на). - person dave_thompson_085; 25.11.2019
comment
Цель вектора инициализации - вставить некоторую случайность в процесс шифрования. Я бы сказал, что вы вставляете уникальность, а не случайность. Если требуется случайность, то использование последовательных одноразовых номеров не удастся для таких режимов, как GCM (а они этого не делают). Необходимая случайность уже присутствует в ключе. Для таких режимов, как CBC, требуется непредсказуемый IV, но он все же отличается от случайного IV. - person Maarten Bodewes; 25.11.2019