Я подумываю использовать AES256 CBC + HMAC SHA-256 как строительный блок для сообщений, который обеспечивает как конфиденциальность, так и аутентификацию.
В частности, рассмотрим этот сценарий:
- Алиса владеет открытым ключом, принадлежащим Бобу (ключ обмена и алгоритм выходит за рамки этого вопроса). У Алисы есть идентифицирующий ключ К, также разделяемый с Бобом, который она может использовать, чтобы идентифицировать себя. Только Алиса и Боб знают ключ К.
- Алиса шифрует (nonce || K) с помощью открытого ключа Bob.
- Боб расшифровывает пакет и теперь имеет K и nonce.
- Боб использует SHA-256 с SHA256 (K || nonce), чтобы получить K (e) из 256 бит.
- Боб использует SHA-256 с SHA256 (K || nonce + 1), чтобы получить K (s) из 256 бит.
Теперь для каждого пакета, который Боб хочет отправить Алисе, он выполняет следующее:
- Создайте новый случайный бит 128 бит IV
- Шифрует сообщение, используя клавиши IV и K (e) в качестве ключа.
- Создает SHA-256 HMAC с K (s) в качестве ключа и (IV || Зашифрованное сообщение) в качестве данных.
- Наконец отправляет (IV || HMAC || Ciphertext) Алисе
Алиса также вычислила K (e) и K (s) и выполняет следующую процедуру при получении данных от Боба:
- Разделите сообщение на IV, зашифрованный текст и HMAC.
- Вычислить HMAC с использованием K (s), IV и зашифрованного текста.
- Сравните HMAC с отправленным HMAC. Если это совпадает, Алиса считает это сообщение аутентифицированным как сообщение, отправленное Бобом, в противном случае оно будет отброшено.
- Алиса расшифровывает сообщение, используя K (e)
Обеспечивает ли этот протокол, что Алиса только расшифровывает сообщения от Боба, полагая, что никто, кроме Боба, не может прочитать зашифрованное сообщение, которое Алиса посылает ему зашифрованным с помощью его открытого ключа?
т.е. построенные таким образом сообщения обеспечивают конфиденциальность и аутентификацию?
Примечание. Если для протокола требуется, чтобы Боб отправил несколько сообщений, эта схема нуждается в небольшой модификации, чтобы избежать повторных атак.
P.S. Я знаю AES-GCM/CCM, но эта схема будет работать с основными алгоритмами AES, SHA и HMAC, которые можно найти в большинстве криптовых пакетов. Это решение также может быть медленнее, но это тоже выходит за рамки вопроса.