Блочный шифр: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Maqivi (обсуждение | вклад) Нет описания правки |
|||
Строка 1:
'''
[[Файл:Block cipher.png|thumb|400px|right|Общая схема работы блочного шифра]]▼
▲'''Блочный шифр''' — разновидность [[Симметричные криптосистемы|симметричного]] [[шифр]]а{{sfn|Брюс Шнайер|Типы алгоритмов и криптографические режимы}}, оперирующего группами бит фиксированной длины — блоками, характерный размер которых меняется в пределах 64‒256 бит. Если исходный текст (или его остаток) меньше размера блока, перед [[шифрование]]м его дополняют. Фактически, блочный шифр представляет собой подстановку на алфавите блоков, которая, как следствие, может быть моно- или полиалфавитной.{{sfn|Баричев, Гончаров, Серов|2011}} Блочный шифр является важной компонентой многих [[криптографический протокол|криптографических протоколов]] и широко используется для защиты данных, передаваемых по сети.
В отличие от [[Невзламываемый шифр|шифроблокнота]], где длина ключа равна длине сообщения, блочный шифр способен [[Шифрование|зашифровать]] одним ключом одно или несколько сообщений суммарной длиной больше, чем длина ключа. Передача малого по сравнению с сообщением ключа по зашифрованному каналу
К достоинствам блочных шифров относят сходство процедур [[Шифрование|шифрования и расшифрования]], которые, как правило, отличаются лишь порядком действий. Это упрощает создание устройств шифрования, так как позволяет использовать одни и те же блоки в цепях шифрования и расшифрования. Гибкость блочных шифров позволяет использовать их для построения других криптографических примитивов: [[Генератор псевдослучайных чисел|генератора псевдослучайной последовательности]], [[Поточный шифр|поточного шифра]], [[Имитовставка|имитовставки]] и [[Односторонняя функция#Криптографические хэш-функции|криптографических хэшей]].<ref>Block Ciphers
▲[[Файл:Block cipher.png|thumb|400px|right|Общая схема работы блочного шифра]]
== История ==
Современная модель блочных шифров основана на идее итеративных блочных шифров, предложенной в публикации 1949 года [[Шеннон, Клод|Клода Шеннона]] «[[Теория связи в секретных системах]]». Данная концепция позволяет достичь
До 1970-х гг. криптография была уделом военных и разведчиков, в открытой печати практически не существовало каких-либо публикаций{{sfn|Шнайер|2002}}. Первопроходцем явился шифр [[Lucifer (криптография)|«Люцифер»]], разработанный в 1970 году компанией IBM и основанный на [[SP-сеть|SP-сети]]. Идея шифра заключалась в использовании комбинаций простых, а следовательно, быстро вычисляемых как аппаратно, так и программно операций. Однако, схема получилась неудачной: она была слишком громоздкой, что привело к низкой скорости шифрования в программной реализации (около 8 кбайт/с) и в аппаратной (97 кбайт/с).
Стали появляться опасения, связанные со стойкостью данного алгоритма. Тем не менее, принципы, выработанные при построении «Люцифера», (SP-сеть и [[сеть Фейстеля]], названная так в честь одного из разработчиков) легли в основу конструирования блочных шифров.
В 1973 году [[Национальный институт стандартов и технологий]] ({{lang-en|NIST}}) объявил конкурс с целью разработать стандарт шифрования данных, победителем которого в 1974 году стал шифр [[DES]] (Data Encryption Standard), являющийся, фактически, улучшенной версией «Люцифер». Публикация шифра в 1977 году была основополагающей в общественном понимании современной модели блочного шифра. В то же время, она дала начало развитию [[Криптоанализ|криптоаналитических атак]].
После одобрения Американским национальным институтом стандартов в 1981 году, алгоритм долгое время использовался в гражданском секторе и даже вышел за пределы США. Однако шифр имел существенный недостаток
В 1997 году стал годом начала программы по принятию [[AES (конкурс)|AES]] (Advanced Encryption Standard). Конкурс состоял из трех этапов, окончательным победителем которого стал алгоритм [[Advanced Encryption Standard|RIJNDAEL]], разработанный бельгийцами J. Daemen и V. Rijmen. AES, как и его предшественники, также построен с использованием SP-сети.
Строка 27 ⟶ 20 :
== Определение ==
Блочный шифр состоит из двух парных алгоритмов: [[Шифрование|шифрования]] и [[Расшифрование|расшифрования]].<ref>{{cite book|authors=Cusick, Thomas W. & Stanica, Pantelimon|title=Cryptographic Boolean functions and applications|publisher=Academic Press|year=2009|isbn=9780123748904|pages=158–159|url=http://books.google.com/books?id=OAkhkLSxxxMC&pg=PA158}}</ref> Оба алгоритма можно представить в виде функций. Функция шифрования E ({{lang-en|encryption}}
: <math>E_K(M) := E(K,M) : \{0,1\}^k \times \{0,1\}^n \to \{0,1\}^n.</math>
Для любого ключа ''K'', ''E<sub>K</sub>''
: <math>D_K(C) := D(K,C) : \{0,1\}^k \times \{0,1\}^n \to \{0,1\}^n,</math>
являясь, при этом, обратной к функции шифрования:
: <math>D = E^{-1},</math>
: <math>\forall K: D_K(E_K(M)) = M</math> и
::: <math>E_K(D_K(C)) = C.</math>
Заметим, что ключ, необходимый для шифрования и дешифрования, один и тот же
== Построение блочного шифра ==
{{начало цитаты}}
<p style="text-align:right;">[[Шнайер, Брюс|Брюс Шнайер]], криптограф и специалист по [[компьютерная безопасность|компьютерной безопасности]].</p>
{{конец цитаты}}
Первопроходцами в разработке блочных шифров стали сотрудники компании [[IBM]] при работе над шифром «[[Lucifer (криптография)|Lucifer]]». {{sfn|
=== Итеративные блочные шифры ===
Большинство блочных шифров являются итеративными. Это означает, что данный шифр преобразует блоки открытого текста ({{lang-en|plaintext}}) постоянной длины в блоки шифротекста ({{lang-en|ciphertext}}) той же длины посредством циклически повторяющихся обратимых функций, известных как раундовые функциии.
: <math>C_i = R_{K_i}(C_{i-1})</math>,
где C<sub>i</sub>
Размер блока ''n'' — это фиксированный параметр блочного шифра, обычно равный 64 или 128 битам, хотя некоторые шифры допускают несколько различных значений. Длина 64 бита была приемлема до середины 90-х годов, затем использовалась длина 128 бит, что примерно соответствует размеру [[машинное слово|машинного слова]] и позволяет эффективную реализацию на большинстве распространённых вычислительных платформ. Различные схемы шифрования позволяют зашифровывать [[открытый текст]] произвольной длины. Каждая имеет
=== SP-сети ===
Строка 67 ⟶ 60 :
{{main|SP-сеть}}
SP-сеть ({{lang-en|substitution-permutation network, SPN}})
[[S-блоки|S-блок]] ({{lang-en|substitution box or S-box}}) замещает маленький блок входных бит на другой блок выходных бит. Эта замена должна быть взаимно однозначной, чтобы гарантировать обратимость. Назначение S-блока заключается в нелинейном преобразовании, что препятствует проведению линейного криптоанализа. Одним из свойств S-блока является [[лавинный эффект]],
[[P-блок]] ({{lang-en|[[:en:Permutation box|permutation box]] or P-box}})
Для каждого раунда используется свой, получаемый из первоначального, ключ. Подобный ключ называется раундовым. Он может быть получен делением первоначально ключа на равные части, так и каким-либо преобразование всего ключа.
Строка 90 ⟶ 71 :
{{main|Сеть Фейстеля}}
Сеть Фейстеля
: <math>F = F(K_i,R_{i-1})</math>
{| border="0" align="right"
Строка 99 ⟶ 80 :
|}
берет одну половину (на рис. правую), преобразует её с использованием ключа ''K<sub>i</sub>'' и объединяет результат с второй половиной посредством операции [[Сложение по модулю 2|исключающее ИЛИ]] (XOR). Этот ключ задаётся первоначальным ключом ''K'' и различен для каждого раунда. Далее половинки меняются местами (иначе будет преобразовываться только одна половина блока) и подаются на следующий раунд. Преобразование сети Фейстеля является обратимой операцией.
Для функции ''F'' существуют
* её работа должна приводить к [[Лавинный эффект|лавинному эффекту]]
* должна быть нелинейна по отношению к операции XOR
Строка 109 ⟶ 90 :
=== Формирование группы ===
При построении алгоритма учитывают формирование [[Группа (математика)|группы]], в которой элементами являются множество блоков шифротекста при всех ключах, а групповой операцией
== Режимы работы блочного шифра ==
{{main|Режим шифрования}}
Строка 130 ⟶ 108 :
=== Шифрование, зависящее от предыдущих блоков ===
[[Файл:EncryptCBC.png|thumb|500px|right|Шифрование в режиме сцепления блоков шифротекста]]
Чтобы преодолеть эти проблемы, были разработаны иные режимы работы<ref name="NIST-modes">{{cite web|title=Block Cipher Modes|publisher=[[NIST]] Computer Security Resource Center|url=http://csrc.nist.gov/groups/ST/toolkit/BCM/index.html|archiveurl=http://www.webcitation.org/6CIlOSiZI|archivedate=2012-11-20}}</ref>{{sfn|Menezes, van Oorschot, Vanstone|1996|pp=228–233}}, установленные международным стандартом ISO/IEC 10116<ref>[http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38761 ISO/IEC 10116:2006 ''Information technology — Security techniques — Modes of operation for an n-bit block cipher'']</ref> и определеные национальными рекомендациями, такие, как NIST 800-38A<ref name="nist800-38a">{{citation|url=http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf|author=Morris Dworkin|title=Recommendation for Block Cipher Modes of Operation – Methods and Techniques|journal=Special Publication 800-38A|publisher=National Institute of Standards and Technology (NIST)|date=December 2001}}</ref> и [[Федеральное управление по информационной безопасности|BSI]] TR-02102<ref name="BSI-rec">{{citation|title=Kryptographische Verfahren: Empfehlungen und Schlüssellängen|journal=BSI TR-02102|format=Technische Richtlinie|issue=Version 1.0|date=June 20, 2008}}</ref>
Общая идея заключается в использовании случайного числа, часто называемого вектором инициализации ({{lang-en|[[:en:Initialization Vector|initialization vector, IV]]}}). В популярном [[Режим шифрования#Cipher Block Chaining (CBC)|режиме сцепления блоков]] ({{lang-en|Cipher Block Chaining, CBC}}) для безопасности IV должен быть случайным или псевдослучайным. После его определения, он складывается при помощи операции исключающее ИЛИ с первым блоком открытого текста. Следующим шагом шифруется результат и получается первый шифроблок, который используем как IV для второго блока и так далее. В [[Режим шифрования#Cipher Feedback (CFB)|режиме обратной связи по шифротексту]] ({{lang-en|Cipher Feedback, CFB}}) непосредственному шифрованию подвергается IV, после чего складывается по модулю два (XOR, исключающее ИЛИ) с первым блоком. Полученный шифроблок используется как IV для дальнейшего шифрования. У режима нет особых преимуществ по сравнению с остальными. В отличие от предыдущих режимов, [[Режим шифрования#Output Feedback (OFB)|режим обратной связи вывода]] ({{lang-en|Output Feedback, OFB}}) циклически шифрует IV, формируя поток ключей, складывающихся с блоками сообщения. Преимуществом режима является полное совпадение операций шифрования и расшифрования. [[Режим шифрования#Counter Mode (CTR)|Режим счетчика]] ({{lang-en|Counter, CTR}}) похож на OFB, но позволяет вести параллельное вычисление шифра: IV объединяется с номером блока без единицы и результат шифруется. Полученный блок складывается с соответствующим блоком сообщения.
Следует помнить, что вектор инициализации должен быть разным в разных сеансах. В противном случае приходим к проблеме режима ECB. Можно использовать случайное число, но для этого требуется достаточно хороший генератор случайных чисел. Поэтому обычно задают некоторое число
: <math>K_i = E_K(nonce||i-1), i = 1,..,n ,</math> где ''i''
=== Дополнение до целого блока ===
Как уже упоминалось выше, в случае, если длина самого сообщения, либо последнего блока, меньше длины блока, то он нуждается в дополнении ({{lang-en|[[:en:Padding (cryptography)|padding]]}}). Простое дополнение нулевыми битами не решает проблемы, так как получатель не сможет найти конец полезных данных. К тому же, такой вариант приводит к атакам Оракула дополнения ({{lang-en|[[:en:Padding oracle attack|padding oracle attack]]}})<ref name="padding-attack">{{cite journal|author=Serge Vaudenay|title=Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS...|journal=Advances in Cryptology – EUROCRYPT 2002, Proc. International Conference on the Theory and Applications of Cryptographic Techniques|issue=2332|pages=534–545|publisher=Springer Verlag|year=2002}}</ref>.
Поэтому на практике применимо решение, стандартизованное как «Метод дополнения 2» ({{lang-en|[[:en:Padding (cryptography)#Bit padding|padding method 2]]}}) в ISO/IEC 9797-1, добавляющее единичный бит в конец сообщения и заполняющее оставшееся место нулями<ref name="iso-iec 9797-1">{{citation|title=ISO/IEC 9797-1: Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher|publisher=ISO/IEC|year=2011|url=http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50375}}</ref>. В этом случае была доказана стойкость к подобным атакам<ref name="oz-pad">{{cite journal|author1=Kenneth G. Paterson|author2=Gaven J. Watson|title=Immunising CBC Mode Against Padding Oracle Attacks: A Formal Security Treatment|journal=Security and Cryptography for Networks – SCN 2008, Lecture Notes in Computer Science|issue=5229|pages=340–357|publisher=Springer Verlag|year=2008}}</ref>.
== Криптоанализ ==
{{main|Криптоанализ}}
Как и все шифры, алгоритмы которых известны, блочные шифры подвергаются криптографическим атакам. Цель атаки
=== Атака полным перебором ===
{{main|Полный перебор}}
{{lang-en|'''Вrute force attack'''}}. Благодаря такой характеристике блочного шифра, как обратимость функции, его вывод становится отличимым от истинной случайной последовательности вследствие [[Парадокс дней рождения|парадокса дней рождения]]. Эта особенность приводит к снижению безопасности шифра и необходимости брать во внимание размер блока. Таким образом, существует компромисс между большими, снижающими производительность шифра, и ненадежными маленькими блоками<ref>{{cite book|author=Martin, Keith M.|title=Everyday Cryptography: Fundamental Principles and Applications|publisher=Oxford University Press|year=2012|isbn=9780199695591|page=114|url=http://books.google.com/books?id=5DZ_vv-gl4oC&pg=PA114}}</ref>.
Не менее важную роль играет размер ключа. Ранний шифр [[DES]] характеризовался размером ключа в 56 бит, что, как показала практика, явно не достаточно для надежной пересылки данных. Именно атакой полным перебором впервые был вскрыт DES. Более современные алгоритмы, такие как [[Advanced Encryption Standard|AES]] и [[ГОСТ 28147-89]] имеют размер ключа в 128 бит и 256 бит соответственно, что делает бессмысленным подобные атаки<ref>{{cite book|authors=Paar, Cristof et al.|title=Understanding Cryptography: A Textbook for Students and Practitioners|publisher=Springer|year=2010|isbn=9783642041006|page=30|url=http://books.google.com/books?id=f24wFELSzkoC&pg=PA30}}</ref>.
=== Дифференциальный криптоанализ ===
Строка 182 ⟶ 136 :
{{main|Дифференциальный криптоанализ}}
{{lang-en|'''Differential cryptanalysis'''}}. В 1990 году [[Бихам, Эли|Эли Бихам]] (Eli Biham) и [[Шамир, Ади|Ади Шамир]] (Adi Shamir) определили идею дифференциального криптоанализа. С помощью этого метода удалось взломать шифр [[DES]]. Подобной атаке подвержены шифры с постоянным S-блоком и шифрование в [[Режим шифрования#Electronic Codebook (ECB)|режиме кодовой электронной книги]]. Данный метод работает с парами шифротекстов, для которых известно различие соответствующих открытых текстов, и рассматривает эволюцию этих различий. Наряду с линейным является самым распространенным при атаках на блочный шифр{{sfn|Шнайер|2002}}.
=== Линейный криптоанализ ===
{{main|Линейный криптоанализ}}
{{lang-en|'''Linear cryptanalysis'''}}. Линейный криптоанализ
=== Интегральный криптоанализ ===
{{main|Интегральный криптоанализ}}
{{lang-en|'''Intergal cryptanalysis'''}}. Интегральный криптоанализ
=== Другие типы атак ===
Строка 202 ⟶ 152 :
== Практическая оценка ==
На практике блочный шифр оценивают по множеству критериев{{sfn|Menezes, van Oorschot, Vanstone|1996|p=227}}<ref name="AESr2report">{{citation|author=James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr, Morris Dworkin, James Foti, Edward Roback|title=Report on the Development of the Advanced Encryption Standard (AES)|publisher=National Institute of Standards and Technology (NIST)|date=October 2000|url=http://csrc.nist.gov/archive/aes/round2/r2report.pdf}}</ref>:
* Параметры ключа: его длина и длина блока, обеспечивающие верхнюю границу безопасности шифра.
* Оценка уровня безопасности, основанная на достигнутой в блочном шифре конфиденциальности и полученная после того, как шифр выдержит значительное число попыток криптоанализа на протяжении времени; стойкость математической модели и существования практических способов атак.
Строка 214 ⟶ 161 :
== Национальные стандарты шифрования ==
=== Lucifer / DES ===
{{main|Lucifer (криптография)|DES}}
Шифр Lucifer в целом рассматривается в качестве первого блочного шифра. Алгоритм разработан компанией [[IBM]] в 1970-х годах для собственных нужд и основан на работе [[Фейстель, Хорст|Хорста Фейстеля]] ({{lang-en|Horst Feistel}}). Доработанная версия была принята как американский правительственный [[Федеральные стандарты обработки информации|федеральный стандарт обработки информации]]: FIPS PUB 46 Data Encryption Standard (DES)
DES имеет размер блока 64 бит и ключ 56 бит. Впоследствии 64-битные блоки стали общепринятыми при построении шифра. Длина ключа зависела от нескольких факторов, в том числе от правительственных ограничений, и в результате стала очевидным недостатком алгоритма
Существует улучшенная версия алгоритма, называемая [[Triple DES]] или 3DES. Скорость алгоритма снизилась трижды, но система оказалась значительно более устойчива к полному перебору за счет утроенной длины ключа (168 бит и 112 секретных бит). Опционально можно выбрать удвоенный ключ (112 бит и 80 секретных бит). По состоянию на 2011 год трехключевая система сохраняет свою безопасность, однако двуключевая версия с 80-битным уровнем безопасности больше не удовлетворяет современным требованиям<ref name=NIST_SP_800-57>[http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf NIST Special Publication 800-57 ''Recommendation for Key Management — Part 1: General (Revised)'', March, 2007]</ref>.
=== ГОСТ 28147-89 ===
[[Файл:Feistel function GOST.png|thumb|right|<center>Вид функции, используемой в [[Сеть Фейстеля|сети Фейстеля]] алгоритма шифрования [[ГОСТ 28147-89]].</center>]]
{{main|ГОСТ 28147-89}}
ГОСТ 28147-89
<ref>Nicolas T. Courtois. [http://eprint.iacr.org/2011/211 Security Evaluation of GOST 28147-89 In View Of International Standardisation]. Cryptology ePrint Archive: Report 2011/211</ref><ref>[http://www.securitylab.ru/news/405678.php SecurityLab: Взломан блочный шифр ГОСТ 28147-89]</ref>
Из-за наличия большого количества раундов, атаки на основе дифференциального и линейного криптоанализа не состоятельны, так как последние чувствительны к числу раундов. [[Полный перебор]] при такой длине ключа полностью лишен смысла. Для достижения [[Лавинный эффект|лавинного эффекта]] ГОСТу требуется 8 раундов, что может быть слабостью алгоритма, но при 32 раундах это не имеет столь сильного значения. Вопрос о безопасности ГОСТа остается открытым{{sfn|Шнайер|2002}}.
=== AES / Rijndael ===
{{main|Advanced Encryption Standard}}
AES, принятый NIST в 2001 году после 5-летнего общественного конкурса, заменил собой шифр DES как федеральный стандарт соединенных штатов. Шифр разработан двумя бельгийскими криптографами [[Даймен, Йоан|Дайменом Йоаном]] и [[Рэймен, Винсент|Рэйменом Винсентом]]. Размер блока составляет 128 бит и размер ключа 128, 192 и 256 бит, несмотря на то, что размер блока может быть
== Связь с другими криптографическими примитивами ==
Блочный шифр может быть использован для построения других криптографических примитивов:
* [[Поточный шифр]] ({{lang-en|stream cipher}}): блочный шифр в режиме OFB и CTR ведет себя так же, как и поточный.
* [[Криптографическая хеш-функция]]<ref>[http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=44737 ISO/IEC 10118-2:2010 ''Information technology
* [[Криптографически стойкий генератор псевдослучайных чисел]] ({{lang-en|Cryptographically secure pseudorandom number generator, (CSPRNG)}})<ref>[http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf NIST Special Publication 800-90A ''Recommendation for Random Number Generation Using Deterministic Random Bit Generators'']</ref>{{sfn|Menezes
* Псевдослучайные перестановки ({{lang-en|[[:en:Pseudorandom permutation|pseudorandom permutation]]}}) произвольного размера ограниченных множеств
* [[Имитовставка]] ({{lang-en|Message authentication code, MAC}}): [[CBC-MAC]], [[One-key MAC]] и [[PMAC (cryptography)|PMAC]] примеры подобной имитовставки.
* Заверенное шифрование ({{lang-en|[[:en:Authenticated encryption|authenticated encryption]]}})
== См. также ==
Строка 259 ⟶ 202 :
== Примечания ==
{{Примечания|
== Литература ==
Строка 269 ⟶ 212 :
|год = 2002
|isbn = 5-89392-055-4
|ref =
}}
* {{source|Q26887236|ref=Габидулин, Кшевецкий, Колыбельников|ref-year=2011}} <!-- Защита информации -->
Строка 284 ⟶ 227 :
|ref = Алферов
}}
* {{cite book|ref=Menezes, van Oorschot, Vanstone|last= Menezes, van Oorschot, Vanstone|title=Handbook of Applied Cryptography|publisher=CRC Press|year=1996|chapter=Chapter 7: Block Ciphers|isbn=0-8493-8523-7|url= http://www.cacr.math.uwaterloo.ca/hac/}}
{{симметричные криптоалгоритмы}}
|