Файл: Семинар сынылады he жне spo жйесіндегі омо сарапшылы кеесі.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 586
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
b1 (b1 * 2) XOR (b2*3) XOR (b3*1) XOR (b4*1)
Екі байтты көбейту келесі алгоритм бойынша орындалады:
-
егер байттардың біреуі 0 болса, нәтиже 0 болады;
-
егер байттардың бірі 1 болса, нәтиже басқа байт;
-
басқа жағдайларда әрбір байт L кестесіне сәйкес ауыстырылады. Ауыстырылған байттар қосылады, қажет болған жағдайда [0, 255] аралығына кіру үшін 255 алынады және нәтижені беретін Е кестесіне сәйкес ауыстыру жүргізіледі. Псевдо-С тілінде L және E кестелері келесідей:
Л {
-
0x00, 0x19, 0x01, 0x32, 0x02, 0x1A, 0xC6, 0x4B, 0xC7, 0x1B, 0x68, 0x33, 0xEE, 0xDF, 0x03,
0x64, 0x04, 0xE0, 0x0E, 0x34, 0x8D, 0x81, 0xEF, 0x4C, 0x71, 0x08, 0xC8, 0xF8, 0x69, 0x1C, 0xC1,
0x7D, 0xC2, 0x1D, 0xB5, 0xF9, 0xB9, 0x27, 0x6A, 0x4D, 0xE4, 0xA6, 0x72, 0x9A, 0xC9, 0x09, 0x78,
0x65, 0x2F, 0x8A, 0x05, 0x21, 0x0F, 0xE1, 0x24, 0x12, 0xF0, 0x82, 0x45, 0x35, 0x93, 0xDA, 0x8E,
0x96, 0x8F, 0xDB, 0xBD, 0x36, 0xD0, 0xCE, 0x94, 0x13, 0x5C, 0xD2, 0xF1, 0x40, 0x46, 0x83, 0x38,
0x66, 0xDD, 0xFD, 0x30, 0xBF, 0x06, 0x8B, 0x62, 0xB3, 0x25, 0xE2, 0x98, 0x22, 0x88, 0x91, 0x10,
0x7E, 0x6E, 0x48, 0xC3, 0xA3, 0xB6, 0x1E, 0x42, 0x3A, 0x6B, 0x28, 0x54, 0xFA, 0x85, 0x3D, 0xBA,
0x2B, 0x79, 0x0A, 0x15, 0x9B, 0x9F, 0x5E, 0xCA, 0x4E, 0xD4, 0xAC, 0xE5, 0xF3, 0x73, 0xA7, 0x57,
0xAF, 0x58, 0xA8, 0x50, 0xF4, 0xEA, 0xD6, 0x74, 0x4F, 0xAE, 0xE9, 0xD5, 0xE7, 0xE6, 0xAD, 0xE8,
0x2C, 0xD7, 0x75, 0x7A, 0xEB, 0x16, 0x0B, 0xF5, 0x59, 0xCB, 0x5F, 0xB0, 0x9C, 0xA9, 0x51, 0xA0,
Зертхана №451
0x7F, 0x0C, 0xF6, 0x6F, 0x17, 0xC4, 0x49, 0xEC, 0xD8,
0x43, 0x1F, 0x2D, 0xA4, 0x76, 0x7B, 0xB7,
0xCC, 0xBB, 0x3E, 0x5A, 0xFB, 0x60, 0xB1, 0x86, 0x3B, 0x52, 0xA1, 0x6C, 0xAA, 0x55, 0x29, 0x9D,
0x97, 0xB2, 0x87, 0x90, 0x61, 0xBE, 0xDC, 0xFC, 0xBC,
0x95, 0xCF, 0xCD, 0x37, 0x3F, 0x5B, 0xD1,
0x53, 0x39, 0x84, 0x3C, 0x41, 0xA2, 0x6D, 0x47, 0x14, 0x2A, 0x9E, 0x5D, 0x56, 0xF2, 0xD3, 0xAB,
0x44, 0x11, 0x92, 0xD9, 0x23, 0x20, 0x2E, 0x89, 0xB4, 0x7C, 0xB8, 0x26, 0x77, 0x99, 0xE3, 0xA5,
0x67, 0x4A, 0xED, 0xDE, 0xC5, 0x31, 0xFE, 0x18, 0x0D,
0x63, | 0x8C, | 0x80, | 0xC0, | 0xF7, | 0x70, | 0x07 |
}; | | | | | | |
Е {
0x01, 0x03, 0x05, 0x0F, 0x11, 0x33, 0x55, 0xFF, 0x1A, 0x2E, 0x72, 0x96, 0xA1, 0xF8, 0x13, 0x35,
0x5F, 0xE1, 0x38, 0x48, 0xD8, 0x73, 0x95, 0xA4, 0xF7, 0x02, 0x06, 0x0A, 0x1E, 0x22, 0x66, 0xAA,
0xE5, 0x34, | 0x5C, | 0xE4, 0x37, 0x59, 0xEB, 0x26, 0x6A, | |||
0xBE, | 0xD9, 0x70, 0x90, | 0xAB, | 0xE6, 0x31, | ||
0x53, | 0xF5, 0x04, 0x0C, | 0x14, | 0x3C, 0x44, 0xCC, 0x4F, |
0xD1, 0x68, 0xB8, 0xD3, 0x6E, 0xB2, 0xCD,
0x4C, 0xD4, 0x67, 0xA9, 0xE0, 0x3B, 0x4D, 0xD7, 0x62, 0xA6, 0xF1, 0x08, 0x18, 0x28, 0x78, 0x88,
0x83, 0x9E, 0xB9, 0xD0, 0x6B, 0xBD, 0xDC, 0x7F, 0x81,
0x98, 0xB3, 0xCE, 0x49, 0xDB, 0x76, 0x9A,
0xB5, 0xC4, 0x57, 0xF9, 0x10, 0x30, 0x50, 0xF0, 0x0B, 0x1D, 0x27, 0x69, 0xBB, 0xD6, 0x61, 0xA3,
0xFE, 0x19, 0x2B, 0x7D, 0x87, 0x92, 0xAD, 0xEC, 0x2F, 0x71, 0x93, 0xAE, 0xE9, 0x20, 0x60, 0xA0,
0xFB, 0x16, 0x3A, 0x4E, 0xD2, 0x6D, 0xB7, 0xC2, 0x5D, 0xE7, 0x32, 0x56, 0xFA, 0x15, 0x3F, 0x41,
0xC3, 0x5E, 0xE2, 0x3D, 0x47, 0xC9, 0x40, 0xC0, 0x5B, 0xED, 0x2C, 0x74, 0x9C, 0xBF, 0xDA, 0x75,
0x9F, 0xBA, 0xD5, 0x64, 0xAC, 0xEF, 0x2A, 0x7E, 0x82, 0x9D, 0xBC, 0xDF, 0x7A, 0x8E, 0x89, 0x80,
0x9B, 0xB6, 0xC1, 0x58, 0xE8, 0x23, 0x65, 0xAF, 0xEA, 0x25, 0x6F, 0xB1, 0xC8, 0x43, 0xC5, 0x54,
521 БӨЛІМ
0xFC, 0x1F, 0x21, 0x63, 0xA5, 0xF4, 0x07, 0x09, 0x1B, 0x2D, 0x77, 0x99, 0xB0, 0xCB, 0x46, 0xCA,
0x45, 0xCF, 0x4A, 0xDE, 0x79, 0x8B, 0x86, 0x91, 0xA8, 0xE3, 0x3E, 0x42, 0xC6, 0x51, 0xF3, 0x0E,
0x12, 0x36, 0x5A, 0xEE, 0x29, 0x7B, 0x8D, 0x8C, 0x8F, 0x8A, 0x85, 0x94, 0xA7, 0xF2, 0x0D, 0x17,
0x39, 0x4B, 0xDD, | 0x7C, | 0x84, | 0x97, 0xA2, 0xFD, 0x1C, | ||||
0x24, | 0x6C, | 0xB4, | 0xC7, | 0x52, | 0xF6, | 0x01 | |
}; | | | | | | |
Циклдік кілтті қосу.Цикл кілті жай EXOR арқылы күйге қосылады (1.30-сурет). Циклдік кілт кілттер кестесі алгоритмі арқылы шифрлау кілтінен жасалады. Циклдік кілттің ұзындығы Nb блок ұзындығына тең.
а0,0 | а0.1 | а0.2 | а0.3 | а0.4 | а0,5 | | к0,0 | к0.1 | к0.2 | к0.3 | к0.4 | к0,5 | | б0,0 | б0.1 | б0.2 | б0.3 | б0.4 | б0,5 | |
а1.0 | а1.1 | а1.2 | а1.3 | а1.4 | а1.5 | + | к1.0 | к1.1 | к1.2 | к1.3 | к1.4 | к1.5 | = | б1.0 | б1.1 | б1.2 | б1.3 | б1.4 | б1.5 | |
а2.0 | а2.1 | а2.2 | а2.3 | а2.4 | а2.5 | к2.0 | к2.1 | к2.2 | к2.3 | к2.3 | к2.5 | б2.0 | б2.1 | б2.2 | б2.3 | б2.4 | б2.5 | | ||
| | | ||||||||||||||||||
а3.0 | а3.1 | а3.2 | а3.3 | а3.4 | а3.5 | | к3.0 | к3.1 | к3.2 | к3.3 | к3.4 | к3.5 | | б3.0 | б3.1 | б3.2 | б3.3 | б3.4 | б3.5 | |
Күріш. 1.30.Цикл пернесі әрекетін қосу
Шифрлау кезінде кеңейтілген кілттің бөліктері басынан аяғына дейін, шифрды шешу кезінде - соңынан басына дейін таңдалады.
Негізгі кеңейтім(Кілтті кеңейту). Кеңейтілген кілт төрт байт сөзден тұратын сызықтық массив болып табылады және W[Nb*(Nr + 1)] арқылы белгіленеді. Бірінші Nk сөздерінде шифрлау кілті бар. Басқа сөздердің барлығы индексі кішірек сөздерден рекурсивті түрде анықталады. Кілттерді генерациялау алгоритмі Nk мәніне байланысты. Төменде Nk 6 нұсқасы және Nk > 6 нұсқасы берілген:
-
Nk < 6 немесе Nk 6 үшін
KeyExpansion(CipherKey,W)
{
үшін (i 0; i < Nk; i++) W[i] CipherKey[i]; үшін (j Nk; j < Nb*(Nk+1); j + Nk)
{
W[j] W[j-Nk] ^ SubByte( Rotl( W[j-1] ) ) ^ Rcon[j/Nk];
үшін (и 1; i < Nk && i+j < Nb*(Nr+1); мен++)
Зертхана №453
W[i+j] W[i+j-Nk] ^ W[i+j-1];
}
}
Бірінші Nk сөздері шифрлау кілтімен толтырылғанын көруге болады. Әрбір келесі W[i] сөзі алдыңғы W[i – 1] сөзін және Nk сөзі W[i – Nk] орнынан бұрын EXORing арқылы алынады. Орны Nk еселігі болатын сөздер үшін EXOR алдында W[i – 1] түрлендіру қолданылады, содан кейін циклдік тұрақты қосылады. Трансформация сөздегі байттардың циклдік ығысуын қамтиды, Rotl ретінде белгіленеді, одан кейін SubByte – байтты ауыстыру қолданбасы;
-
Nk > 6 үшін
KeyExpansion(CipherKey,W)
{
үшін (i 0; i
{
W[j] W[j-Nk] ^ SubByte(Rotl(W[j-1])) ^ Rcon[j/Nk];
үшін (i 1; i<4; i++) W[i+j] W[i+j-Nk] ^ W[i+j-1];
W[j+4] W[j+4-Nk] ^ SubByte(W[j+3]);
үшін (i 5; i
}
Nk > 6 схемасы үшін айырмашылық Nk-тен әрбір төртінші байт үшін SubByte пайдалану болып табылады.
Цикл тұрақтысы Nk-ге тәуелсіз және келесі түрде анықталады:
Rcon[i] ( RC[i], '00' , '00' , '00' ), мұндағы RC[0] '01'
RC[i]xtime(Rcon[i-1])
Шифрлау.Rijndael шифры келесі түрлендірулерді қамтиды:
-
циклдік кілтті бастапқы қосу;
-
Nr - 1 цикл;
541 БӨЛІМ
-
соңғы цикл.
Pseudo-C тілінде ол келесідей көрінеді:
Rijndael (мемлекет, шифрлық кілт)
{
KeyExpansion(CipherKey, ExpandedKey); // Кілтті кеңейту
AddRoundKey(күй, кеңейтілген кілт); // Циклдік кілтті қосу
( i 1 ; i
-
циклдар
Қорытынды раунд(күй, кеңейтілген кілт+Nb*Nr); // соңғы цикл
}
Егер кілтті кеңейту процедурасы бұрын орындалған болса, процедура келесідей болады:
Rijndael (мемлекет, шифрлық кілт)
{
AddRoundKey(күй, кеңейтілген кілт);
( i 1 ; i
Демо-бағдарламаның сипаттамасы.
Бағдарлама C# тілінде орындалады және екі элементтен тұрады — шифрлау алгоритмін жүзеге асыруды қамтитын Rijndael.dll файлы және RijndaelDemo.exe демонстрациялық қосымшасы. Қолданба .NET Framework v1.1 орнатылған Windows операциялық жүйесін қажет етеді.
-
демонстрациялық бағдарламаның негізгі терезесі кілт ұзындығын, блок ұзындығын, сондай-ақ көрсетілген шифрлау кілтіне сәйкес есептелген кеңейтілген шифрлау кілтін орнатады (1.31, 1.32-сурет).
Барлық циклдік түрлендірулердің (ByteSub, ShiftRow, MixColumn, AddRoundKey) шифрлау кезінде де, шифрды ашу кезінде де әсерін егжей-тегжейлі қарастыруға болады (1.33, 1.34-сурет).
Зертхана №455
Күріш. 1.31.Демонстрациялық бағдарламаның негізгі терезесі
Күріш. 1.32.Кеңейтілген кілттер терезесі
Күріш. 1.33.ByteSub және ShiftRow түрлендіру Windows
Шифрлау кезінде бастапқы файлды және шифрлау нәтижесі орналастырылатын файлды, шифрды шешу кезінде – сәйкесінше шифрланған файлды және шифрды шешу нәтижесін сақтауға арналған файлды таңдау ұсынылады. Процесс шифрлау кілтін және бағдарламаның негізгі терезесінде көрсетілген кілт пен блок ұзындығын пайдаланады.
561 БӨЛІМ
Күріш. 1.34.MixColumn және AddRoundKey түрлендіру Windows
Жаттығу
-
RijndaelDemo бағдарламасы туралы ақпаратты қараңыз. RijndaelDemo.exe модулін іске қосыңыз.
Ескерту.Windows 10 операциялық жүйесінде бағдарламаның дұрыс жұмыс істеуін қамтамасыз ету үшін RijndaelDemo іске қосқан кезде үйлесімділік режимін қосу керек.
-
Rijndael алгоритмі арқылы шифрлау және шифрды шешу жолын зерттеу үшін қарапайым мәтіндік файлдардың мысалын пайдаланыңыз. Барлық циклдік түрлендірулердің (ByteSub, ShiftRow, MixColumn, AddRoundKey) шифрлау және шифрды шешу кезіндегі әсерін егжей-тегжейлі қарастырыңыз. Шифрлауға арналған бастапқы мәтінді алдын ала дайындап, *.txt файлында сақтауға болады.
-
Ақпаратты шифрлау және дешифрлеу процесін көрсететін экран пішіндерін есепте сақтаңыз, алынған нәтижелерді талдаңыз.
-
Зертханалық жұмыстың есебіне оқытушы көрсеткен нұсқа нөміріне сәйкес таңдалған бақылау тапсырмаларының жауаптарын енгізу (1.9-кесте).
| 1.9-кесте | |
| | |
Сан | Бақылау тапсырмалары | |
опция | | |
| | |
1, 5, 7, 26 | Rijndael алгоритмдерінің негізгі мүмкіндіктерін салыстырыңыз | |
| және ГОСТ 28147-89 | |
2, 4, 6 | Rijndael және DES алгоритмдерінің негізгі сипаттамаларын салыстырыңыз | |
11, 13 | Feistel желісінің құрылымын сипаттаңыз | |
12, 14, 16 | Мәліметтерді шифрлаудың жалпылама схемаларын ал | |
| Rijndael алгоритмі және ГОСТ 28147-89. Оларға салыстырмалы талдау жасаңыз | |