Комбинация более чем одного криптоалгоритма

StackOverflow https://stackoverflow.com/questions/120131

  •  02-07-2019
  •  | 
  •  

Вопрос

Я рассматриваю следующее:У меня есть некоторый поток данных, который я хотел бы защитить как можно безопаснее - имеет ли смысл применять, скажем, AES с некоторым IV, затем Blowfish с каким-то IV и, наконец, снова AES с каким-то IV?

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

Для этого у меня есть компьютерная мощность (такой объем данных не так уж и велик), поэтому вопрос только в том, стоит ли это реализовывать.Например, TripleDES работал очень похоже, используя три IV и схему шифрования/дешифрования/шифрования, так что, вероятно, это не полная ерунда.Другой вопрос, насколько я уменьшаю безопасность, когда использую один и тот же IV для 1-й и 3-й части или даже один и тот же IV для всех трех частей?

Приветствую любые подсказки по этой теме

Это было полезно?

Решение

Я не уверен насчет этой конкретной комбинации, но, как правило, смешивать подобные вещи — плохая идея, если эта конкретная комбинация не была тщательно исследована.Вполне возможно, что математические преобразования на самом деле будут противодействовать друг другу, и конечный результат будет легче взломать.Одного прохода AES или Blowfish должно быть более чем достаточно.

ОБНОВЛЯТЬ:Из моего комментария ниже…

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

ОБНОВЛЕНИЕ 2:Я должен согласиться с Диомидисом, что AES очень сильно вряд ли будет слабым звеном в вашей системе.Практически любой другой аспект вашей системы может быть скомпрометирован с большей вероятностью, чем AES.

ОБНОВЛЕНИЕ 3:В зависимости от того, что вы делаете с потоком, вы можете просто использовать ТЛС (преемник SSL).Я рекомендую Практическая криптография для получения более подробной информации — он довольно хорошо справляется со многими проблемами, которые вам придется решить.Среди прочего, здесь обсуждается потоковые шифры, который может быть или не быть более подходящим, чем AES (поскольку AES является блочный шифр и вы специально упомянули, что вам нужно зашифровать поток данных).

Другие советы

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

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

Хакер всегда атакует самый слабый элемент в цепочке.Так что сделать сильный элемент еще сильнее мало что поможет.Взлом шифрования AES уже невозможен при длине ключа 128 бит.То же самое касается и Blowfish.Выбор еще большей длины ключа усложняет задачу, но на самом деле 128-битный ключ до сих пор никогда не был взломан (и, вероятно, не будет взломан в ближайшие 10 или 20 лет).Так что это шифрование, вероятно, не самый слабый элемент, поэтому зачем его усиливать?Это уже сильно.

Подумайте, что еще может быть самым слабым элементом?IV?На самом деле я бы не стал тратить слишком много времени на выбор отличной капельницы или ее сокрытие.Самый слабый ключ обычно является ключом шифрования.Например.Если вы шифруете данные, хранящиеся на диске, но эти данные должны быть прочитаны вашим приложением, вашему приложению необходимо знать IV и ключ шифрования, следовательно, оба они должны быть в пределах двоичный файл.На самом деле это самый слабый элемент.Даже если вы возьмете 20 методов шифрования и свяжете их со своими данными, IV и ключи шифрования всех 20 должны быть в двоичном виде, и если хакер сможет их извлечь, тот факт, что вы использовали 20 вместо 1 метода шифрования, не дает никаких дополнительных безопасность.

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

От кого вы пытаетесь защитить свои данные?Ваш брат, ваш конкурент, ваше правительство или инопланетяне?

Каждый из них имеет разные уровни, на которых вы можете считать данные «максимально безопасными» в рамках значимого бюджета (времени/денег).

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

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

Например.Я начинаю с открытого текста А и зашифровать ключом К1 это чтобы получить Б.Затем я шифрую Б с ключом К2 получить С.

Интуитивно кажется разумным предположить, что вполне может существовать ключ, К3, который я мог бы использовать для шифрования А и получить С напрямую.Если это так, то злоумышленник, использующий грубую силу, в конечном итоге наткнется на К3 и уметь расшифровать С, в результате чего дополнительный этап шифрования не добавил никакой безопасности.

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

Почему?
Рассматривайте ключи как функции, обеспечивающие преобразование открытого текста в зашифрованный текст.
Если все наши ключи КЛ бит, то таких отображений 2^KL.
Однако, если я использую 2 ключа КЛ бит каждый, это дает мне (2^KL)^2 сопоставления.
Не все из них могут быть эквивалентны одноэтапному шифрованию.

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

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

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

...Не стесняйтесь исправлять мои расчеты!

Кроме того, не тратьте время на запутывание алгоритма — примените принцип Кирхгофа и помните, что AES сам по себе используется (и признано его использование) в большом количестве мест, где данные должны быть «безопасными».

Дэмиен:Вы правы, мне следует написать это более четко.Я говорю о конкуренте, он для коммерческого использования.Итак, у меня есть значимый бюджет, но я не хочу его реализовывать, не будучи уверенным, что знаю, почему я это делаю :)

Хэнк:да, я тоже этого боюсь.Наиболее поддерживающим эту идею источником был упомянут TripleDES.С другой стороны, когда я использую один алгоритм для шифрования некоторых данных, а затем применяю другой, было бы очень странно, если бы «мощность» всего шифрования была меньше, чем при использовании автономного алгоритма.Но это не значит, что оно не может быть равным...Вот поэтому и прошу подсказки, это не моя область знаний...

Диомидис:По сути, это моя точка зрения, но мой коллега пытается убедить меня, что это действительно «повышает» безопасность.Мое предложение состояло бы в том, чтобы использовать более сильный ключ шифрования вместо одного алгоритма за другим, не задумываясь и не зная, что я делаю.

Я бы не стал полагаться на сокрытие алгоритмов, которые вы используете.Такая «безопасность посредством неизвестности» не работает долго.Декомпиляция кода — это один из способов раскрыть используемую вами криптовалюту, но обычно люди не хранят такие секреты долго.Вот почему в первую очередь у нас есть криптография с закрытым/открытым ключом.

@Miro Kropacek - ваш коллега пытается повысить безопасность с помощью Voodoo.Вместо этого попробуйте создать что-то простое, что можно будет проанализировать на наличие недостатков, например, просто используя AES.

Я предполагаю, что это он (она?) предложил повысить безопасность за счет защиты от отладки...

Вы на самом деле не можете делать вещи меньше безопасно, если вы шифруете более одного раза с разными IV и ключами, но выигрыш в безопасности может быть намного меньше, чем вы ожидаете:В примере с 2DES атака «встреча посередине» означает, что взломать его только в два раза сложнее, а не возводить сложность в квадрат.

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

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

TrueCrypt предоставляет ряд комбинированных алгоритмов шифрования, таких как AES-Twofish-Serpent.Конечно, при их использовании снижается производительность.

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

Атака на качественные алгоритмы шифрования работает только с помощью грубой силы и, следовательно, зависит от вычислительной мощности, на которую вы можете потратить.Это означает, что в конечном итоге вы можете увеличить вероятное среднее время, которое кому -то нужно расшифровать.

Если данные имеют настоящий значение, им лучше атаковать не данные, а владельца ключа...

Я согласен с тем, что было сказано выше.Несколько этапов шифрования не принесут вам многого.Если вы используете «безопасный» алгоритм, взломать его практически невозможно.Использование AES в каком-либо стандартном режиме потоковой передачи.Видеть http://csrc.nist.gov/groups/ST/toolkit/index.html для принятых шифров и режимов.Все, что рекомендовано на этом сайте, должно быть достаточно безопасным при правильном использовании.Если вы хотите обеспечить дополнительную безопасность, используйте AES 256, хотя в любом случае 128 должно быть достаточно.Наибольшие риски связаны не с атаками на сам алгоритм, а с атаками на управление ключами или атаками по побочным каналам (которые могут быть или не быть риском в зависимости от приложения и использования).Если ваше приложение уязвимо для атак с использованием управления ключами или атак по побочным каналам, то на самом деле не имеет значения, сколько уровней шифрования вы применяете.Вот на этом я бы сосредоточил ваши усилия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top