Какова лучшая ядерная ракета crypto система?

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

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

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

(Примите AES-256-CBC с блоком CMAC, если он имеет значение для Вас.)

21
задан rook 19 July 2012 в 02:18
поделиться

6 ответов

XORing двух случайно сгенерированных ключей вместе для получения окончательного секрета, безусловно, безопасен. В общем виде это известно как 'разделение секрета', и существуют безопасные алгоритмы, которые позволяют создавать схемы "m из n", где вы генерируете n долей, и любых m достаточно, чтобы вывести исходный ключ.

Наиболее известной схемой является Shamir's Secret Sharing, которая включает в себя генерацию случайного полинома степени m-1 с ключом в качестве константы, затем его выборку в n точках, и передачу этих данных отдельным лицам в качестве ключевых долей.

18
ответ дан 29 November 2019 в 21:38
поделиться

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

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

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

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

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

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

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

1
ответ дан 29 November 2019 в 21:38
поделиться

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

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

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

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

UPDATE

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

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

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

(2) Трент XOR'ирует M с R для создания S.

M ⊕ R = S

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

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

-1
ответ дан 29 November 2019 в 21:38
поделиться

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

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

Опять же, IANAC :)

0
ответ дан 29 November 2019 в 21:38
поделиться

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

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

В конце концов, вы хотите избежать того, чтобы один человек просто выбирал случайный зашифрованный текст, делал вид, что он только что пришел, видит ключ другого человека, а затем замечает, что зашифрованный текст, должно быть, был подделкой. Это требование затрудняет дешифрование с помощью варианта 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)

message = Share1 XOR Share2

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

3
ответ дан 29 November 2019 в 21:38
поделиться

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

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

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

5
ответ дан 29 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: