Вопрос о целесообразности использования блочных шифров
Добрый день.
О криптографии знаю не много.
Последние пару дней читал всевозможные форумы/FAQ-и.
И вот что бросаеться сразу в глаза:
почему используют болчные шифры, в то в ремя когда трудно обеспечить стойкий режим работы таких шифров? И почему именно 128 бит, а не более?Не лучше использовать длину блока скажем 1024 бит?
Да возмоджно связано с тем что такие алгоритмы часто реализуються на микросхемах...
Но все же...
[какой-то глюк с форумом, второй раз пишу, а ничего нет]
Ссылки
[link1] http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-info.cgi?1994/CS/CS0833
[link2] http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-info.cgi?1996/CS/CS0885
[link3] http://csrc.nist.gov/groups/ST/toolkit/kdf.html
[link4] http://tools.ietf.org/html/rfc2898
[link5] http://tools.ietf.org/html/rfc2104
[link6] http://tools.ietf.org/html/draft-songlee-aes-cmac-prf-128-03
[link7] http://www.cs.ucdavis.edu/~rogaway/papers/keywrap.html
[link8] http://www.isi.edu/in-notes/rfc5297.txt
[link9] https://www.pgpru.com/comment29317
[link10] http://lukenotricks.blogspot.com/2008/07/are-aes-256-bit-keys-too-large.html
[link11] https://www.pgpru.com/forum/kriptografija/usilennyjjrijndaelgrandcrunepriznanisovsemzabyt
[link12] http://en.wikipedia.org/wiki/One-way_compression_function#Often_built_from_block_ciphers
[link13] http://eurocrypt2009rump.cr.yp.to/410b0c56029d2fa1d686823e3a059af8.pdf
[link14] http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf
Наоборот, ни одного потокового шифра, равного по доказуемой стойкости блочному, не создано. Нет нормальной теории потоковых шифров, у многих есть "различители", конкурс eCrypt на лучший потоковый шифр длится долго и результаты пока неубедительны.
Размер блока или размер ключа?
Блок 64 бита – даёт утечку открытого текста в некоторых режимах шифрования на примерно 8 гигабайтах, а 128 – на примерно 32000000000 гигабайтах.
размер ключа 64 бит может быть подобран современными компьютерными мощностями, 128 бит требует на подбор при минимальных затратах энергии (1 электронвольт, теоретический физический предел) столько, сколько её потребуется на то, чтобы растопить льды Антарктиды. Дальнейший рост симметричного ключа – только перестраховка от атак на несовершенство шифра, режима шифрования или протокола или изобретения квантовых компьютеров, а даже при росте мощностей обычных – основные проблемы возникают у асимметричных алгоритмов, которые и становятся слабым звеном.
необязательно. В дешёвых микросхемах (старые мобильники, WiFi) как раз используют дешёвые микросхемы для более скоростного потокового шифрования, а нормальный блочный шифр редко где встречается, нормально реализованный в бытовом или массовом железе.
По поводу 1024-битных блоков:
Чем больше длина блока, тем сложнее добиться правильной, с точки зрения криптостойкости, диффузии – распространения изменений вдоль блока.
Размеры S-блоков внутри шифра увеличить нельзя – резкий рост памяти, С другими нелинейными элементами тоже могут быть проблемы в дизайне. придётся увеличивать число раундов и возможно вводить ещё что-то, снижающее скорость и повышающее требование к ресурсам.
И шифр да, должен быть универсальным: какой-то сервер этим же шифром может обрабатывать сотни тысяч соединений и лишний килобайты и миллисекунды могут перемножиться в большие величины. И тот же шифр и на микросхемах должен работать с крошечным ОЗУ и слабыи процессором.
Специально конструируют шифры с большим блоком – для ядра хэш-функций и в попытках создать особо стойкое дисковое шифрование (где размер сектора например 4096 бит и хорошо бы его весь и перешифровывать при записи).
При ключе 128 бит =>2^128 стойкость шифра равна корень(2^128)=2^64.
log(2^64)=19,3.
Теперь 10^9( частота процессора)+ 10^3 (процессоров)+10^2 ( таких компов)+
+ 10^log( 60сек*60мин*24часа*31день)=10^20,4.
Соответственно с большой вероятностью взлом блочного шифра за месяц.
( +тут не учтены оптимизации, слабые места реализации и т.д.).
Вот этого я не понимаю.
Опыт жизни показывает – для конкретной цели нужен конкретный инструмент.
(есть легковушки, есть автобусы, есть грузовики и т.д., и ни у кого не возникает вопроса а зачем столько автомобилей?).
Вот для таких целей использовать современные блочные шифры, но
скажем мне нужно отправить письмо размером 3 Кб, то зачем мне простой шифр? Тут уже нужна надежность..
Домашний ПК: 2ГГцпроцессор,2Гб оперативка и т.д., этого мало для того чтобы отказаться от ЭС- блоков на 4 бита, и перейти на более крупные блоки?
Только при специфических атаках. В том виде, как шифр реализован в программах шифрования его стойкость и остаётся 2128.
Потому что на шифрование нужен единый стандарт. И даже на его анализ уходят годы и усилия множества людей. И даже на стандарты не хватает усилия исследователей. Так, до сих пор не решены проблемы стандартизации режимов дискового шифрования, например. Нет доверяемого стандарта на режим шифрования с аутентификацией.
А с криптопримитивами (блочными шифрами, хэшами и пр.), если кто-то будет изобретать под каждую задачу – качественных работ по полному анализу не ждите.
Зоопарк шифров никто не будет поддерживать. Гораздо больше вероятности, что ошибка дизайна "сверхнадёжного" и "сверхтяжёлого" шифра останется незамеченной.
Я ведь пишу с точки зрения простого потребителя.
Если есть спрос (есть люди которые хотят шифровать надежными шифрами), то будет и товар, независимо от того что кто-то не хочеть это поддерживать.
И судя по моим поискам в гугле, таких(очень сложных) шифров практически нет.
как простой потребитель может оценить, какой шифр надёжный?
Кто из серьёзных криптографов будет тратить своё время не на разработку и анализ стандарта шифрования, а распылять силы на шифры узкого применения? Криптопримитив – это не программа, которая должна просто работать. Для того, чтобы он обрёл репутацию, нужно внимание и изучение всего сообщества.
Плюс, сложный – не значит автоматически более стойкий. Можно специально придумать очень сложный с хитрой трудновыявляемой аналитической лазейкой.
Или случайно допустить трудновыявляемый дефект.
По поводу – "есть спрос – есть товар" – напоминает аналогию с лекарствами и рекламу фарма-индустрии, которая потакает некомпетентному спросу (хочу чтобы просто лечило и желательно от всего) и получает прибыли.
Шифры – это не товар. Это результат деятельности прикладных научных исследований. Они бесплатны (кроме практически никому не нужных исключений).
Есть каскадное шифрование несколькими различными шифрами с помощью независимых ключей.
Спасибо.
При каскадном шифровании какие режимы посоветуете?
Самое простое – такие же как и при обычном. Рассматривать каскад, как единый шифр, который можно использовать в любых режимах.
А вот режимы, в которых отдельные шифры каскада связываются друг с другом по-отдельности, могут как повышать, так и снижать стойкость, поэтому к ним можно относится с подозрением.
Подскажите, пожалуйста, имеет ли смысл последовательно (каскадно, как я понял) шифровать файл с использованием разных алгоритмов шифрования (например одного блочного и одного потокового шифра), но одним и тем же ключом. Повысит ли это стойкость файла к взлому, или понизит?
Почти наверняка повысит.
...Но, тем не менее, устоявшаяся практика состоит в использовании уникальных несвязанных ключей для каждого алгоритма в каскаде. В ином случае, если один из алгоритмов окажется уязвим, теоретически появится возможность восстановить ключ всего шифртекста.
каскадом шифров называется последовательное шифрование разными шифрами с независимыми ключами. Это как-бы в определении заложено. В некоторых работах рекомендуется использовать шифры с одинаковым размером блока, а число шифров в каскаде должно быть нечётным и даже простым.
Для выработки нескольких условно независимых ключей из одного можно использовать KDF (Key Derivation Function) – криптостойкую функцию генерации производных ключей.
Смотрите работы:
Cryptanalysis of Multiple Modes of Operation[link1]
Cryptanalysis of Triple-Modes of Operation[link2]
Там рассмотрены и каскады из разных шифров и режимов, в частности случай:
А во многих случаях тупое смешивание в каскад (там на примере одного шифра – DES, но с разными шифрами и одним ключом скорее всего будет также):
В моём понимании, каскадность это страховка на случай будущей компрометации одного из использованных алгоритмов. (Допустим, перехваченная шифровка всё ещё представляет ценность через n лет, когда использованный алгоритм уже не стоек.) Для усиления обычной стойкости дальше 256-битного ключа мне кажется идти бессмысленно.
Можно ли в качестве Key Derivation Function использовать шифрование?
да, только для этого.
Впервую очередь нужно смотреть, а не придуман ли на такую тривиальную вещь как KDF, стандарт:
рекомендации NIST[link3]
RFC2898[link4] – смотрите отдельные главы про KDF.
Или можете дождаться завершения конкурса SHA-3 и надеяться, что победит хэш со встроенной опцией KDF.
Впоследнюю очередь, что нужно делать – это изобретать протокол для KDF самому, какой бы обманчиво простой эта задача не казалась.
А не подскажите, где взять практическую реализацию Key Derivation Function? Интересует открытый исходный код на C (или C++) без каких-либо ограничений на использование.
RFC2898 предлагает для "производства" ключей применять псевдослучайную функцию по схеме PBKDF2. В качестве примера псевдослучайной функции предлагается брать HMAC-SHA-1.
Но если каскадное шифрование применяется на случай взлома некоторых из используемых шифров, надо учитывать и возможность взлома используемой псевдослучайной функции. Если для получения производных ключей применить каскад из KDF, взлом SHA-1 уже не будет страшен.
А поскольку невзломанный шифр имеет псевдослучайный выход, в качестве участвующих в каскаде KDF дополнительных псевдослучайных функций удобно брать сами шифры, участвующие в каскадном шифровании, ведь предполагается, что не все из них будут взломаны. :)
Уже не раз говорили:
1. Если использовать разные независимые ключи для каждого шифра каскада – надежность больше надежности одного шифра.
2. Если используем один и тот жеключ для всех шифров каскада – надежность равна надежности самого слабого шифра.
3. Если использовать какую нить функцию образования последовательности ключей – получиться что-то среднее между первым и вторым случаем.
И что тут среднего, если для восстановления последовательности ключей потребуется взломать все шифры, участвующие в каскадном KDF? К тому же, один пароль запомнить проще.
А где брать ключи для этих шифров? Если тот же хеш, то что шифровать?
Мне кажется, это уже перебор. Может, достаточно такой схемы:
шифрование первым шифром, используем хеш от ключа;
шифрование вторым шифром, используем хеш от предыдущего хеша;
и т.д.
1. Гость (06/05/2009 22:28) – напиши пример реализации.
2. Сергей:
Твоя схема эквивалентна следующей:
ключ -> шифр1.
ключ -> хеш-функция – шифр2.
ключ -> хеш-функция – хеш-функция – шифр3.
Да, вы правы, это именно такая схема.
На мой взгляд она идеально впишется в каскадное шифрование, если на каждом этапе применить хеш-функции с разными алгоритмами. С одной стороны – разные шифры, с другой – разные хеш-функции.
Тогда это будет выглядеть так:
ключ -> шифр1.
ключ -> хеш-функция1 – шифр2.
ключ -> хеш-функция2 – хеш-функция3 – шифр3.
Алгоритмы как хеш-функций так и шифров по идее должны быть известны.
Тогда для взлома всего каскада нужно взломать последнее звено:
ключ -> хеш-функция2 – хеш-функция3 – шифр3.
Впринципе данная схема надежней схемы с одним ключем для всех шифров каскада, но все таки слабей схемы с различными ключами для шифров каскада.
С другой стороны возникает вопрос:
Чем каскадная схема с одним ключем надежней от одного шифра с одним ключем?
Тем что для последнего шифра каскада открытий текст будет псевдослучайними данными?
Довольно сомнительно.
Хотя...?
Смотрим в rfc2898[link4] схему PBKDF2:
В этой функции качестве параметра PRF используется псевдослучайная функция с двумя аргументами. Я предлагаю для получения ключа использовать PBKDF2 несколько раз, подставляя её выход на место соли, а в дополнение к рекомендованной HMAC[link5]-SHA-1, последовательно использовать в этом качестве все шифры, участвующие в каскаде.
Или использовать надо что-то наподобие AES-CMAC[link6].
Или нечто на основе режима SIV[link7], который тоже фигурирует в каком-то стандарте в качестве KDF.
Обратите внимание на сложность доказательства стойкости в работах по последней ссылке. Может быть всё не так просто, поэтому проблема KDF на блочных шифрах до сих пор не решена?
Конкретно в качестве KDF предлагалось использовать S2V – гдава 5. "Enriching a PRF to take Vectors of Strings as Inputs: The S2V Construction".
Вот что в итоге есть ещё про S2V[link8], но это черновые стандарты, стойкость этой KDF явно до конца не изучена.
А как насчёт каскадного шифрования? Доказательства есть?
Вобщем, если не сильно мудрить, схема следующая, как я понял,
ключ служит для получения с помощью некоторого преобразования(хеш-функции, шифры каскада, и все что душа пожелает) набора ключей: ключ1, ключ2, ключ3, которые потом используються при шифровании каскадом:
ключ1 -> шифр1.
ключ2 -> шифр2.
ключ3 -> шифр3.
Теперь допустим взламываем такой каскад прямым перебором (длина ключа, допустим 128 бит):
Понадобиться 2^128 переборов, а не 2^(3*128) как в случае независимости ключей 1,2,3.
... и настукпит всемирный потоп, поскольку растают льды антарктиды. :)
И помнить придётся в три раза больше бит чем нужно. Меньше нельзя, поскольку у каждого шифра в каскаде должен быть ключ стойкой длины.
Тогда в каскаде KDF применяем рекомендованную хэш-функцию последней. Как такое решение может ослабить стойкость?
Выше правильно заметили – это не от перебора. При переборе эффективная энтропия останется 2128. Это на случай, если один из трёх шифров ненадёжен к какой-либо атаке с известным или подобранным текстом.
Ну примерно как узлы сети Tor :)
Допустим, мы знаем, в каком виде поступает открытый текст на вход первого шифра, но не зная ключа, мы не можем посмотреть его выход в виде шифртекста в чистом виде (чтобы собирать пары открытый-шифртекст и на их основе пытаться вычислить ключ нестойкого шифра). Последний шифр даёт нам посмотреть шифртекст, но мы не знаем, в каком виде на него поступает открытый текст.
Даже если нам удалось восстановить ключ путём криптоанализа одного из нестойких шифров каскада, то восстановить ключ двух других, при условии, что KDF – стойкая, нам не удасться.
Насчёт каскада KDF. Предположим, противник взламывает один из шифров в каскаде (как он это точно определит кстати?). Он узнает один из выходов KDF. Каким типом нестойкости KDF или составляющих её хэш-функций он сможет воспользоваться, чтобы вычислить два других выхода KDF?
Почему в KDF нужно использовать каскад, а не XOR трёх KDF? Это же псевдослучайные функции (PRF), а не псевдослучайные перестановки (PRP), как блочные шифры.
Кстати, есть одна теоретическая работа, где показано, что XOR трёх (при ряде допущений даже двух) PRP даёт хорошее приближение к PRF, что хотели даже использовать в дизайне хэш-функций. Можно было бы взять три разных блочных шифра, и поксорив их выход получать PRF для KDF. Ведь основа любой KDF – это PRF, поэтому и используют хэш-функции.
Только может всё-таки доверить эту работу известным теоретикам, пусть под неё хоть какую-то доказательную базу подведут. Зачем самим-то это всё изобретать и обосновывать стойкость "на пальцах", если методами доказуемой безопасности на уровне ведущих специалистов мы всё-равно не владеем?
Говорили говорили, и к чему пришли?
unknown:
"Это на случай, если один из трёх шифров ненадёжен к какой-либо атаке с известным или подобранным текстом."
А где гарантия что таким не окажеться весь каскад?
Если все в каскаде шифры ненадёжны, то всё пропало...
Может их ненамного будет в каскадной связке вместе сложнее сломать, чем если бы по потдельности, но оценка всё-равно скорее будет неутешительной.
Оценки колеблются от "затраты на взлом каскада по крайней мере не меньше, чем на взлом самого стойкого шифра из каскада", до "если первый шифр нестоек к атакам с известными открытыми текстами, то его взлом открывает путь к взлому последующего шифра" – принцип последовательного взлома.
Хотя, наверное могут быть и более сложные варианты взаимодействия уязвимостей.
Ещё раз повторю вопрос: есль ли теория для каскада шифров? Или без теории этим тоже лучше не заниматься?
И если мы перед применением к паролю рекомендованной KDF произведём его шифрование, как это может ухудшить ситуацию? Хотя бы гипотетически/теоретически?
Произведём его шифрование, заметьте, каскадом стойких шифров, проверенных и рекомендованных известными теоретиками.
Ну надо хотя бы чётко понимать, что блочный шифр – это PRP, хэш-функция – PRF (до конкурса SHA3 все хэш-функции могут быть не совсем полноценными PRF из-за особенностей дизайна). Для KDF нужна PRF.
Ну такова теория KDF. Вариант каскадной KDF как XOR выхода блочных шифров я предложил выше.
Другой вариант мне попался в соседней ветке в моём же сообщении про Keccac и структуру Sponge[link9] – вот если там взять три разных блочных шифра и из них получить каскадную PRF-KDF? Если есть одно из лучших на мой скромный взгляд доказательств близости для структуры Sponge из хэша Keccak к идеальной модели Random Oracle среди всех кандидатов SHA3, то на него можно положиться.
Но самостоятельное конструирование – это всё "игры разума", бездоказательные варианты.
есть разрозненные и малочисленные работы, но полной теории нет.
Доказано что, если зашифровать с независмыми ключами E1( <R> ), E2(R XOR M), где R – истинно случайные данные и увеличить таким образом шифртекст в два раза, то такой каскад будет идеальным (на его взлом понадобиться взлом обязательно двух шифров) – это как бы передача одноразового блокнота и ключа к нему посредством двух разных шифров плюс полная рэндомизация открытого текста. Можно использовать хоть n шифров, только шифртекст будет больше открытого текста в n раз и понадобиться n-1 блоков истинно случайных (от физического источника) чисел.
Нет доказательств, что обычный последовательный каскад или какой-то режим соединения шифров в каскаде аналогичен по стойкости идеальному.
Нужны ли вообще каскады?
вот некоторые утверждают пока не решены проблемы с ассиметрикой (постоянная недостаточность размеров ключей и резкое снижение быстродействия при их увеличении)-- то даже AES-256 не нужен[link10].
Я не предлагаю убрать из KDF PRF, я даже не предлагаю менять рекомендованную KDF, я предлагаю этой рекомендованной KDF подать на вход не сам пароль, а его пермутацию с помощью PRP в виде каскада одобренный лучшими
собаководамикриптографами блочных шифров. КАК ЭТО МОЖЕТ УХУДШИТЬ БЕЗОПАСНОСТЬ ???Значит, по вашей логике, каскадное шифрование тоже "игры разума". Тогда о чём вообще речь?
Да, это отличается от первоначально предложенной мной схемы, но зато более ясно.
Это другой вопрос. Но уж если используется каскад из шифров, странно использовать KDF без каскада.
На фоне того, как все дружно громким хором кричат "AES наше всё", это наводит на нехорошие подозрения. Ну пусть нет доказательств, но хоть рекомендации-то должны бы были быть? Чтобы "на коленке" тут не изобретать...
Да уж, если пытаться усилить AES[link11] можно прожить всю жизнь молодым...
Оптимистический поворот разговора...
...но неконструктивный.
Ну хотя бы вики по хэшам из блочных шифров[link12] почитайте.
Схемы построения хэшей из блочных шифров Davies-Meyer, Matyas-Meyer-Oseas, Miyaguchi-Preneel, Hirose видимо изобретены просто так и доказательства к ним придумывались от нечего делать.
Возмите три разных блочных шифра, чтобы получить каскадный хэш, и из него выведите готовую KDF. Ну нет тут никакого заговора – такая работа может быть просто никому неинтересна. Нет тут ни практического спроса, ни теоретического интереса. Мутная тема просто. А без формального доказательства стойкости никто это рассматривать и продвигать не будет.
Я уже третий вариант каскада из шифров для построения хэша предлагаю. Каскад PRP остаётся PRP, а KDF основана на PRF. Раз на это есть доказательства, то этому и надо следовать. Слишком много примеров, когда в элементарной и очевидной казалось бы конструкции, если её проанализировать по формальным моделям, находят уязвимости.
Какой смысл подавать PRP на вход PRF?
Может из всех компонентов PRP сформировать PRF (воспользовавашись готовым доказательством, что каскад PRP в данной конструкции образует PRF) и уже на основе этой каскадной PRF создавать KDF?
Три варианта получения PRF из PRP:
1) XOR выхода нескольких PRP
2) Новая схема Sponge
3) Старые схемы – Davies-Meyer, Matyas-Meyer-Oseas, Miyaguchi-Preneel, относительно новая – Hirose.
и ещё режим S2V.
Кстати, как отмечено в рассылке Crypto на нынешнем Еврокрипте на Rump Session представили
анонс доказательства нестойкости AES[link13].
Если это так, то это исторический момент. Найден различитель, отсчёт пошёл...
Хотя может как в DES – будет куча непрактичных атак, а стандарт просто объявят со временем устаревшим.
Слишком громко сказано, на мой взгляд. Related key атаки на блочный шифр скорее выявляют нехорошие характеристики, а не снижают стойкость как таковую.
Теперь в онлайновых казино кроме MD5 как доказательство их честности будут предлагать использовать в качестве хэша последовательности выпавших номеров ещё и AES :)
А теперь сравниваем доклад с конференции и читаем исходное описание Rijndael[link14], после чего задумываемся над пунктами 8.7 и десятой главой. Ну да, конечно, вроде бы ничего страшного.
А вопрос так и остался открытым.
Что мешает сделать длину блока 4096 бит?
Только ненадо говорить о том, что недостаточно ресурсов комп-ра.
Современные комп. игры не шуточно грузят комп-р, и почему-то это никого не волнует...
"Зоопарк алгоритмов" появиться?
Ну смотрите:
я хочу отвести 1000 кирпичей на стройку и для этого беру мерс и пихаю в салон кирпичи?-Нет беру грузовик предназначенный для перевозки грузов.
Так почему я должен всюду использовать один АES?
Для каждой задачи должен быть свой инструмент.
А универсальный шифр всех времен и народов, это бред.
Будущее за специализированными шифрами.
Похоже, пора новый пункт в FAQ добавлять...
SATtva, вопрос не так прост, как может показаться на первый взгляд.
Ладно...время покажет.
Вот именно. Как показывают "события последних дней" ©, разработка стойких криптоалгоритмов при постоянном продвижении исследований по их взлому становится чрезвычайно сложной задачей, которая под силу единичным исследовательским группам по всему миру. Примерно столько же групп способно проанализировать подобный алгоритм, чтобы найти его слабости. А теперь представьте, что вместо нескольких общепризнанных алгоритмов, достаточно универсальных (one size fits all), будет несколько десятков, каждый для своей цели. (Хотя для этого давно существуют режимы.) Кто будет всё это разрабатывать и анализировать?
Ну придеться выделить некоторые средства...
А чего вы таким путём хотите добиться?
Если шифр стойкий, то увеличение размера блока более 128 бит бессмысленно.
Стойкий шифр должен быть неотличим от идеальной модели -PRP.
Размер блока b – это количество вариантов отктрытых текстов на одном ключе и количество вариантов соответствующих им шифртекстов, заданных некоторой таблицей перестановки размером 2b. Ну и подберите таблицу размером 2128.
Размер ключа k – это количество таких таблиц для всех ключей 2k.
Если мы можем находить различие шифра от идеальной модели что по размеру ключа, что по размеру блока быстрее, чем простым перебором – то он нестоек.
Его бессмысленно спасать увеличением этих параметров.
Существуют экспериментальные щифры с произвольным размером блока. Задавайте его хоть в мегабайтах. При этом их конструкция такова, что накладные расходы мало зависят от размера блока. Но и криптостойкость тоже от этого никак не увеличивается. Такие шифры проектируют для дискового шифрования, хэшей, специфических протоколов и проч. уже лет пятнадцать.
Но пока не очень успешно. Это т.н. шифры на квазигруппах. У них хронические проблемы с критериями стойкости квазигрупп, способами их генерации и компактного хранения, сложности с распараллеливанием операций, различие от модели идеального шифра по отличию диффузиии в прямом и обратном направлении и т.д.
Для автомобиля легко определить – хорошо он работает или ломается. Это любой
пользовательводитель сможет. Для шифра – тысячи специалистов могут годами смотреть как он работает и не заметить явного дефекта, пока кто-то не посмотрит с неожиданной стороны.Принцип такой – основные криптопримитивы (блочный шифр, хэш-функция, асимметричный алгоритм) – максимум универсальности и минимальное количество вариантов, чтобы они были под присмотром как можно большего количества людей, которые в идеале своим коллективным разумом превзойдут любую ограниченную группу, которая хотела бы провести успешный криптоанализ в тайне от остальных.
А на основе этих криптопримитивов, как из кирпичиков собирать режимы и протоколы на основе принципов доказуемой безопасности. Это тоже сложная работа для специалистов, условно чуть меньшей квалификации.