Какова лучшая ядерная ракетная криптосистема? - PullRequest
21 голосов
/ 05 мая 2010

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

plain_text=decrypt(Key1 XOR key2,ciper_text,IV)

plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)

(Предположим, AES-256-CBC с блоком CMAC, если это важно для вас.)

Ответы [ 6 ]

18 голосов
/ 05 мая 2010

XOR два случайно сгенерированных ключа вместе для получения окончательного секрета, безусловно, безопасно. Общий вид этого известен как « секретное совместное использование », и существуют безопасные алгоритмы, которые позволяют генерировать схемы «m из n», где вы генерируете n общих ресурсов, и любые m достаточны для вывода оригинальный ключ.

Самая известная схема - Секретный обмен Шамира , и включает в себя генерацию случайного полинома m-1 степени с ключом в качестве константы, затем выборку его в n местах и ​​передачу их отдельным лицам в качестве ключа акций.

5 голосов
/ 05 мая 2010

Используя XOR для ключей, вы гарантируете, что каждый бит в Key1 потенциально может быть изменен каждым битом в Key2 (и наоборот). Это означает, что держатель Key1 не может рассчитать ни Key2, ни результат XORing Key1 / Key2.

Другой способ заявить об этом состоит в том, что держатель Key1 должен будет грубо форсировать каждую возможную комбинацию битов, чтобы исчерпать доступное пространство клавиш. Тот факт, что он уже владеет одним из ключей, совсем ему не помогает.

Существуют и другие способы объединения двух клавиш, но простой XOR - это все, что требуется, когда клавиши одинаковой длины.

3 голосов
/ 06 мая 2010

Прежде чем думать о решениях, вы, вероятно, хотите подумать о требованиях. В данном сценарии, когда у вас есть два человека, которые необходимы для расшифровки сообщения, разумно потребовать, чтобы

  • каждый человек никогда не видит ключ другого человека.

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

  • оба убеждены, что расшифрованное сообщение является законным.

Похоже, это исключает вариант 2. В конце концов, как владелец Key2 может знать, что владелец Key1 расшифровал правильность, а не просто заменил законный открытый текст одним из выбранных им.

Я должен признать, что не знаю хорошего решения для сценария, который вы описываете. Потенциальная схема может выглядеть следующим образом: зашифрованный текст - кортеж c1, c2, d1, d2, где

c1 = EncryptAndMAC (Key1, Share1)

d1 = MAC (Key2, hash (Share1))

c2 = EncryptAndMAC (Key2, Share2)

d2 = MAC (Key1, Share2)

сообщение = Поделиться1 XOR Поделиться2

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

1 голос
/ 05 мая 2010

Второй вариант:

plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)

не соответствует требованию, что обе стороны должны использовать свои ключи одновременно. Ключ2 должен использоваться до Ключа1, но как только это произойдет, первая сторона (обладатель Ключа1) может подождать, чтобы расшифровать, до момента ее выбора, оставив вторую сторону вне цикла. Это может или не может быть проблемой для приложения.

Как следует из цитаты Шнайера из Cocowalla, XOR работает, если только одна из сторон не может получить комбинированный ключ (расшифровщик может сохранить этот секрет), а другой ключ используется для других целей. Если ключи не являются статистически независимыми, скорость XOR означает, что шаг комбинации клавиш уязвим для управляемого грубого принуждения (decrypt все еще является узким местом). Если ключи независимы, то нет необходимости выяснять какой-либо частичный ключ, и знание одного частичного ключа не помогает выяснить комбинированный ключ, поэтому атака методом грубой силы может также нацеливаться на комбинированный ключ и игнорировать части. Как упоминается в кафе, вычисление другого частичного ключа является спорным, поскольку для него требуется комбинированный ключ; Кроме того, вы можете стрелять ядерным оружием только один раз. Если один ключ используется только в сочетании с другим (и мы не используем пароли для разных систем, верно?), XOR безопасен.

Существует несколько криптографических систем, которые позволяют ключам k-out-of-n дешифровать сообщение при одновременном использовании, но я не могу вспомнить термин для них, который был в моей голове, и мою копию Applied Cryptography нет под рукой.

Редактировать: благодаря Cocowalla, название схемы "(m, n) пороговая схема". Для наглядного примера прочитайте « Визуальная криптография и сегментация сложности битовой плоскости » Даниэля Столеру, опубликованная в Dr. Dobbs. Визуальная криптография была создана Наором и Шамиром и представлена ​​на EUROCRYPT '94 (согласно Дугу Стинсону ).

В Википедии перечислены еще несколько примеров совместного использования секрета k-out-of-n : с использованием n точек, где секрет является полиномом k-1 степени; используя k k-гиперплоскости, где секрет - точка пересечения.

0 голосов
/ 05 мая 2010

При этом я не вижу, как вы могли бы выполнить требование, чтобы любые два человека достаточного ранга - вместе - могли читать сообщение ...

Кроме этого: в зависимости от базового алгоритма шифрования наличие половины ключа XOR может позволить получить части полного ключа, что значительно ослабит защиту.

Опять же, IANAC:)

0 голосов
/ 05 мая 2010

XOR'ing ключи, хотя и упрощенный метод, может быть не лучшим. Я не думаю, что полученный ключ был бы достаточно случайным - если кто-то с ключом 1 смог бы достать полученный ключ, он мог бы получить ключ 2.

Чтобы добавить дополнительную сложность в микс, возможно, какой-то одноразовый блокнот будет хорошим планом. Вероятно, не очень хорошая идея повторно использовать ключи для такой системы:)

Вот пример, когда повторное использование клавиш вызывало проблемы:

http://en.wikipedia.org/wiki/Venona_project

UPDATE

Я только что сдул пыль с моей копии превосходной работы Брюса Шнайера Прикладная криптография и взглянул на раздел 3.6 Секретное разделение. Это другой сценарий, но он предполагает, что просто XOR'ing ключи с сообщением безопасны:

Вот протокол, в котором Трент может разделить сообщение между Алисой и Бобом:

(1) Трент генерирует случайную битовую строку R той же длины, что и сообщение, M.

(2) Трент XOR M с R для генерации S.

M ⊕ R = S

(3) Трент дает R к Алисе и S к Бобу.

Обратите внимание, он ничего не говорит о том, может ли это быть подходящим для охраны системы запуска ракеты;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...