Блочный шифр: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 1:
'''БлочныйБло́чный шифр''' — разновидность [[Симметричные криптосистемы|симметричного]] [[шифр]]а{{sfn|Брюс Шнайер|2002|loc=Типы алгоритмов и криптографические режимы}}, оперирующего группами бит фиксированной длины  — блоками, характерный размер которых меняется в пределах 64‒256 бит. Если исходный текст (или его остаток) меньше размера блока, перед [[шифрование]]м его дополняют. Фактически, блочный шифр представляет собой подстановку на алфавите блоков, которая, как следствие, может быть моно- или полиалфавитной.{{sfn|Баричев, Гончаров, Серов|2011}} Блочный шифр является важной компонентой многих [[криптографический протокол|криптографических протоколов]] и широко используется для защиты данных, передаваемых по сети.
[[Файл:Block cipher.png|thumb|400px|right|Общая схема работы блочного шифра]]
'''Блочный шифр''' — разновидность [[Симметричные криптосистемы|симметричного]] [[шифр]]а{{sfn|Брюс Шнайер|Типы алгоритмов и криптографические режимы}}, оперирующего группами бит фиксированной длины — блоками, характерный размер которых меняется в пределах 64‒256 бит. Если исходный текст (или его остаток) меньше размера блока, перед [[шифрование]]м его дополняют. Фактически, блочный шифр представляет собой подстановку на алфавите блоков, которая, как следствие, может быть моно- или полиалфавитной.{{sfn|Баричев, Гончаров, Серов|2011}} Блочный шифр является важной компонентой многих [[криптографический протокол|криптографических протоколов]] и широко используется для защиты данных, передаваемых по сети.
 
В отличие от [[Невзламываемый шифр|шифроблокнота]], где длина ключа равна длине сообщения, блочный шифр способен [[Шифрование|зашифровать]] одним ключом одно или несколько сообщений суммарной длиной больше, чем длина ключа. Передача малого по сравнению с сообщением ключа по зашифрованному каналу  — задача значительно более простая и быстрая, чем передача самого сообщения или ключа такой же длины, что делает возможным его повседневное использование. Однако, при этом шифр перестает быть невзламываемым. От [[Поточный шифр|поточных]] шифров работа блочного отличается обработкой бит группами, а не потоком. При этом блочные шифры надёжней, но медленнее поточных.{{sfn|Габидулин, Кшевецкий, Колыбельников|2011}} Симметричные системы обладают преимуществом над асимметричными в скорости шифрования, что позволяет им оставаться актуальными, несмотря на более слабый механизм передачи ключа (получатель должен знать секретный ключ, который необходимо передать по уже налаженному зашифрованному каналу. В то же время, в асимметричных шифрах открытый ключ, необходимый для шифрования, могут знать все, и нет необходимости в передаче ключа шифрования).
 
К достоинствам блочных шифров относят сходство процедур [[Шифрование|шифрования и расшифрования]], которые, как правило, отличаются лишь порядком действий. Это упрощает создание устройств шифрования, так как позволяет использовать одни и те же блоки в цепях шифрования и расшифрования. Гибкость блочных шифров позволяет использовать их для построения других криптографических примитивов: [[Генератор псевдослучайных чисел|генератора псевдослучайной последовательности]], [[Поточный шифр|поточного шифра]], [[Имитовставка|имитовставки]] и [[Односторонняя функция#Криптографические хэш-функции|криптографических хэшей]].<ref>Block Ciphers - — Introduction and overview - — http://cacr.uwaterloo.ca/hac/about/chap7.pdf</ref>
[[Файл:Block cipher.png|thumb|400px|right|Общая схема работы блочного шифра]]
 
== История ==
Современная модель блочных шифров основана на идее итеративных блочных шифров, предложенной в публикации 1949 года [[Шеннон, Клод|Клода Шеннона]] «[[Теория связи в секретных системах]]». Данная концепция позволяет достичь определенногоопределённого уровня безопасности комбинированием простых в исполнении операций [[Шифр подстановки|подстановки]] ({{lang-en|substitution}}) и перестановки ({{lang-en|[[:en:Transposition cipher|permutation]]}})<ref name="shannon">{{source|Q1053345|ref=Shannon|ref-year=1949}} <!-- Communication Theory of Secrecy Systems // Bell Syst. Tech. J. --></ref>.
<!----->
<ref name="shannon">{{source|Q1053345|ref=Shannon|ref-year=1949}} <!-- Communication Theory of Secrecy Systems // Bell Syst. Tech. J. --></ref>
<!----->
 
До 1970-х гг. криптография была уделом военных и разведчиков, в открытой печати практически не существовало каких-либо публикаций{{sfn|Шнайер|2002}}. Первопроходцем явился шифр [[Lucifer (криптография)|«Люцифер»]], разработанный в 1970 году компанией IBM и основанный на [[SP-сеть|SP-сети]]. Идея шифра заключалась в использовании комбинаций простых, а следовательно, быстро вычисляемых как аппаратно, так и программно операций. Однако, схема получилась неудачной: она была слишком громоздкой, что привело к низкой скорости шифрования в программной реализации (около 8 кбайт/с) и в аппаратной (97 кбайт/с).
<!----->
{{sfn|Брюс Шнайер}}
<!----->
Первопроходцем явился шифр [[Lucifer (криптография)|«Люцифер»]], разработанный в 1970 году компанией IBM и основанный на [[SP-сеть|SP-сети]]. Идея шифра заключалась в использовании комбинаций простых, а следовательно, быстро вычисляемых как аппаратно, так и программно операций. Однако, схема получилась неудачной: она была слишком громоздкой, что привело к низкой скорости шифрования в программной реализации (около 8 кбайт/с) и в аппаратной (97 кбайт/с).
Стали появляться опасения, связанные со стойкостью данного алгоритма. Тем не менее, принципы, выработанные при построении «Люцифера», (SP-сеть и [[сеть Фейстеля]], названная так в честь одного из разработчиков) легли в основу конструирования блочных шифров.
 
В 1973 году [[Национальный институт стандартов и технологий]] ({{lang-en|NIST}}) объявил конкурс с целью разработать стандарт шифрования данных, победителем которого в 1974 году стал шифр [[DES]] (Data Encryption Standard), являющийся, фактически, улучшенной версией «Люцифер». Публикация шифра в 1977 году была основополагающей в общественном понимании современной модели блочного шифра. В то же время, она дала начало развитию [[Криптоанализ|криптоаналитических атак]].
После одобрения Американским национальным институтом стандартов в 1981 году, алгоритм долгое время использовался в гражданском секторе и даже вышел за пределы США. Однако шифр имел существенный недостаток  — маленькую длину ключа, породившую множество связанных с параллельным перебором атак, и приближающаяся возможность её реализации. Отсутствие достойной защиты от атак шифра DES породило множество алгоритмов, являющихся как более сложной версией DES ([[Triple DES|3DES]]), так и совершенно иных схем ([[NewDES]], [[FEAL]], [[IDEA]]).
 
В 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}}  — шифрование) на вход получает блок данных M ({{lang-en|message}}  — сообщение) размером n бит и ключ K ({{lang-en|key}}  — ключ) размером k бит и на выходе отдает блок шифротекста C ({{lang-en|cipher}}  — шифр) размером n бит:
 
: <math>E_K(M) := E(K,M) : \{0,1\}^k \times \{0,1\}^n \to \{0,1\}^n.</math>
 
Для любого ключа ''K'', ''E<sub>K</sub>''  является [[биекция|биективной функцией]] ([[перестановка|перестановкой]]) на множестве ''n''-битных блоков. Функция расшифрования D ({{lang-en|decryption}}  — расшифрование) на вход получает шифр C, ключ K и на выходе отдает M:
 
: <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|Брюс Шнайер|2002|loc=Стандарт ширования DES}} Они спроектировали первые основы, которые стали использоваться при разработке последующих схем. При этом следует учитывать, что новый шифр должен быть не только стойким ко всем известным видам атак, но и достаточно прост в реализации.
 
=== Итеративные блочные шифры ===
Большинство блочных шифров являются итеративными. Это означает, что данный шифр преобразует блоки открытого текста ({{lang-en|plaintext}}) постоянной длины в блоки шифротекста ({{lang-en|ciphertext}}) той же длины посредством циклически повторяющихся обратимых функций, известных как раундовые функциии. <ref>{{cite book|author=Junod, Pascal & Canteaut, Anne|title=Advanced Linear Cryptanalysis of Block and Stream Ciphers|publisher=IOS Press|year=2011|isbn=9781607508441|page=2|url=http://books.google.com/books?id=pMnRhjStTZoC&pg=PA2}}</ref> Это связано с простотой и скоростью исполнения как программных, так и аппаратных реализаций. Обычно раундовые функции используют различные ключи, полученные из первоначального ключа:
 
: <math>C_i = R_{K_i}(C_{i-1})</math>,
 
где C<sub>i</sub>  — значение блока после i-го раунда, C<sub>0</sub> = M  — открытый текст, K<sub>i</sub>  — ключ, используемый в i-м раунде и полученный из первоначального ключа K.
 
Размер блока ''n'' — это фиксированный параметр блочного шифра, обычно равный 64 или 128 битам, хотя некоторые шифры допускают несколько различных значений. Длина 64 бита была приемлема до середины 90-х годов, затем использовалась длина 128 бит, что примерно соответствует размеру [[машинное слово|машинного слова]] и позволяет эффективную реализацию на большинстве распространённых вычислительных платформ. Различные схемы шифрования позволяют зашифровывать [[открытый текст]] произвольной длины. Каждая имеет определенныеопределённые характеристики: вероятность ошибки, простота доступа, уязвимость к атакам. По состоянию на 2006  год 80-битный ключ способен был предотвратить [[Полный перебор|атаку грубой силой]].
 
=== SP-сети ===
Строка 67 ⟶ 60 :
{{main|SP-сеть}}
 
SP-сеть ({{lang-en|substitution-permutation network, SPN}})  — один из важнейших типов итеративных блочных шифров. Шифр на основе SP-сети получает на вход блок и ключ и совершает несколько чередующихся раундов, состоящих из чередующихся стадий подстановки ({{lang-en|substitution stage}}) и стадий перестановки ({{lang-en|permutation stage}})<ref>{{cite book|authors=Keliher, Liam et al.|chapter=Modeling Linear Characteristics of Substitution-Permutation Networks|editors=Hays, Howard & Carlisle, Adam|title=Selected areas in cryptography: 6th annual international workshop, SAC'99, Kingston, Ontario, Canada, August 9-10, 1999 : proceedings|publisher=Springer|year=2000|isbn=9783540671855|page=79|url=http://books.google.com/books?id=qxurbiN0CcYC&pg=PA79}}</ref>. Для достижения безопасности достаточно одного S-блока, но такой блок будет требовать большого объёма памяти. Поэтому используются маленькие S-блоки, смешанные с P-блоками{{sfn|Шнайер|2002}}. Нелинейная стадия подстановки перемешивает биты ключа с битами открытого текста, создавая [[Конфузия и диффузия|конфузию]] Шеннона. Линейная стадия перестановки распределяет избыточность по всей структуре данных, порождая [[Конфузия и диффузия|диффузию]]<ref>{{cite book|authors=Baigneres, Thomas & Finiasz, Matthieu|chapter=Dial 'C' for Cipher|editors=Biham, Eli & Yousseff, Amr|title=Selected areas in cryptography: 13th international workshop, SAC 2006, Montreal, Canada, August 17-18, 2006 : revised selected papers|publisher=Springer|year=2007|isbn=9783540744610|page=77|url=http://books.google.com/books?id=yb99g5G7FS4C&pg=PA77}}</ref><ref>{{cite book|authors=Cusick, Thomas W. & Stanica, Pantelimon|title=Cryptographic Boolean functions and applications|publisher=Academic Press|year=2009|isbn=9780123748904|page=164|url=http://books.google.com/books?id=OAkhkLSxxxMC&pg=PA164}}</ref>.
<!----->
<ref>{{cite book|authors=Keliher, Liam et al.|chapter=Modeling Linear Characteristics of Substitution-Permutation Networks|editors=Hays, Howard & Carlisle, Adam|title=Selected areas in cryptography: 6th annual international workshop, SAC'99, Kingston, Ontario, Canada, August 9-10, 1999 : proceedings|publisher=Springer|year=2000|isbn=9783540671855|page=79|url=http://books.google.com/books?id=qxurbiN0CcYC&pg=PA79}}</ref>
<!----->
Для достижения безопасности достаточно одного S-блока, но такой блок будет требовать большого объёма памяти. Поэтому используются маленькие S-блоки, смешанные с P-блоками.
<!----->
{{sfn|Брюс Шнайер}}
<!----->
Нелинейная стадия подстановки перемешивает биты ключа с битами открытого текста, создавая [[Конфузия и диффузия|конфузию]] Шеннона. Линейная стадия перестановки распределяет избыточность по всей структуре данных, порождая [[Конфузия и диффузия|диффузию]].
<!----->
<ref>{{cite book|authors=Baigneres, Thomas & Finiasz, Matthieu|chapter=Dial 'C' for Cipher|editors=Biham, Eli & Yousseff, Amr|title=Selected areas in cryptography: 13th international workshop, SAC 2006, Montreal, Canada, August 17-18, 2006 : revised selected papers|publisher=Springer|year=2007|isbn=9783540744610|page=77|url=http://books.google.com/books?id=yb99g5G7FS4C&pg=PA77}}</ref><ref>{{cite book|authors=Cusick, Thomas W. & Stanica, Pantelimon|title=Cryptographic Boolean functions and applications|publisher=Academic Press|year=2009|isbn=9780123748904|page=164|url=http://books.google.com/books?id=OAkhkLSxxxMC&pg=PA164}}</ref>
 
[[S-блоки|S-блок]] ({{lang-en|substitution box or S-box}}) замещает маленький блок входных бит на другой блок выходных бит. Эта замена должна быть взаимно однозначной, чтобы гарантировать обратимость. Назначение S-блока заключается в нелинейном преобразовании, что препятствует проведению линейного криптоанализа. Одним из свойств S-блока является [[лавинный эффект]], т.е.то есть изменение одного бита на входе приводит к изменению всех бит на выходе<ref>{{cite book|ref=harv|last1=Katz|first1=Jonathan|last2=Lindell|first2=Yehuda|title=Introduction to modern cryptography|publisher=CRC Press|year=2008|isbn=9781584885511|url=http://books.google.com/books?id=TTtVKHdOcDoC&pg=PA166}}, pages 166—167.</ref>.
<!----->
<ref>{{cite book|ref=harv|last1=Katz|first1=Jonathan|last2=Lindell|first2=Yehuda|title=Introduction to modern cryptography|publisher=CRC Press|year=2008|isbn=9781584885511|url=http://books.google.com/books?id=TTtVKHdOcDoC&pg=PA166}}, pages&nbsp;166-167.</ref>
 
[[P-блок]] ({{lang-en|[[:en:Permutation box|permutation box]] or P-box}})  — перестановка всех бит: блок получает на вход вывод S-блока, меняет местами все биты и подает результат S-блоку следующего раунда. Важным качеством P-блока является возможность распределить вывод одного S-блока между входами как можно больших S-блоков.
 
Для каждого раунда используется свой, получаемый из первоначального, ключ. Подобный ключ называется раундовым. Он может быть получен делением первоначально ключа на равные части, так и каким-либо преобразование всего ключа.
Строка 90 ⟶ 71 :
{{main|Сеть Фейстеля}}
 
Сеть Фейстеля  — это общий метод преобразования произвольной функции ''F'' в перестановку на множестве блоков. {{sfn|Баричев, Гончаров, Серов|2011|страницы=21}} Она состоит из циклически повторяющихся ячеек  — раундов. Внутри каждого раунда блок открытого текста разделяется на две равные части. Раундовая функция
 
: <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 :
 
=== Формирование группы ===
При построении алгоритма учитывают формирование [[Группа (математика)|группы]], в которой элементами являются множество блоков шифротекста при всех ключах, а групповой операцией  — композиция раундов шифрования. Если данный шифр образует практически полную группу, не имеет смысла применять кратное шифрование{{sfn|Шнайер|2002}}.
<!----->
{{sfn|Брюс Шнайер}}
 
== Режимы работы блочного шифра ==
 
{{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>
Чтобы преодолеть эти проблемы, были разработаны иные режимы работы,
 
<!----->
<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. Можно использовать случайное число, но для этого требуется достаточно хороший генератор случайных чисел. Поэтому обычно задают некоторое число  — метку, известную обеим сторонам (например, номер сеанса) и называемое [[nonce]] ({{lang-en|Number Used Once — однократно используемое число}}). Секретность этого числа обычно не требуется. Далее IV  — результат шифрования nonce. В случае режима счетчика, nonce используется для формирования раундового ключа K<sub>i</sub>{{sfn|Габидулин, Кшевецкий, Колыбельников|2011}}:
 
: <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>.
<!----->
<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>.
<!----->
<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>.
<!----->
<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>.
<!----->
<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}}.
<!----->
{{sfn|Брюс Шнайер}}
 
=== Линейный криптоанализ ===
{{main|Линейный криптоанализ}}
 
{{lang-en|'''Linear cryptanalysis'''}}. Линейный криптоанализ  — метод вскрытия шифра, основанный на поиске [[Аффинное преобразование|аффинных]] приближений для работы алгоритма. Разработан японским математиком Мицуру Мацуи ([[:en:Mitsuru Matsui|Mitsuru Matsui]]), первым применивший эту технику для атаки на [[DES]] и [[FEAL]]. Метод основан на применении операции исключающему ИЛИ (XOR) к блокам открытого текста, шифротекста и к их результату, что позволяет получить результат применения XOR для битов ключа. Структура S-блока оказывает сильное влияние на стойкость к линейным атакам. Когда метод был разработан, оказалось, что DES имеет слабость к нему, так как никто не предполагал подобных атак при его разработке{{sfn|Шнайер|2002}}.
<!----->
{{sfn|Брюс Шнайер}}
 
=== Интегральный криптоанализ ===
{{main|Интегральный криптоанализ}}
 
{{lang-en|'''Intergal cryptanalysis'''}}. Интегральный криптоанализ  — вид атак, особенно применимый к блочный шифрам, построенным на SP-сети. В отличие от дифференциального криптоанализа, использующего пару выбранного открытого текста с фиксированным разницей, вычисленной при помощи операции XOR, интегральный криптоанализ использует множества открытых текстов, в которых одни части удерживаются постоянными, в то время как другие варьируются среди всевозможных значений. Подобное множество с необходимостью имеет сумму по модулю 2 (XOR), равной 0, в то время, как соответствующая сумма шифротекста содержит информацию об операциях шифра.
 
=== Другие типы атак ===
Строка 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>:
<!----->
{{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-битные блоки стали общепринятыми при построении шифра. Длина ключа зависела от нескольких факторов, в том числе от правительственных ограничений, и в результате стала очевидным недостатком алгоритма  — её оказалось недостаточно, чтобы противостоять атакам полным перебором. В 1993 году Майкл Винер спроектировал машину стоимостью 1 миллион долларов, способную взломать DES за 3,5 часа [[Полный перебор|грубой силой]], и в 1998 году [[:en:EFF DES cracker|машина]], способная к взлому, была построена. К тому же, для ключей алгоритма существует ряд значений, считающимися слабыми{{sfn|Шнайер|2002}}.
<!----->
{{sfn|Брюс Шнайер}}
 
Существует улучшенная версия алгоритма, называемая [[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>.
<!----->
<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  — российский стандарт шифрования, введенный в 1990 году, также является стандартом СНГ. Шифр основан на 32-раундовой [[Сеть Фейстеля|сети Фейстеля]] c 256-битным ключом. В мае 2011 года криптоаналитиком Николя Куртуа была предпринята попытка атаки, снижающая время взлома в 2<sup>8</sup> (256) раз, но требующая 2<sup>64</sup> пар открытого/шифрованного текста, что не может рассматриваться как успешная атака, так как при наличии такого количества открытого текста нет необходимости в знании шифротекста.
 
<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}}.
 
{{sfn|Брюс Шнайер}}
 
=== AES / Rijndael ===
{{main|Advanced Encryption Standard}}
AES, принятый NIST в 2001 году после 5-летнего общественного конкурса, заменил собой шифр DES как федеральный стандарт соединенных штатов. Шифр разработан двумя бельгийскими криптографами [[Даймен, Йоан|Дайменом Йоаном]] и [[Рэймен, Винсент|Рэйменом Винсентом]]. Размер блока составляет 128 бит и размер ключа 128, 192 и 256 бит, несмотря на то, что размер блока может быть определенопределён любым числом бит, кратным 32, с минимальным значением 128 бит. Максимальный размер блока равен 256 бит, при этом размер ключа не имеет теоретического предела. Поддержка данного шифра введена компанией [[Intel]] в семейство процессоров x86.
 
== Связь с другими криптографическими примитивами ==
Блочный шифр может быть использован для построения других криптографических примитивов:
* [[Поточный шифр]] ({{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  — Security techniques  — Hash-functions  — Part 2: Hash-functions using an n-bit block cipher'']</ref>{{sfn|Menezes|, van Oorschot|, Vanstone|1996|loc=Chapter 9: Hash Functions and Data Integrity}}: шифрование часто является раундом хеширования, в явном или не явном виде. <!--[[One-way compression function#Construction from block ciphers]]-->
* [[Криптографически стойкий генератор псевдослучайных чисел]] ({{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|, van Oorschot|, Vanstone|1996|loc=Chapter 5: Pseudorandom Bits and Sequences}}.
* Псевдослучайные перестановки ({{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]]}})  — шифрование и имитовставка одновременно, то есть одновременная поддержка конфиденциальности и целостности. [[CCM mode|CCM]], [[EAX mode|EAX]], [[Galois/Counter Mode|GCM]] и [[OCB mode|OCB]]  — примеры подобного решения.
 
== См. также ==
Строка 259 ⟶ 202 :
 
== Примечания ==
{{Примечания|333em}}
 
== Литература ==
Строка 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/}}
 
{{симметричные криптоалгоритмы}}