Гарантии безопасности, недостатки предложенного метода - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу отправлять сообщения от Алисы Бобу с помощью транспортного метода, похожего на UDP, поэтому не подключен.Я предполагаю, что Ева подслушивает, может получить копию того, что отправлено, и что Мэллори атакующий может сделать все, что Ева может И отправить Бобу.Я также предполагаю, что Мэллори не может быть посредником, то есть не может остановить сообщение от Алисы Бобу о достижении Боба, но Мэллори МОЖЕТ изменить данные, а МОЖЕТ просто воспроизвести перехваченные сообщения.Моя пропускная способность ограничена, поэтому я не хочу, чтобы в «пользовательские данные» добавлялось слишком много данных для обеспечения защиты данных.

Я хочу добиться конфиденциальности данных (шифрование), а также защиты от несанкционированного доступа (целостности) и аутентичностигарантии, в основном, чтобы уменьшить возможности Мэллори до нуля.Я предлагаю следующее:

Алиса и Боб совместно используют секретный ключ для целей шифрования (например, AES).

Алиса и Боб совместно используют секретный ключ для целей подписи / проверки (например, HMAC+ SHA256).

Ключи шифрования и подписи могут быть одинаковыми или разными.

Одноразовый номер должен включаться в сообщения, которые Алиса отправляет Бобу.UUID может служить в качестве одноразового номера, давая мне 16-байтовый одноразовый номер.Время опережения также может служить nonce.

Для данных P в виде открытого текста Алиса шифрует это для получения C, а затем добавляет nonce N для получения C + N.Затем она подписывает C + N, получая S, и добавляет S к C + N, получая C + N + S.Это то, что отправляется Бобу.Ева / Мэллори не могут получить P, Мэллори не может ни изменить сообщение, ни воспроизвести его, ни создать новые сообщения.

Боб должен управлять «одноразовым хранилищем» всех одноразовых номеров, которые он когда-либо видел.Или, возможно, использовать время в качестве одноразового номера (сводя хранилище к одному значению), но затем Алиса несет ответственность за получение монотонно растущих значений.

Учитывая, что большинство криптографических протоколов (например, TLS) работают над подключенной моделью,например, TCP, я не смог найти никаких готовых (принятых!) методов, отсюда и это предложение.

Любая помощь приветствуется, особенно из-за того, что «вы не хотите делать это какэто потому, что он будет страдать дыры в безопасности X, Y, Z 'разнообразие.Я в курсе всей дискуссии «зашифруй, затем подпиши», и не очень хочу это в нее вносить.

ОБНОВЛЕНИЕ: В ответ на ответы, предлагающие DTLS и использование времени для одноразовых номеров, у меня будетчтобы развить аспекты моей несвязанной модели, которые, как я надеялся, не были актуальны в первоначальном посте, но, очевидно, имеют значение.В моей модели Алиса на самом деле не отправляет напрямую Бобу.Сообщения хранятся посредником, считайте его почтовым сервером.И Боб не может проверять свою «Входящую почту» в течение нескольких часов или даже дней с того момента, как Алиса отправила сообщение.Кроме того, часы Боба и Алисы не синхронизированы, поэтому наличие «времени истечения» x не тривиально

1 Ответ

0 голосов
/ 26 февраля 2019

Ваш предложенный метод уже достаточно хорош.Однако я бы посоветовал:

  • Не используйте тот же ключ для шифрования, что и для MAC.Не существует каких-либо известных теоретических взаимодействий между AES и HMAC, но практические причины (утечка ключей и т. Д.) Означают, что лучше иметь два разных ключа.

  • Вы говорите, что не понимаетеНе хочу вдаваться в подробности, но есть очень мало причин, чтобы не шифровать-то-mac.Вы должны предпочесть это, если это возможно.

  • Хранить все nonces навсегда довольно утомительно.Используйте основанный на времени подход к истечению срока подписи:

    • Алиса шифрует C = E(M) и добавляет текущее время T, затем подписывает для получения S.Она посылает C + T + S Бобу.
    • Боб проверяет, находится ли T в пределах x секунд текущего времени.Если это не так, Боб игнорирует сообщение.
    • Боб проверяет, распознает ли он S.Если он это делает, Боб игнорирует сообщение.
    • Боб временно сохраняет S x секунд, после чего он его забывает.
    • Боб расшифровывает M = D(C) и обрабатывает M.

Теоретически значение x может быть любым, но я бы предложил что-то в диапазоне 5-10 секунд или около того.

...