Скажем, у Алисы и Питера есть флешка на 4 ГБ. Они встречают и сохраняют на обеих палочках два файла с именами alice_to_peter.key
(2 ГБ) и peter_to_alice.key
(2 ГБ), которые содержат случайно сгенерированные биты. Они никогда не встречаются снова, но общаются в электронном виде. Алиса также поддерживает переменную с именем, alice_pointer
а Питер поддерживает переменную с именем peter_pointer
, обе из которых изначально установлены в ноль.
Когда Алисе необходимо отправить сообщение Питеру, она делает это (где n
находится n-й байт сообщения):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(и для максимальной безопасности, использованная часть ключа может быть стерта)
Питер получает encrypted_payload_to_peter
, читает, alice_pointer
хранится в начале сообщения и делает:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
А для максимальной безопасности после прочтения сообщения также сотрите использованную часть ключа.
- РЕДАКТИРОВАТЬ: На самом деле этот шаг с помощью этого простого алгоритма (без проверки целостности и аутентификации) снижает безопасность, см. Пост Paŭlo Ebermann ниже.
Когда Питеру нужно отправить сообщение Алисе, они делают обратное, на этот раз с peter_to_alice.key
и peter_pointer
.
С помощью этой тривиальной схемы они могут отправлять каждый день в течение следующих 50 лет 2 ГБ / (50 * 365) = ~ 115 КБ зашифрованных данных в обоих направлениях. Если им нужно больше данных для отправки, они могли бы использовать более крупные ключи, например, с сегодняшними 2 ТБ HD (1 ТБ ключи) можно было бы обменивать 60 МБ / день в течение следующих 50 лет! Это много данных на практике; например, используя сжатие, это более часа высококачественной голосовой связи.
Мне кажется, что у злоумышленника нет возможности прочитать зашифрованные сообщения без ключей, потому что, даже если у них бесконечно быстрый компьютер, они могут грубо перехватить любое возможное сообщение, но это астрономическое число. сообщений, и злоумышленник не знает, какое из них является фактическим сообщением.
Я прав? Действительно ли эта схема связи абсолютно безопасна? И если это безопасно, у него есть собственное имя? Шифрование XOR хорошо известно, но я ищу название этого конкретного практического приложения, использующего большие ключи с обеих сторон? Я смиренно ожидаю, что это приложение было изобретено кем-то до меня. :-)
Примечание: если это абсолютно безопасно, то это удивительно, потому что с современными недорогими большими устройствами хранения данных безопасное общение будет намного дешевле, чем с дорогой квантовой криптографией, и это имеет эквивалентную безопасность!
РЕДАКТИРОВАТЬ:
Я думаю, что это будет более практичным в будущем, поскольку затраты на хранение уменьшатся.Это может решить безопасную связь навсегда.Сегодня у вас нет уверенности в том, что кто-то успешно атакует существующие шифры даже через год и делает их часто дорогие реализации небезопасными. Во многих случаях до того, как происходит общение, когда обе стороны встречаются лично, самое время генерировать ключи. Я думаю, что он идеально подходит для военного общения, например, между подводными лодками, которые могут иметь жесткие диски с большими ключами, а военный центр может иметь HD для каждой подводной лодки. Это также может быть практичным в повседневной жизни, например, для контроля вашего банковского счета, потому что, когда вы создаете свой счет, вы встречаетесь с банком и т. Д.
источник
Ответы:
Да, это одноразовый блокнот . Если материал ключа никогда не используется повторно, он теоретически безопасен.
Недостатком является то, что вам понадобится один ключ для каждой пары сообщающихся, и вам потребуется безопасный способ обмена материалом ключа до общения.
источник
Как показывает ответ Ватина , ваш алгоритм в основном одноразовый.
Однако, чтобы прокомментировать одну из ваших заметок:
Мой ответ - нет, это не удивительно. Дьявол всегда в деталях, а дьявол здесь в обмене ключами. Ваш метод зависит от безупречного обмена ключами лицом к лицу. Я не могу позволить себе посылать Джеймса Бонда с 4 ГБ флэш-диском для меня каждому торговцу в Интернете каждый раз, когда я хочу что-то купить или иметь другие безопасные соединения.
И, наконец, аспект XOR вашего алгоритма не важен. Простой подстановочный шифр прекрасно подходит для OTP. Сила OTP заключается в том, что ключ никогда не используется повторно, и предполагается, что Джеймс Бонд безупречно обменивается ключами для обеих сторон (то есть до безопасного обмена ключами)
источник
Хотя одноразовая панель имеет безусловную (математически доказанную) гарантию конфиденциальности против злоумышленника, который может только читать сообщения, она имеет некоторые недостатки.
Злоумышленник-перехватчик, который правильно угадывает обычный текст, может манипулировать зашифрованным текстом с тем, что он хочет (с одинаковой длиной).
Если злоумышленник вставляет или удаляет какое-либо сообщение (или его часть), указатели Алисы и Боба становятся несинхронными, и каждое последующее сообщение прерывается.
Обновление: предполагается, что обе стороны отслеживают оба указателя. Если вы отправляете текущее значение указателя, вы уязвимы для атак с двумя временными панелями (если вы разрешаете использовать один и тот же диапазон клавиш более одного раза) или DOS-атак (если вы не разрешаете один и тот же диапазон клавиш использоваться более одного раза, например, удаляя их).
Обе эти проблемы вызваны отсутствием целостности и защиты аутентификации - у вас есть идеальный шифр, но нет MAC.
Добавьте MAC к вашему протоколу одноразовой памяти, чтобы сделать его действительно безопасным. Каждое сообщение должно получить «контрольную сумму», которая гарантирует, что оно действительно было отправлено предполагаемым отправителем и не было изменено между Кроме того, вам следует отправить некоторый порядковый номер, чтобы получатель знал, какую часть ключа использовать, когда предыдущее сообщение потеряно (или отклонить сообщение, если оно дублируется) - включите его в вычисление контрольной суммы.
Здесь можно использовать обычный алгоритм MAC, но я полагаю, что вы, возможно, захотите использовать какой-то одноразовый полиномиальный MAC, чтобы обеспечить соответствие безопасности вашему одноразовому блокноту. (Возьмите ключ MAC из битов до или после вашего ключа шифрования, т.е. не используйте один ключ для обеих целей.)
источник
На самом деле это не совсем безопасно. Утечка вашего протокола - это ДЛИНА передаваемого сообщения.
Например, если шпион знает, что вы ответите «да» или «нет» и увидит длину = 2, он может определить, что это «нет».
На самом деле удивительно, сколько можно вывести только из известных длин, если можно угадать контекст.
источник