Я хочу отправлять сообщения от Алисы Бобу с помощью транспортного метода, похожего на 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 не тривиально