Я пытаюсь осмыслить концепцию SIV в контексте шифрования. Я понимаю аспект неправильного использования nonce и т. д. И я понимаю, что ключевой особенностью SIV является то, что они гарантируют, что при шифровании одного и того же сообщения одним и тем же ключом будет обнаружено, что оно идентично, но не будет обнаружено ничего другого.
В частности, использование одного и того же ключа для разных сообщений не приведет к катастрофической проблеме с повторным использованием одноразового номера в другой системе.
Если я правильно понимаю, вы можете построить режим работы SIV, используя:
def encrypt(msg, ключ):
siv = hash_shake256 (биты = 192, сообщение)
вернуть xchacha20 (ключ, siv, msg), siv
Другими словами, мы сначала вычисляем хэш сообщения с ключом, а затем используем это значение в качестве одноразового номера для фактического шифрования.
Результатом является зашифрованный текст, а также сгенерированный сив
, ими можно безопасно делиться, ничего не раскрывая противнику.
Безопасность исходит из необратимого характера хэш-функции с ключом и того факта, что для каждого сообщение
мы передаем в качестве входных данных, мы гарантируем, что у нас не будет повторяющегося одноразового номера.
- Я правильно понимаю вещи?
- Безопасно ли использовать один и тот же ключ как для хэша с ключом, так и для шифрования?
- я предполагаю фактический
сив
использование немного больше, чем просто хеширование ввода?