130 likes | 295 Views
Други блокови шифри-2. 1. GOST GOST е 64-битов блоков алгоритъм с 256-битов ключ. GOST също има допълнителен ключов материал, който е дискутиран по-късно. Алгоритъмът прави итерации на един прост шифриращ алгоритъм в 32 рунда.
E N D
Други блокови шифри-2 1. GOST GOST е 64-битов блоков алгоритъм с 256-битов ключ. GOST също има допълнителен ключов материал, който е дискутиран по-късно. Алгоритъмът прави итерации на един прост шифриращ алгоритъм в 32 рунда. За да се шифрира, първото прекъсване на текста е на две части – лява L и дясна R. Подключът за рунд i е Ki. Рунд i, на GOST е: Li = Ri - 1 Ri = Li -1 ⊕ f(Ri - 1, Ki) Фиг. 1 е един рунд на GOST. Функцията f е разбираема. Първо лявата половина и i-тия под ключ се събират по модул 232. Резултатът е разделен на осем 4-битови парчета и всяко от тях става вход за различен S-бокс. Има 8 различни S-бокса в GOST; първите 4 бита отиват в първия S-бокс, вторите 4 бита отиват във втория бокс и т.н. Всеки S-бокс е една пермутация на числата от 0 до 15. Например, един S-бокс може да бъде:7, 10, 2, 4, 15, 9, 0, 3, 6, 12, 5, 13, 1, 8, 11. Фиг.1
Други блокови шифри-2Продължение В този случай, ако входът към S-бокса е 0, изходът е 7. Ако входът е 1 – изходът е 10 и т.н., всичките 8 S-бокса са различни; добре е обмислен допълнителен материал за ключа. S-боксовете са били запазени секретни. Изходите на 8-те S-бокса се рекомбинират в една 32-битова дума, тогава цялата дума претърпява едно циклично изместване наляво на 11 бита. Накрая, резултатът се подлага на XOR с лявата половина за да стане нова дясна половина и дясната половина става нова лява половина. Това се прави 32 пъти. Подключовете се генерират просто. 256-битовият ключ се разделя на осем 32-битови блока: k1, k2,..., k8. Всеки рунд употребява различен подключ, съгласно таблица. Дешифрира-нето е същото като шифрирането, като редът на ki е обратен. Има важни разлики между DES и GOST. -DES има сложна процедура за генериране на подключове от ключа. GOST има много проста процедура. -DES има 56-битов ключ; GOST - 256-битов ключ. Ако се добави в секретността, пермутациите S-бокса, GOST има общо около 610 бита секретна информация. -S-боксовете в DES имат 6-битови входове и 4-битови изходи; S-боксовете на GOST имат 4-битови входове и изходи. И двата алгоритъма имат 8 броя S-бокса, но един S-бокс в GOST е ¼ от размера на един S-бокс на DES. -DES има една неестествена пермутация, наречена P-бокс; GOST употребява едно циклично изместване наляво на 11 бита. -DES има 16 рунда; GOST -32 рунда.
Други блокови шифри-2Продължение 2. CAST CAST алгоритъмът има размер на блока 64 бита и 64-битов ключ. Структурата на CAST е позната. Алгоритъмът употребява шест S-бокса с 8-битов вход и 32-битов изход. Конструк-цията на S-боксовете е зависимо приложение и сложно. За да шифрира, първо се разделя блокът на явния текст на лява и дясна половина. Алгоритъмът има 8 рунда. На всеки рунд дясната половина се комбинира със някакъв материал на ключа употребявайки функция f и тогава се подлага на XOR с лявата половина за да даде нова дясна половина. Оригиналната дясна половина (преди рунда) става нова лява половина. След 8 рунда ( не се завъртат дясната и лявата половини след 8-я рунд), двете половини се свързват за да се получи шифрования текст. Функцията f е проста: (1) разделя се 32-битовият вход на четвъртинки по 8 бита: a, b, c, d. (2) разделя се 16-битовия ключ на две 8-битови половинки: e, f. (3) обработва се a през S-бокс 1, b през S-бокс 2, c през S- 3, d през S-бокс 4, e през S-бокс 5, и f през S-бокс 6. (4) XOR на шестте изхода на S-боксовете заедно за да се получи крайния 32-битов изход. Алтернативно, 32-битовият вход може да се подложи на XOR с 32-те бита на ключа, разделя се на четвъртинки по 8 бита, обработва се през S-боксовете и след това се подлагат на XOR заедно. N рунда от тези се появяват секретни, като N + 2 рунда от друга опция. 16-битов подключ за всеки рунд е лесно изчислим от 64-битовия ключ. Ако k1, k2,..., k8 са 8 байта на ключа, тогава подключовете за всеки рунд са: Round 1: k1, k2 Round 2: k3, k4Round 3: k5, k6Round 4: k7, k8 Round 5: k4, k3Round 6: k2, k1Round 7: k8, k7Round 8: k6, k5
Други блокови шифри-2Продължение 3. Blowfish Blowfish е един алгоритъм свързан с приложение на големи микропроцесори. Той не е патентован. Проектирането на Blowfish е за да се отговори на следните критерии: 1. Бърз. Blowfish шифрира данни с 32-битов микропроцесор със скорост 26 часовникови цикъла за байт. 2.Компактен. Blowfish може да бъде стартиран в по-малко от 5K памет. 3.Прост. Blowfish употребява само прости операции;събиране, XOR, и таблици с търсене за 32-битови операнди. Неговото проектиране е лесно за анализиране, което го прави резистентен/устойчив на грешки в приложението. 4.Променлива секретност. Дължината на ключа на Blowfish е променлива и може да бъде дълъг до 448 бита. Blowfish е един блоков шифър за 64-битов блок с ключ с променлива дължина. Алгори-тъмът съдържа две части: разширение на ключа и шифриране на данната. Разширението на ключа превръща ключа до 448-битов в различни матрици на подключа възлизащи на 4168 В. Шифрирането на данната съдържа проста функция повтаряна 16 пъти. Всеки рунд съдържа зависима от ключа пермутация и една ключова и даннова субституция. Всички операции са събиране и XOR на 32-битови думи. Само едни допълнителни операции са 4 индексирани матрици данни за рунд. Blowfish употребява големи числа за подключове Тези ключове могат да бъдат преизчислени преди някаква данна да е шифрирана или дешифрирана. P-матрицата съдържа 18 32-битови подключа: P1, P2,..., P18 Четири 32-битови S-бокса имат 256 входа всеки: S1,0, S1,1,..., S1,255 S2,0, S2,1,..., S2,255 S3,0, S3,1,..., S3,255 S4,0, S4,1,..., S4,255
Други блокови шифри-2Продължение Фиг.2 Blowfish е Feistel верига, съдържаща 16 рунда. Входът е един 64-битов елемент от данни, x. За да шифрира: Разделя се x на две 32-битови половини: xL, xR For i = 1 to 16: xL = xL ⊕ Pi xR = F(xL) ⊕ xR Swap xL and xR Swap xL and xR (Undo the last swap.) xR = xR ⊕ P17 xL = xL ⊕ P18 Recombine xL and xR
Други блокови шифри-2Продължение Фиг.3 Функция F. Функцията F е показана на фиг.3: Разделя се xL на четвъртинки по 8 бита: a, b, c, и d F(xL) = ((S1,a + S2,b mod 232) ⊕ S3,c) + S4,d mod 232 Подключовете са изчислени, употребявайки алгоритъма на Blowfish. Точният метод е: (1) Инициализира се първо Р-матрицата и след това четири S-бокса, за да се фиксира стринга. Този стринг съдържа шестнадесетични числа за p. (2) XOR P1 с първите 32 бита на ключа, XOR P2 с вторите 32-бита на ключа, и т.н. за всички битове на ключа (до P18). Повтаряне на цикъла през битовете на ключа, докато цялата матрица P бъде подложена на XOR с битове на ключа. (3) Шифриране на всички нулеви стрингове с алгоритъма Blowfish, употребявайки ключовете в стъпки 1 и 2. (4) Заместване на P1 и P2 с изхода от стъпка 3. (5) Шифриране на изхода от стъпка 3, употребявайки алгоритъма Blowfish с модифицираните подключове. (6) Заместване на P3 и P4 с изхода от стъпка 5. (7) Продължаване на процеса, замествайки всички елементи на P-матрицата и тогава всичките 4 S-бокса с изхода на непрекъснато променящ се Blowfish алгоритъм.
Други блокови шифри-2Продължение 4. SAFER Алгоритъмът е за блок и ключ с дължина 64 бита. Не е верига на Feistel като DES, но е итерационен: същата функция е приложена за същия брой рундове. Всеки рунд употребява два 64-битови подключа и алгоритъмът само употребява операции над байтовете. 5. 3-Way 3-Way е блоков шифър проектиран от Joan Daemen. Той има дължина на блока и ключа 96 бита и е проектиран за много ефективен хардуер. 3-Way не е верига на Feistel, но е итерационен блоков шифър. 3-Way може да има n рунда; Daemen препоръчва 11. 6. Crab Този алгоритъм е развит от Burt Kaliski и Matt Robshaw на RSA Laboratories. Идеята зад Crab е да се употребява техника за еднопосочна Хаш функция за да се направи един бърз алгоритъм за шифриране. От тук, Crab е много подобен на MD5. Crab има много голям блок:1024 байта. Откакто Crab е представян повече за разпространение в изследванията, в сравнение с един реален алгоритъм, няма представени дефинитивни/окончателни подпрограми за генериране на ключ. Авторите предлагат един метод, който може да обърне един 80-битов ключ в три желани подключа, макар че алгоритъмът може лесно да приеме променлива дължина на ключовете.
Други блокови шифри-2Продължение 7.Теория на проектирането на блокови шифри. Принципите на Shannon за конфузия/смесване и дифузия/разпространение остават основни в проектирането на добър блоков шифър. Скриването на статистическите връзки и прави криптоанализа по-труден: • Конфузията обслужва скриването на всяка връзка между явния текст, шифрования текст и ключа; • Дифузията разпространява влиянието на битовете на индивидуалния явен текст или на ключа толкова колкото е възможно върху шифрования текст. Трикът е многократно смесена конфузия (с много по-малки таблици) и дифузия в един шифър в различни комбинации. Това се нарича шифър продукт - product cipher. Понякога един блоков шифър, който включва слоеве на заместване и пермутация е наричан субституционно-пермутационна верига - substitution-permutation network, или дори SP network. Ако се погледне функцията f на DES: • Разширяващата пермутация и P-бокса изпълняват дифузия; • S-бокса дава конфузия. Разширяващата се пермутация и P-бокса са линейни; S-боксовете – нелинейни. DES също илюстрира малко повече принципи на проектирането на блоков шифър. Най-важна е идеята за итеративните/повтарящи се блокови шифри - iterated block cipher. Това означава да се приеме една проста функция за рунда и да се повтаря многократно. DES с два рунда не е много силен; той има 5 рунда преди всички изходни битове да са свързани с всички входни битове и всички битове на ключа. 16 рундов DES е силен; 32-рундов DES е още по-силен.
Други блокови шифри-2Продължение Feistel вериги (Networks) Повечето блокови алгоритми са вериги на Фейстел - Feistel networks. Тази идея датира от ранните 1970 години. Взема се блок с дължина n и се разделя на две половини с дължина n/2: L и R. Разбира се n трябва да бъде четно. Може да се дефинира един итеративен блоков шифър, където изходът за i-ти рунд да се определи от изхода на предния рунд: Li = Ri - 1 Ri = Li - 1 ⊕ f(Ri - 1,Ki) Kiе подключът употребен в i-ти рунд и f е една произволна функция на рунда. Тази концепция може да се види в DES, Lucifer, FEAL, Khufu, Khafre, LOKI, GOST, CAST, Blowfish, и др. Функцията е гарантирано реверсивна. Защото XOR е употребено да комбинира лявата половина с изхода на функцията на рунда, необходимо е да е вярно, че Li - 1 ⊕ f(Ri - 1,Ki) ⊕ f(Ri - 1,Ki) = Li - 1 Шифърът, който употребява тази конструкция е гарантирано обратим толкова дълго колкото входовете към fвъв всеки рунд могат да бъдат реконструирани. Няма значение каква е f - f не е необходимо да бъде обратима. Може да се проектира f да бъде толкова сложна колкото се желае и няма да трябва да се използват два различни алгоритъма – един за шифрирането и друг за дешифрирането. Структурата на веригата на Feistel има грижа за всичко това автоматично. Прости отношения DES има свойството, че ако EK(P) = C, тогава EK’(P’) = C’, където P’, C’, и K’ са допълнения на битовете на P, C, и K. Тази особеност намалява сложността за атака на грубата сила при коефициент 2. LOKI има свойства на допълнение, които намаляват сложността за тази атака с коефициент 256. Едно просто отношение/релация - simple relation може да бъде определено като: If EK(P) = C then Ef(K) (g(P,K)) = h(C,K), къдетоf, g, и h са прости функции. В DES, f е побитово допълнение на K, g е побитово допълнение на P, и h – същото, само че за C. Това е резултат от подлагането на XОR на ключа в част от текста.
Други блокови шифри-2Продължение Структура на групата (Group Structure) Когато се разглежда един алгоритъм, въпросът е дали една група се проявява. Еле-ментите на групата са блоковете на шифрования текст с всеки възможен ключ и групата на операциите е съставна. Гледайки на една структурна група на алгоритъма е един опит да се определи колко много допълнителни разбърквания се случват в многократното шифриране. Въпросът е дали или не един алгоритъм е действително една група, но колко точно е близък до една група. Ако има само липса на един елемент, това не е група, но двойното шифриране ще бъде – статистически говорейки – загубено време. Работата на DES показва, че той е много далеч от това да бъде група. Слаби ключове В един добър блоков шифър, всички ключове са еднакво силни. Алгоритмите с малък брой на слабите ключове като DES, не са обикновено проблем. Да се избере един от тях е малко вероятно и може лесно да се тества за да се отстранят. Дори тези слаби ключове мо-гат понякога да се употребят, ако блоковият шифър употребява еднопосочна Хаш функция. Сила срещу диференциалния и линейния криптоанализ Проектиране на S-Box Мощността на различни вериги на Feistel – специфична тяхна устойчивост на двата криптоанализа (линееен и диференциален) – е свързана с техните S-боксове. Това идва от изобилието на конструиране на добър S-бокс. Един S-бокс е просто едно заместване (simply a substitution): картиране на m-битови входове в n-битови изходи. Една таблица за търсене за 64-битови входове в 64-битови изходи е 64*64-битов S-бокс. Един S-бокс с m-битов вход и n-битов изход се нарича m*n-bit S-box. S-боксовете са обикновено само нелинейна стъпка в един алгоритъм - те са, което е секретността за един блоков шифър. Най-общо, колкото са по-големи те толкова е по-добре. Размерът m е много важен в сравнение с размера n. Увеличаването на размера n намалява ефективността на диф.анализ, но голямо увеличение на ефективността на линейния криптоанализ. Действително, ако: • n ≤ 2m – m, тогава има определена линейна релация на входните и изходните битове на S-бокса; • n ≤ 2m, тогава има линейна релация само на изходните битове.
Други блокови шифри-2Продължение Много важно е изследването на булевите функции - Boolean functions. За да бъде секретен, булевите функции употребени в S-боксове трябва да отговарят на специфични условия: • не бива да бъдат линейни или сродни/свързани; • да има баланс на нули и единици и да няма корелации между различните комбинации от битове; • изходните битове да притежават независимост, когато кой и да е входен бит е комплимен-тарен. Тези критерии за проектиране са също отнесени към изследването на функциите на склонност - bent functions: функциите, които могат да показват оптимум. Една особеност, която изглежда много важна е ефекта на лавината: как много изходни битове на един S-бокс се променят, когато някакво подмножество на входните битове е про-менено. Лесно е да се наложат условия на булевите функции такива, че те да отговарят на сигурен критерий на лавината, но конструирането им е по-трудна задача. Строг критерий на лавината - strict avalanche criteria (SAC) гарантира, че точно половината от изходните битове се променят, когато един входен бит се променя. Предлагат се различни критерии за конструиране на S-боксове, подобно на критерия за проектиране на S-боксовете на DES. Четири общи приближения могат да се идентифицират: 1. Случаен избор. Ясно е, че малките случайни S-боксове са несекретни, но големите могат да бъдат достатъчно секретни. Случайни S-боксове с 8 и повече входа са силни. 12 бита S-бокс е по-добре. Повече мощ се добавя, ако S-боксовете са случайни и зависими от ключа. IDEA употребява големи и зависими от ключа боксове. 2.Избор и тест. Някои шифри генерират случайни S-боксове и след това ги тестват за необходими особености. 3.Изкуствен. Тези техники употребяват малко математика: S-боксовете са генерирани употребявайки интуитивни техники. 4.Математически направен. Генериране на S-боксове съгласно математически принципи, така че те да имат доказана секретност срещу диф. и линейния криптоанализ и добри дифу-зионни характеристики.
Други блокови шифри-2Продължение 8. Употреба на еднопосочна Хаш функция Най-простият начин да се шифрира е с еднопосочна Хаш функция - Хаш на предния блок на шифрования текст, свързан с ключа, тогава да се приложи XОR на резултата с текущия блок явен текст: Ci = Pi ⊕ H(K,Ci - 1) Pi = Ci ⊕ H(K,Ci - 1) Поставя се дължината на блока равна на изхода на еднопосочната Хаш функция. Така, в резултат има употреба на еднопосочната Хаш функция, като един блоков шифър в CFB режим. Една подобна конструкция може да се употреби и в OFB режим: Ci = Pi ⊕ Si; Si = H(K,Ci - 1) Pi = Ci ⊕ Si; Si = H(K,Ci - 1) Секретността на тази схема зависи от секретността на еднопосочната функция. Karn Този метод е открит от Phil Karn и поместен в публичната област - прави един обра-тим шифриращ алгоритъм на сигурни еднопосочни Хаш функции. Алгоритъмът работи на явния текст и шифрования текст в 32 блока. Ключът може да е с някаква дължина, въпреки че сигурната дължина на ключа ще бъде по-ефективна за определени еднопосочни функции. За еднопосочни функции MD4 и MD5, 96-байта ключове работят най-добре. За да се шифрира, първо се разделя явният текст на две 16-байтови половини: P1 и Pr. Тогава, се разделя ключът на две 48-байтови половини: K1и Kr. P = P1,Pr K = K1,Kr Cr = Pr ⊕ H(P1,K1) C1 = P1 ⊕ H(Cr,Kr) C = C1,Cr
Други блокови шифри-2Продължение Luby-Rackoff Michael Luby и Charles Rackoff показват, че Karn не е секретен. Разглеждат две едноблокови съобщения : AB и AC. Ако криптоанализаторът знае двете - явния текст и шифрования текст на първото съобщение и първата половина на явния текст на второто съобщение, може лесно да изчисли цялото второ съобщение. Атаката на известен явен текст е възможна при тези обстоятелства, но това е важен проблем на секретността. Три рунда шифриращ алгоритъм отстранява проблема. Той употребява 3 различни Хаш функции: H1, H2, и H3. По-нататъшната работа показва, че H1 може да е равно на H2, или че H2 може да е равно на H3, но не и двете. Също, H1, H2 и H3 не могат да се базират на повторения на същите основни функции. Както и да е, приемайки че H(k,x) се държи като псевдослучайна функция, има версия в три рунда: (1) Разделя се ключът на две половини: K1 и Kr. (2) Разделя се явния текст на две половини: L0 and R0. (3) Прикача се K1 за L0 и хаш. XОR на резултатът от хаш с R0 за да даде R1: R1 = R0 ⊕ H(K1,L0) (4) Прикача се Kr за R1 и хаш. XOR на резултатът от хаш с L0 за да даде L1: L1 = L0 ⊕ H(Kr,R1) (5) Прикача се K1 за L1и хаш. XOR на резултатът от хаш с R1 за да дадеR2: R2 = R1 ⊕ H(K1,L1) (6) Прикача се L1 за R1 за да генерира съобщението.