Рейтинг:0

Разве алгоритм асимметричного шифрования (например, RSA) не достаточен для всех основных потребностей, когда скорость не имеет значения?

флаг br

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

Мое предположение/вопрос: Самое интересное начинается, когда я понял, что имея только один асимметричный шифр (блочный или потоковый), назовите его $Х$, достаточно для всех основных криптографических нужд.Другими словами, все остальные базовые криптографические категории (другие типы шифров, хеш-функций и подписей, никакие другие) могут быть сведены к этому алгоритму; вы можете сделать алгоритм хеширования, используя только $Х$и алгоритм подписи, использующий только $Х$. Это будет означать, что сочетание таких алгоритмов, как RSA+ChaCha+Poly1305 или что-то еще, устарело, когда скорость не имеет значения. Я не стремлюсь выше интернет-общения. FHE и подобные не входят в область применения. Тогда разве недостаточно реализовать только $Х$ когда время и скорость не имеют значения? Зачем тогда люди изобретают все эти алгоритмы, кроме скорости?

Мое доказательство:

Превращение потокового шифра в блочный шифр:

Просто обработайте поток фиксированной длины с помощью потокового шифра и назовите его блочным шифром.

Превращение блочного шифра, действующего на множестве произвольного размера, в блочный шифр, действующий на множестве размера степени $2$.

Позволять $А$ быть набором $\{1,\dots,N\}$. Позволять $Х$ быть блочным шифром с двумя функциями $Е$ и $Д$ (функция шифрования и дешифрования), которые отображают элементы из $А$ к $А$. Позволять $2^к$ быть величайшей силой $2$ меньше или равно $N$. Позволять $В$ быть набором $\{1,\dots,2^k\}$. Позволять $х$ быть числом из $А$. Последовательность $х,Е(х),Е(Е(х)),...$ предполагается случайным и равномерно распределенным на множестве $А$ (также длинный цикл, так как это асимметричный шифр), который дает, что число из $В$ происходит в среднем после каждого $\frac{|B|}{|A|}$ элементы. Мы можем взять первое такое вхождение как образ новой функции $E'$ что теперь карты из $В$ к $В$. Определять $D'$ быть обратным $E'$. Пара $(Е',D')$ это новый блочный шифр, который действует на наборе размера $2^к$, другими словами, на блоках $к$ биты. Это так же безопасно, как $Х$ потому что если мы сможем взломать этот шифр, то это означает, что мы можем найти результат применения исходного шифра несколько раз, скажем $м$ раз.Тогда мы можем просто повторно применить шифр $м-1$ больше раз на зашифрованное сообщение, а затем используйте этот взлом, чтобы отменить его $м$ раз. С $м$ ожидается меньше, чем $к$, это осуществимо.

Превращение блочного шифра размера $2^к$ в потоковый шифр.

Предположим $к$ четно (понятие проще объяснить). Технически я только шифрую и расшифровываю сообщение произвольного размера, что не совсем является потоковым шифром. Во-первых, расширьте сообщение, чтобы оно имело длину, кратную $\фрак{к}{2}$. Думайте об этом сообщении как о последовательности блоков размером $\фрак{к}{2}$. Мы можем зашифровать пары этих блоков на месте: первый и второй блоки вместе, затем второй и третий и так далее... до конца. До сих пор это напоминало потоковый шифр. При желании мы можем добавить к сообщению случайное начало, если изначально сообщение было слишком коротким. Мы также можем, при желании, изменить порядок этих блоков и применить ту же последовательность шифрования. Теперь мы можем либо расшифровать все сообщение, либо ничего: если мы потеряем его часть, мы ничего не сможем расшифровать. Точно так же, как должен вести себя первоначальный блочный шифр. Это так же безопасно, как и исходный блочный шифр, потому что, если мы сможем взломать все сообщение, мы сможем повторно запустить шифрование и создать все промежуточные продукты, включая расшифровку последних 2 блоков, зашифрованных шифровальщиком.

Превращение блочного шифра в хеш-функцию.

Я отредактировал эту часть, потому что первая идея была неправильной...
Создайте две пары ключей и выбросьте закрытые ключи, а открытые ключи жестко закодируйте в алгоритме. Как и в предыдущей части, подготовьте блоки. Теперь зашифруйте первый $к$ биты на место сначала одним ключом, потом другим, удалить $л<<к$, $л|к$ «случайные» (псевдослучайные, засеянные некоторым простым хэшем сообщения) биты из этого произведенного $к$ биты и объединить остальные биты. Продолжайте делать это, пока не останется только $к$ оставшиеся биты, то назовите это сильным хэшем.Это так же безопасно, как и шифр, потому что, если мы предположим, что нашли другое сообщение с таким же выводом, то пока мы перешифровываем их оба одновременно, в какой-то момент мы получим то же самое. $к-л$ бит (после удаления случайных $л$ биты). Вот почему это сложно: $к-л$ биты могут быть заполнены до $к$ биты не более $2^l\binom{k}{l}$ способов (которых мы можем ограничить небольшим числом), то большинство из них не будут давать одинаковые $к-л$ битов, что помогает его ограничить, то даже если бы мы могли расшифровать другую комбинацию $к$ биты (что, возможно, возможно, потому что они напоминают оригинал $к$ биты), расшифрованное $к$ биты пришлось бы заново расшифровывать, но теперь они не похожи на оригинал $к$ битов, поэтому нам в основном придется взломать шифр на этом этапе. Мы используем два разных шифра (два разных открытых ключа), потому что хотим устранить любую гибкость.

Превращение блочного шифра в функцию подписи.

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

Прошу прощения за использование разных тегов, я просто не знал, что использовать.

Maarten Bodewes avatar
флаг in
Обычно асимметричные примитивы также имеют накладные расходы, когда дело доходит до шифрования, считается ли это? Кроме того, RSA/OAEP зависит от полного хэша домена. Наконец, RSA требует очень больших размеров ключа для защиты 128-битной защиты и не защищен от квантовых компьютеров.
donaastor avatar
флаг br
@MaartenBodewes Я понятия не имел об этих вещах.Когда я упомянул «асимметричные блочные шифры», я подразумевал пару функций (E,D), у которых область определения и область определения являются одним и тем же набором. Вы можете думать о E и D как об открытом и закрытом ключах. Если это реализовано с использованием каких-то других примитивов, мне все равно. Я просто хотел свести все остальное к X, чтобы я мог научиться использовать, скажем, только RSA, а затем поиграть со своим кодом вместо того, чтобы читать больше о библиотеке. Я не знаю, что такое накладные расходы и полный хэш домена. RSA, нуждающиеся в больших ключах, меня не сильно беспокоит, возможно, некоторые другие алгоритмы этого не делают.
флаг cn
«все потребности» — это определенно слишком высокие цели, поскольку они включают в себя больше, чем просто основные вещи. Например, произвольную схему асимметричного шифрования нельзя использовать для достижения полностью гомоморфного шифрования.
donaastor avatar
флаг br
@tylo хорошо, да, это правда. Я знаю о FHE, я интересовался им, я все еще забыл об этом, я сейчас отредактирую, чтобы уточнить, что я имел в виду.
Maarten Bodewes avatar
флаг in
Проблема в том, что учебник RSA даже не является безопасным. Итак, вы сейчас говорите что-то вроде: эй, у меня есть этот небезопасный алгоритм, почему все не основано на нем.Вы также игнорируете эффективность и более узкоспециализированные варианты использования, которые *не следует* игнорировать. Конечно, полезно пытаться использовать алгоритм как можно чаще, см. Keccak для этого, который охватывает хэширование, получение ключа, генерацию случайных чисел (в некоторой степени), аутентифицированное шифрование и т. д. Также обратите внимание, что генерация подписи и шифрование требуют разные пары ключей обоих участников, так что есть и это.
Maarten Bodewes avatar
флаг in
Честно говоря, ответ на этот вопрос, похоже, требует объяснения почти всей криптографии, что слишком широко для вопроса.
Рейтинг:2
флаг ng

Имейте в виду, что помимо RSA, мы не знаем много «асимметричных блочных шифров» в соответствии с определением вопроса (по сути, перестановки с лазейками), поэтому построение на этом не позволит заменить что-то более быстрое или сопротивление гипотетическим Криптографически значимые квантовые компьютеры.

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

  • Учебное расшифрование и подпись RSA на несколько десятичных порядков медленнее, чем симметричное шифрование, поэтому в конечном итоге вам понадобится гибридная криптография для приемлемой скорости.
  • Генерация ключа RSA снова на несколько десятичных порядков медленнее, чем сама RSA, и создание ключа с прямой защитой (стандартная функция современных SSL/TLS, которая, по мнению многих, стала базовой) с использованием RSA (или построенной поверх какой-либо схемы асимметричного шифрования). ), по-видимому, требует генерации ключа в каждом сеансе.

Наконец, перестановка лазейки RSA далека от идеала. Он имеет неподвижные точки ${0,1,n-1}$, и, в более общем случае, мультипликативное свойство. Думать о нем как об асимметричной замене крупноблочного шифра — это путь к катастрофе, опробованный и проверенный в первые десятилетия существования RSA и считающийся по мере того, как записанный в какой-то момент Дэн Боне. Решений предостаточно, но, по крайней мере, распространенные или с доказательством безопасности предполагают наличие хэша. Таким образом "Вы могли бы создать алгоритм хеширования, используя только" (лазейка RSA), хотя и авантюрная, но медленная.

Рейтинг:1
флаг cm

При одинаковых размерах ключей симметричные протоколы шифрования более безопасны, чем асимметричные протоколы.

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

Разница в безопасности этих алгоритмов такова, что шифрование AES с размером ключа 128 бит примерно так же сложно расшифровать, как и ключ RSA с размером ключа 2048 бит.

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

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

Вы можете противостоять этому, имея ОГРОМНЫЕ размеры ключей. Опять же, это вопрос производительности.

Ответить или комментировать

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