Twofish blokli shifrlash algoritmi va uning kripto tahlili Twofish Yaratuvchi Bryus Shnayer boshchiligidagi bir guruh mutaxassislar Yaratilgan Kalit o'lchami 1998 yil 128/192/256 bit Blok hajmi 128 bit Turlar soni 16 Turi Feistel tarmog'i Twofish - blok o'lchami 128 bit va kalit uzunligi 256 bitgacha bo'lgan simmetrik blokli shifrlash algoritmi. Turlar soni: 16. Bryus Shnayer boshchiligidagi mutaxassislar jamoasi tomonidan ishlab chiqilgan . U AES tanlovining ikkinchi bosqichida beshta finalistdan biri edi . Algoritm Blowfish , SAFER va SQUARE algoritmlari asosida ishlab chiqilgan . Algoritmning o'ziga xos xususiyatlari - oldindan hisoblangan va kalitga bog'liq almashtirish tugunlaridan foydalanish va shifrlash pastki kalitlarini ochish uchun murakkab sxema. N -bitli shifrlash kalitining yarmi haqiqiy shifrlash kaliti sifatida ishlatiladi, qolgan yarmi algoritmni o'zgartirish uchun ishlatiladi (almashtirish tugunlari unga bog'liq). Tarkib 1Umumiy ma'lumot 2Algoritmning tavsifi o 2.1Oqartirish o 2.2Funktsiya g o 2.3Pseudo-Hadamar transformatsiyasi (PHT) o 2.41 bit aylantiring o 2.5Kalit avlodi 3Texnik tafsilotlar o 3.1Funktsiya h 3.1.1q 0 va q 1 almashtirishlar 3.2Kalit avlodi o 3.3Funktsiya g va S - qutilari 4Kriptanaliz 5Eslatmalar 6Havolalar o Umumiy ma'lumot Twofish NISTning AES [1] uchun talablari va tavsiyalarini hisobga olgan holda maxsus ishlab chiqilgan : 128-bitli simmetrik blokli shifr, kalit uzunligi 128, 192 va 256 bit, zaif kalitlar yo'q, samarali dasturiy ta'minot (birinchi navbatda 32-bitli protsessorlarda) va apparat ta'minoti, moslashuvchanlik (qo'shimcha kalit uzunliklaridan foydalanish imkoniyati, oqim shifrlashda foydalanish, xesh funktsiyalari va boshqalar), algoritmning soddaligi - uni samarali tahlil qilish imkoniyati uchun. Biroq, bu algoritm tuzilishining murakkabligi va shunga mos ravishda uni zaif kalitlar yoki yashirin ulanishlar uchun tahlil qilishning murakkabligi, shuningdek, ko'pgina platformalarda Rijndael bilan solishtirganda ancha uzoq bajarilish vaqti uning foydasiga ishlamadi [2] . Twofish algoritmi 128 bitli kirish bloki uchun Blowfish algoritmini o'zgartirishga urinish natijasida paydo bo'ldi . Yangi algoritm apparatda oson amalga oshirilishi (jumladan, kichikroq jadvallardan foydalanish), yanada rivojlangan kalitlarni kengaytirish tizimiga ega bo'lishi ( inglizcha kalit jadvali ) va aniq F funktsiyasiga ega bo'lishi kerak edi. Natijada, algoritm kripto-Hadamar transformatsiyasi ( PHT ) yordamida birbirini o'zgartiradigan to'rtta filialga ega aralash Feistel tarmog'i sifatida amalga oshirildi . Zamonaviy (o'sha vaqt uchun) 32-bitli protsessorlarda (shuningdek, smartkartalar va shunga o'xshash qurilmalarda) samarali tatbiq qilish qobiliyati Twofish ishlab chiquvchilari tomonidan boshqariladigan asosiy tamoyillardan biridir. Masalan, F funktsiyasida PHT ni hisoblash va K kalit qismi bilan qo'shishda an'anaviy xor o'rniga ataylab qo'shish ishlatiladi . Bu Pentium protsessorlari oilasining LEA buyrug'idan foydalanish imkonini beradi, bu sizga Hadamard konvertatsiyasini bir soat siklida hisoblash imkonini beradi. (ammo, bu holda kod ma'lum bir kalit qiymati uchun kompilyatsiya qilinishi kerak). Twofish algoritmi patentlanmagan va har kim tomonidan hech qanday to'lov va royaltisiz foydalanishi mumkin. U ko'plab shifrlash dasturlarida qo'llaniladi, garchi u Blowfish ga qaraganda kamroq tarqalgan . Algoritm tavsifi Twofish kirish 128-bitli ma'lumotlar blokini to'rtta 32-bitli subbloklarga ajratadi, ular kirish oqartirilgandan so'ng 16 tur transformatsiyadan o'tkaziladi. Oxirgi turdan keyin chiqish oqlash amalga oshiriladi. Oqartirish Oqartirish - bu birinchi turdan oldin va oxirgi turdan keyin ulanishlar bilan ma'lumotlarni xoringlash tartibi. Ushbu uslub birinchi marta Khufu / Khare shifrida va mustaqil ravishda Ron Rivest tomonidan DESX shifrlash algoritmida ishlatilgan . Jo Killian (NEC) va Phillip Rogaway (Kaliforniya universiteti) oqartirish aslida DESX-da kalitlarni to'liq qidirish vazifasini qiyinlashtirishini ko'rsatdi .Twofishni ishlab chiquvchilarning ta'kidlashicha , Twofish-da oqartirish ham kalitni taxmin qilish vazifasini sezilarli darajada murakkablashtiradi, chunki kriptoanalitik F birinchi davra funktsiyasining kirishiga qanday ma'lumotlar tushishini topa olmaydi. Biroq, salbiy tomonlari ham paydo bo'ldi. IBM tadqiqot markazi mutaxassislari tomonidan qiziqarli tadqiqot o‘tkazildi. [5] Ular odatiy CMOS smart-kartasi uchun Twofish algoritmini amalga oshirdilar va Differentsial quvvat tahlili (DPA) yordamida hujumni tahlil qildilar. Bu kirish ma'lumotlarining pastki kalitlarini to'g'ridan-to'g'ri xored qilgani uchun hujumga uchragan kirishni oqartirish protsedurasi edi. Natijada, tadqiqotchilar ixtiyoriy bloklarning atigi 100 ta shifrlash amaliyotini tahlil qilib, 128 bitli kalitni to‘liq hisoblash mumkinligini ko‘rsatdi. Funktsiya g g funksiyasi Twofish algoritmining asosi hisoblanadi. Funktsiya kiritish 32bitli X raqami bo'lib, u keyin to'rt baytga bo'linadi x0, x1, x2, x3. Olingan baytlarning har biri o'ziga xos S-box orqali o'tkaziladi. (Algoritmdagi Squtilari sobit emas, balki kalitga bog'liqligini ta'kidlash kerak). S-box chiqishlarida olingan 4 bayt to'rt komponentli vektor sifatida talqin qilinadi. Bu vektor 4x4 o'lchamdagi qat'iy MDS (maksimal masofa ajratiladigan) matritsaga ko'paytiriladi va hisob-kitoblar Galois maydonida amalga oshiriladi. moduli kamaytirilmaydigan polinom MDS matritsasi - bu chekli K maydoni ustidagi matritsa, agar uni chiziqli o'zgartirish matritsasi sifatida olsak. kosmosdan kosmosga keyin fazodan istalgan ikkita vektor (x, f(x)) ko’rinishdagi , komponentlarda kamida m+1 farq bo’ladi. Ya'ni (x, f(x)) ko'rinishdagi vektorlar to'plami maksimal masofadan ajratiladigan kod xususiyatiga ega bo'lgan kodni hosil qiladi. Bunday kod, masalan, Reed-Solomon kodidir . Twofish-da MDS matritsasining maksimal xilma-xillik xususiyati vektor a va vektorning o'zgaruvchan baytlarining umumiy sonini bildiradi. beshdan kam emas. Boshqacha qilib aytganda, a dagi faqat bitta baytga har qanday o'zgarish b dagi barcha to'rt baytga o'zgarishiga olib keladi. Crypto-Hadamar Transform (PHT) Hadamard kripto transformatsiyasi - bu 2n uzunlikdagi bit satrning qaytariladigan o'zgarishi. Satr teng uzunlikdagi n bitli a va b ikkita qismga bo'linadi. Konvertatsiya quyidagicha hisoblanadi: Ushbu operatsiya ko'pincha kodni "tarqatish" uchun ishlatiladi (masalan, SAFER shifrida ).Twofish ushbu transformatsiyadan ikkita gfunktsiya natijalarini aralashtirishda foydalanadi (n = 32). Shishishni 1 bitga aylantiring Har bir turda F funktsiyasi natijalari bilan xorlangan ikkita o'ng tomondagi 32 bitli bloklar qo'shimcha ravishda bir bitga aylantiriladi. Uchinchi blok xor operatsiyasidan oldin, to'rtinchi blok - keyin siljiydi. Ushbu siljishlar Squtilari va MDS matritsalarini ko'paytirish operatsiyalariga xos bo'lgan baytlarni moslashtirishni buzish uchun maxsus qo'shiladi. Biroq, shifr endi to'liq nosimmetrik emas, chunki shifrlash va shifrni ochishda siljishlar qarama-qarshi yo'nalishda amalga oshirilishi kerak. Kalit avlodi Twofish 128, 192 va 256 bitli kalitlar bilan ishlash uchun mo'ljallangan. Asl kalitdan 40 ta 32 bitli pastki kalitlar yaratiladi, ulardan birinchi sakkiztasi faqat kirish va chiqishda oqlash operatsiyalarida, qolgan 32 tasi esa shifrlash davrlarida, har bir turda ikkita pastki kalitdan foydalaniladi. Twofish-ning o'ziga xos xususiyati shundaki, asl kalit shifrlash algoritmining o'zini o'zgartirish uchun ham ishlatiladi, chunki g funktsiyasida ishlatiladigan S-qutilari sobit emas, balki kalitga bog'liq. Dumaloq pastki kalitlarni yaratish uchun M asl kaliti baytlarni qayta tartiblash orqali ikkita bir xil blokga bo'linadi. foydalaning Va . Keyin blokdan va h funktsiyasi 2*i qiymati shifrlangan va blok yordamida qiymat shifrlangan 2*i+1, bu yerda i joriy turning soni (0 - 15). Olingan shifrlangan bloklar Hadamard kriptotransformasi yordamida aralashtiriladi va keyin dumaloq pastki kalitlar sifatida ishlatiladi. Texnik tafsilotlar 128 bitli kalit uchun bitta dumaloq shifrlash sxemasi Keling, yumaloq pastki kalitlarni yaratish algoritmini, shuningdek, g kalitga bog'liq funktsiyani batafsil ko'rib chiqaylik. Twofish-da pastki kalitlarni yaratish va g funktsiyasini yaratish uchun ham bitta asosiy funktsiyadan foydalaniladi: h(X, L 0 , L 1 , ..., L k ). Bu erda X, L 0 , L 1 , ..., L k 32 bitli so'zlar va k = N / 64, bu erda N - bitlardagi asl kalitning uzunligi. Funktsiyaning natijasi bitta 32 bitli so'zdir. Funktsiya h Turli uzunlikdagi kalitlar uchun h funktsiyasi Funktsiya k bosqichda bajariladi. Ya'ni, kalit uzunligi 256 bit uchun 4 bosqich, 192 bitli kalit uchun - 3 bosqich, 128 bit uchun - 2 bosqich bo'ladi. Har bir bosqichda kirish 32-bitli so'z 4 baytga bo'linadi va har bir bayt q 0 yoki q 1 o'zgarmas bit almashinuvidan o'tadi. Natija 4 bayt vektor sifatida ifodalanadi va MDS matritsasi bilan ko'paytiriladi. Hisoblash Galois maydonida GF(2 8 ) moduli kamaytirilmaydigan polinomda bajariladi. MDS matritsasi quyidagicha ko'rinadi: . q0 va q 1 almashtirishlar q 0 va q 1 - 8 bitli kirish baytining o'zgarmas almashtirishlari. Bayt x ikkita 4 bitli a 0 va b 0 ga bo'linadi , ular orqali quyidagi o'zgarishlar amalga oshiriladi: Bu yerga o'ngga 4 bitli tsiklik siljish va t 0 , t 1 , t 2 , t 3 4 bitli raqamlarning jadvallarini almashtirishdir. q 0 uchun jadvallar quyidagicha ko'rinadi: t 0 = [ 8 1 7 D 6 F 3 2 0 B 5 9 ECA 4] t 1 = [ ECB 8 1 2 3 5 F 4 A 6 7 0 9 D] t 2 = [BA 5 E 6 D 9 0 C 8 F 3 2 4 7 1 ] t 3 = [D 7 F 4 1 2 6 E 9 B 3 0 8 5 CA] q 1 uchun jadvallar quyidagicha ko'rinadi: t 0 = [ 2 8 BDF 7 6 E 3 1 9 4 0 AC 5] t 1 = [ 1 E 2 B 4 C 3 7 6 DA 5 F 9 0 8] t 2 = [ 4 C 7 5 1 6 9 A 0 ED 8 2 B 3 F] t 3 = [ B 9 5 1 C 3 DE 6 4 7 F 2 0 8 A] Kalit avlodi M asl kalit va N uning uzunligi bit bo'lsin. Ulanishlar quyidagicha yaratiladi: Asl kalit 8*k baytga bo'lingan , bu erda k = N / 64. Bu 8*k baytlar to‘rt baytli so‘zlarga bo‘linadi va har bir so‘zdagi baytlar teskari tartibda joylashadi. Natijada 2*k 32-bitli so'zlar Olingan 2*k 32 bitli so'zlar ikkita vektorga bo'linadi so'zlarning hajmi. Va k 32 bitli 1-bosqich uchun pastki kalitlar formulalar yordamida hisoblanadi: Funktsiya g va S -boxes g funktsiya h funksiya bo'yicha aniqlanadi :. Vektor S ham M e va M o vektorlari kabi original kalitdan hosil bo'lib, k 32 bitli so'zlardan iborat. Asl kalit baytlari sakkiz baytdan iborat k guruhga bo'lingan . Har bir bunday guruh 8 ta komponentdan iborat vektor sifatida ko'rib chiqiladi va 4x8 baytlik sobit RS matritsasi bilan ko'paytiriladi. Ko'paytirish natijasi to'rt baytdan iborat vektordir. Hisobkitoblar Galois maydonida amalga oshiriladi moduli kamaytirilmaydigan polinom . RS matritsasi shaklga ega Kriptanaliz Twofish-ni qisqartirilgan turlar bilan o'rganish shuni ko'rsatdiki, algoritm katta xavfsizlik chegarasiga ega va AES tanlovining boshqa finalchilari bilan solishtirganda, u eng mustahkam bo'lgan. Biroq, uning g'ayrioddiy tuzilishi va nisbiy murakkabligi ushbu quvvatning sifatiga shubha tug'dirdi. Shikoyatlarga dumaloq pastki kalitlarni yaratishda asl kalitning ikkiga bo'linishi sabab bo'lgan. Kriptograflar Fauzan Mirza va Shon Merfi bunday boʻlinish “boʻl va zabt et” hujumini tashkil qilish, yaʼni muammoni ikkita oʻxshash, ammo soddaroq boʻlganlarga ajratish imkonini beradi, deb taklif qilishdi. Biroq, aslida bunday hujumni amalga oshirish mumkin emas edi. 2008 yil holatiga ko'ra, Twofish kriptoanalizining eng yaxshi varianti 2000 yilda Yaponiyada Shixo Moriai va Yiqun Lisa Yin tomonidan nashr etilgan kesilgan differentsial kriptoanaliz variantidir. Ular kerakli differensiallarni topish uchun tanlangan 251 ta ochiq matn kerakligini ko’rsatdi. Biroq, tadqiqot nazariy edi va hech qanday haqiqiy hujum amalga oshirilmadi. Twofish yaratuvchisi Bryus Shnayer o'z blogida bunday hujumni haqiqatda amalga oshirish mumkin emasligini ta'kidlaydi. Havolalar Twofish veb-sahifasi (inglizcha) . Twofish manba kodlari (inglizcha) . Twofish: 128 bitli blokli shifr 2008 yil 29 avgustda Wayback mashinasida arxivlangan . Shifrlash algoritmlari AES tanlovining finalchilaridir . Twofish ishlatadigan mahsulotlar ro'yxati .