Бекіту сұрақтары:
Шабуыл түрлері қандай?
Криптографиялық протоколдар деген не?
Симметриялық криптожүйелер қандай?
DES (Data Encryption Standard)дегеніміз не?
Хабарды шифрлау және дешифрлауды қалай жүргізуге болады?
Дәріс 6. AES. Ашық кілтті криптожүйе. RSA криптожүйесі. Алгоритм Диффи-Хеллмана. Гибрид криптожүйелер
Мақсаты: AES және ашық кілтті криптожүйе, RSA криптожүйесі, алгоритм Диффи-Хеллмана, гибрид криптожүйелерімен танысу, олардың ұқсастықтарымен ерекшеліктері.
Жоспары:
AES
Ашық кілтті криптожүйе
RSA криптожүйесі
Алгоритм Диффи-Хеллмана
Гибрид криптожүйелер
АҚШ стандарттар және технологиялар ұлттық институты (NIST) 1997 жылы жаңа крипографиялық стандарт таңдап алу үшін сынақ жариялады (www.nist.gov). Дүние жүзіендегі ең әйгілі криптологиялық ұйымдар NIST жұмысына үлес қосты.
Сынаққа 15 ұсыныс келіп түсті. Комитет мамандары екі жыл бойы жұмыс жасап, ең жақсы деген 5 талапкерді таңдап алды.
Конкурс финалына келесі алгоритмдер шықты: MARS, TWOFICH, RC6 (АҚШ), RIJNDAEL (Белгия), SERPENT (Ұлыбритания, Израйль, Норвегия), Конкурс 2000 жылы мынандай нәтижелермен аяқталды:
MARS – 13 дауыс (Д. Коппермит және басқалары)
TWOFICH – 31 дауыс (Б. Шнайер және басқалары)
RC6 – 23 дауыс (Р. Ривест және басқалары)
RIJNDAEL – 86 дауыс
SERPENT – 59 дауыс (Р. Андерсон).
Жеңімпаз болып бельгиялық RIJNDAEL алгоритмі аталды (www.nist.gov/encription/aes қара) Авторлары - JoanDaemenVincentRijmen.
Осы уақыттан бастап алгоритмнен алдындағы патенттік шектеулер алынып тасталған. Алгоритмді сіз тегін шектеусіз қолдануыңызға рұқсат бар.
RIJNDAEL алгоритмнің атауы жайындағы Р. Андерсонның ([І], 93 б. қара) ескертуін келтіріп кетейік: “Егер сіз Голландия, Белгия немесе Оңтүстік Африкадан болсаңыз, онда Rijndael сөзінің аталуы ойыңдағыңыздай болады. Әйтпесе ол «rain-dahl» тәріздес оқылады. Rijmen сөзі «Ridgmen», емес «Raymen» деп оқылады.
15 алгоритмнің толық сипаттамасын жоғарыда жазылған NIST институтының серверында таба аласыз. Біз RIJNDAEL алгоритмінің негізгі қадамдарын ғана қарастырамыз. Программаның коды 9-ші бөлімде келтірілген.
RIJNDAEL итерациялық блоктық шифрға жатады. Кілт мен блоктардың ұзындығы бір-біріне байланыссыз. 128, 192, 256 битке тең болуы мүмкін.
Аралық нәтижелер 4 жолы бар массивте жатады. Төменде оны сәйкесінше нәтижелер массиві мен кілтшілер массиві деп атайтын (Ағылшынша state, орысша состояние деп аударған). Шифрлау блогы Nbүшін бағана, ал кілт үшін Nk бағана қолданылады. Nkкілт ұзындығын 32 бөлгендегі шығатын санға тең. Nb блок ұзындығын 32 бөлгендегі шығатын санға тең.
Раунд саны Nb және N сандарына тәуелді (7-кестеге қараңыз).
7-кесте.
Nr
|
Nb=4
|
Nb=6
|
Nb=8
|
Nk
|
10
|
12
|
14
|
Nk
|
12
|
12
|
14
|
Nk
|
14
|
14
|
14
|
Криптоалгоритмде қолданылатын операцияларGF(28)өрісіне тиісті элементтерде анықталған. GF(28) өрісінің элементтері болып дәрежесі екілік көпмүшелер саналады. 0 1 0 1 0 1 1 1 байтына келесі көпмүше сәйкес.
х6+х4+х2+х+1
Қосу амалы әдеттегідей көпмүшелерді қосу және ұқсас мүшелерін XOR операциясы көмегімен біріктіру арқылы орындалады.
(х6+х4+х2+х+1) + (х7+х+1) = х7+x6+x4+x2
немесе
01010111+10000011=11010100
Екі көпмүше үшін көбейту амалын қарастырайық:
a(x) = a3x3+a2x2+a1x+a0x
b(x) = b3x3+b2x2+b1x+b0x
Нәтиже ретінде коэффиценттері келесідей С(х) көпмүшесін аламыз.
c0=a0b0;
c1=a1b0 a0b1;
c2=a2b0a1b1 a0b2;
c3=a3b0 a2b1a1b2 a0b3;
c4=a3b1a2b2 a1b3;
c5=a3b2 a2b3;
c6=a3b3
Енді нәтижені дәрежесі 4-тен аспайтын көпмүше модулі бойынша алу қажет. Алгоритм құрастырушылар келесі көпмүшені ұсынған:
(х)х4+1;
Бұл мүше үшін келесі теңдік орындалады.
xіmod (x)=xi mod 4
Ақыры нәтижеміз
d(x)=d3x3+d2x2+d1x1+d0x
көпмүшесі болады, мұндағы
d0=a0b0 a3b1 a2b2 a1b3;
d1=a1b0 a0b1 a3b2 a2b3;
d2=a2b0 a1b1 a0b2 a3b3;
d3=a3b0 a2b1 a1b2 a0b3;
Ақырлы өрісте кез келген нөлге тең емес z элементі үшін мультипликативный кері элемент z-1 анықталған және zz-1=1
Өзара кері көпмүшелер мысалы:
(x4+1)(x7+x5+x4+x2)=1
Раунд төрт түрлендіруден тұрады: нәтижелер массивындағы байттарды ауыстыру; жолдарды жылжыту; бағандарды араластыру; раундтық кілтті қосу.
Раунд сипаттамасы:
Round(State, RoundKey)
{
ByteSub(State);
ShiftRow(State);
MixClumn(State);
AddRoundKey(State, RoundKey);
}
Соңғы раундта бағаналарды алмастыру операциясы орындалмайды:
{
ByteSub(State);
ShiftRow(State);
AddRoundKey(State, RoundKey);
}
1-ші қадам. Байт ауыстыру
Әрбір нәтиже массивындағы байттар үшін ауыстыру процедурасы орындалады. Ауыстыру таблицаларын келесі теңдеумен анықтауға болады: S(x)=M(1/x)+b мұндағы M таңдап алған матрица, b – тұрақты вектор.
2-ші қадам. Жол жылжыту
Нәтижелер массивының 1-ші жолы жылжымайды. Келесі жолдар Сі, і2..4 коэффицентіне блок ұзындығына байланысты.
8-кесте
-
Nb
|
C2
|
C3
|
C4
|
4
|
1
|
2
|
3
|
6
|
1
|
2
|
3
|
8
|
1
|
3
|
4
|
3-ші қадам. Бағаналарды алмастыру
Блок бағаналары GF(28)өрісіндегі көпмүшелер ретінде қарастырылады. Көпмүше c(x)=’03’x3+’01’x2+’01’x+02’ көпмүшесіне көбейтіледі, бұл операция келесі матрицаға көбейткенмен тепе-тең:
-
02
|
03
|
01
|
01
|
01
|
02
|
03
|
01
|
01
|
01
|
02
|
03
|
03
|
01
|
01
|
02
|
4-ші қадам. Раундтік кілтті қосу
XOR операциясының көмегімен нәтижелер массивы кілтшелер массивына қосылады.
Кілт жасау алгоритмі. Алдымен кілт кеңейту процедурасы орындалады. Алғашқы Nk сөз шифрлау кілтінен тұрады. Қалғандары индексі кішіректерінен рекурсия арқылы анықталады.
Раундтық кілттер кеңейтілген кілттен келесі ереже бойывнша алынады: бірінші раундтық кілт алғашқы Nb сөзге тең, екіншісі – келесі Nb сөзге т.с.с.
Достарыңызбен бөлісу: |