Рейтинг:1

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

флаг ws

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

Я думал использовать AEAD с блочным шифром для выполнения тяжелой работы, например, AES в режиме GCM. Проблема, с которой я сталкиваюсь, заключается в предотвращении повторных атак, и я придумал следующую идею. Назовем устройства $А$ и $В$ и рассмотреть сообщение от $А$ к $В$ Только.

  • $А$ генерирует случайную строку $а$ и отправляет его на $В$.
  • $В$ генерирует случайную строку $b$ и отправляет его на $А$.
  • Обе $А$ и $В$ вычислять $h=H(k \Vert a \Vert b)$ для некоторой криптографической хеш-функции $Ч$и использовать $ч$ как первый вектор инициализации для схемы AEAD.

В любое время $А$ нужно отправить сообщение $м$ к $В$, он шифрует $м$ чтобы получить соответствующий зашифрованный текст $с$, вычисляет тег аутентификации $t$, и отправляет $c \Верт т$ к $А$ (сообщения имеют фиксированную длину, поэтому длина $c \Верт т$ является постоянным). затем $А$ приращения $ч$ и повторно инициализирует схему AEAD с новым IV $ч$.

Процесс расшифровки аналогичен: $В$ получает $c \Верт т$, расшифровывает $с$ в $м$, аутентифицирует сообщение с помощью тега $t$, приращения $ч$, и повторно инициализирует схему AEAD с новым значением $ч$.

Сообщение от $В$ к $А$ полностью симметрична, за исключением того, что начальные IV $H(k \Верт б \Верт а)$.

Есть ли какой-либо очевидный недостаток в приведенной выше идее? Я заново изобретаю велосипед? Если да, то какое решение может быть использовано для решения этой проблемы?

kelalaka avatar
флаг in
Небольшой поиск [противодействие повторной атаке] (https://crypto.stackexchange.com/search?q=replay+attack+countermeasure) и посмотрите [конец ответа] (https://crypto.stackexchange.com/a/ 41327/18298)
Steven avatar
флаг ws
Я знаю, что атак воспроизведения можно избежать, добавив метки времени или счетчики. Однако устройство $A$ не сохраняет состояние между перезагрузками (это встроенное устройство) и не имеет внутренних часов (я не хочу полагаться на синхронизацию времени через Интернет, так как это зависит от наличия работающего подключения к Интернету).
kelalaka avatar
флаг in
Тогда вам нужны подписи...
Steven avatar
флаг ws
Не могли бы вы уточнить, как сигнатуры могут помочь против повторных атак? Даже если сообщение подписано, я смогу проверить только его подлинность, но не то, было ли оно воспроизведено. Более того, схема AEAD, которую я предлагаю, уже должна обеспечивать аутентичность. Есть ли что-то неправильное в схеме, которую я предлагаю? Мне кажется, что $h$ должен быть гарантированно случайным "сеансовым" секретом, разделяемым между $A$ и $B$. Есть ли проблема с использованием $h$ для инициализации IV и с увеличением IV после каждого сообщения?
SAI Peregrinus avatar
флаг si
Почему струны? Почему не двоичные значения фиксированной длины? Зачем использовать хэш H вместо правильного хэша с ключом или MAC?
Steven avatar
флаг ws
@SAIPeregrinus. Двоичные значения фиксированной длины прекрасно подходят. На самом деле это то, что я имел в виду, хотя я и писал струны. Кроме того, я искал хэши с ключами, и кажется, что они логически служат той же цели, что и $H$, поэтому в моем описании выше $H(k \Vert a \Vert b)$ можно заменить на $HMAC(k,a \ Верт б)$. Спасибо.
Рейтинг:1
флаг it

Это, я думаю, ваш самый важный момент (из комментариев):

Я знаю, что атак воспроизведения можно избежать, добавив метки времени или счетчики. Однако устройство А не сохраняет состояние между перезагрузками (это встроенное устройство) и не имеет внутренних часов (я не хочу полагаться на синхронизацию времени через Интернет, так как это зависит от наличия рабочего подключения к Интернету).

Затем за сеанс используйте счетчик. Между сеансами используйте Диффи-Хеллман обмен ключами через симметричное шифрование с общим ключом. Это также даст вам прямая секретность. Я не вижу большой пользы от предложенного вами механизма по сравнению с этим.

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

Steven avatar
флаг ws
Спасибо. Я просто хочу убедиться, что правильно понял предложенную вами схему. Вы предлагаете мне выполнить обмен ключами Диффи-Хеллмана, используя схему AEAD с моим предварительным общим ключом, чтобы гарантировать аутентификацию (нужно ли мне здесь шифрование?). Здесь схема AEAD должна будет использовать некоторый жестко закодированный IV. Тем не менее, согласованный ключ DH $k$ будет секретным и разным для каждого сеанса.Затем я могу использовать $k$ в качестве сеансового ключа для другой схемы AEAD для обмена реальными сообщениями. Насколько я понимаю, для каждого сообщения нужен другой IV. В этом случае я могу просто использовать счетчик, начинающийся с $0$?
Steven avatar
флаг ws
Кроме того, похоже, что вся 1-я часть протокола выполняет [обмен ключами с проверкой подлинности пароля] (https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange#Password-authenticated_key_agreement). Если это так, можем ли мы использовать идею, набросанную в Википедии? А именно, $A$ и $B$ уже имеют общий секрет $s$; они вычисляют сеансовый ключ $k$, используя обмен ключами DH. Затем $A$ отправляет $hash(s \Vert 0 \Vert k)$ на $B$ , который $B$ проверяет для аутентификации $A$. Симметрично $B$ отправляет $hash(s \Vert 1 \Vert k)$ в $A$. Связь продолжается с использованием $k$ в качестве сеансового ключа.

Ответить или комментировать

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