Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Анықтамалар және қосалқы процедуралар



Анықтамалар
Block Тізбектелген бит, ол input, output, State және Round Key тұрады. Сонымен қоса Block-ты тізбектелген байт деп түсінуге болады.
Cipher Key Бөлімдер үшін кілттер жиынын шығару үшін Key Expansion процедурасында қолданатын құпиялы, криптографиялық кілт; төрт және Nk жазбаларынан тұратын тіктөртбұрышты байттар массивы түрінде көрсетіле алады.
Ciphertext Шифрлеу алгоритмінің шығыс мәліметтері
Key Expansion Cipher Key-дегі Round Keys-ті генерациялау үшін қолданатын процедура
Round Key Round Keys Cipher Key-ден Key Expansion процедурасын қолданып шығады. Олар State-ті шифрлеу және кері шифрлеу кезінде қолданылады.
State Шифрлеудің аралық нәтижесі 4 жолдан және Nb жазбалары бар тіктөртбұрышты байттар массивы түрінде берілуі мүмкін.
S-box Сызықтық емес алмастыру кестесі
Nb State-тентұратын бағандар саны(32-битті сөз). AES үшін, Nb = 4
Nk Шифркілттен тұратын 32-битті сөздер саны. AES үшін, Nk = 4,6, немесе 8
Nr Nk және Nb функциясы болып келетін бөлімдер саны.. AES үшін, Nr = 10, 12, 14
Rcon[] Берілген бөлімде жиі болып келетін және 32-лік разрядты битті сөздерден тұратын массив.

S-box

 

Sbox = array{

0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,

0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,

0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,

0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,

0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,

0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,

0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,

0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,

0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,

0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,

0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,

0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,

0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,

0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,

0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,

0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16

};

InvSubBytes процедурасы үшін кері S-box

InvSbox = array{

0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,

0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,

0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,

0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,

0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,

0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,

0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,

0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,

0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,

0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,

0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,

0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,

0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,

0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,

0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,

0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d

};

 

Rcon[]

 

Rcon = array(

array(0x00, 0x00, 0x00, 0x00),

array(0x01, 0x00, 0x00, 0x00),

array(0x02, 0x00, 0x00, 0x00),

array(0x04, 0x00, 0x00, 0x00),

array(0x08, 0x00, 0x00, 0x00),

array(0x10, 0x00, 0x00, 0x00),

array(0x20, 0x00, 0x00, 0x00),

array(0x40, 0x00, 0x00, 0x00),

array(0x80, 0x00, 0x00, 0x00),

array(0x1b, 0x00, 0x00, 0x00),

array(0x36, 0x00, 0x00, 0x00)

);

 

Қосалқы процедуралар
AddRoundKey() Round Key XOR State-пен қосу кезіндегі шифрлеу және кері шифрлеу тарнсформациясы. RoundKey ұзындығы State мөлшеріне тең (яғни, егер Nb = 4, онда RoundKey-дің ұзындығы 128 бит-ке немесе 16 байтқа тең)
InvMixColumns() Кері шифрлеу кезінде MixColumns()-қа қатысты кері болып келетін трансформация
InvShiftRows() Кері шифрлеу кезінде ShiftRows()-қа қатысты кері болып келетін трансформация
InvSubBytes() Кері шифрлеу кезінде SubBytes()-қа қатысты кері болып келетін трансформация
MixColumns() Шифрлеу кезінде State-тің барлық бағанын алады және жаңа бағандар алу үшін олардың берілгендерін араластырады
RotWord() Key Expansion процедурасында қолданылатын функция, ол 4-байтты сөзді алады және үстінен циклдік алмастыру жүргізеді
ShiftRows() State-ті өңдейтін шифрлеу кезіндегі тарнсформация, State-тің соңғы үш жолдарын әртүрлі үлкендікке ауыстырады
SubBytes() Шифрлеу кезінде (S-box) сызықтық емес кестені қолданатын State-өндіретін трансформация
SubWord() Key Expansion процедурасында қолданатын функция, ол кірісте 4-байтты сөзді алады және S-box-ты төрт байттың әрқайсысына қолданып шығыс сөзді шығарады

Шифрлеу

AES, Rijndael алгоритмінде құралған стандарт болып табылады. AES үшін ұзындығы input(кіріс мәліметтерінің блогы) және State(жағдайы) тұрақты және 128 бит-ке тең, ал шифркілттің ұзындығы K 128, 192 немесе 256 бит-ті құрайды. Сонымен қатар, Rijndael алгоритмі кілттің ұзындығы мен блоктың мөлшерін қадамы 32-биттен тұратын 128-ден 256-ға дейін жіберіледі. Таңдалынған ұзындықтары байттағы input, State және Cipher Key үшін input және State-ке Nb = 4 нотациясы қолданылады, Cipher Key үшін сәйкесінше әртүрлі кілттер ұзындығы үшін Nk = 4, 6, 8.

Input шифрлеудің басында State массивына және үшін ереже бойынша көшіріледі. Осыдан кейін State-ке AddRoundKey() процедурасы қолданылады және содан кейін State трансформация (бөлім) процедурасынан 10, 12, немесе 14 рет өтеді (кілттің ұзындығына байланысты). Нәтижесінде, соңғы бөлімнен кейін State output-қа и үшін мына ереже бойынша көшіріледі.

Бөлек трансформациялар SubBytes(), ShiftRows(), MixColumns() және AddRoundKey() —State-ті өндіреді. Массив w[] —key schedule тұрады.

Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

begin

byte state[4,Nb]

state = in

 

AddRoundKey(state, w[0, Nb-1])

for round = 1 step 1 to Nr-1

SubBytes(state)

ShiftRows(state)

MixColumns(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])

end for

 

SubBytes(state)

ShiftRows(state)

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

 

out = state

end

6-сурет. Cipher арналған код

 

SubBytes()

 

 

SubBytes процедурасында, state-тегі әр байт бекітілген 8-биттік іздеу кестесімен S; bij = S(aij) сәйкес алмастырылады.

Процедура SubBytes() процедурасы әр байттың жағдайын өндіреді. Мұндай операция шифрлеу алгоритмының сызықтық еместігін қамтамасыз етеді. S-box құрылуы екі қадамнан тұрады. Біріншіден, Галуа өрісіндегі кері санды алу шығарылады. Екіншіден, Во-вторых, S-box-тың әр b байтына келесі операция қолданылады:

мұндағы , және мұндағы есть i-ші биті b, ал -константаның і-ші биті . Осылай, қарапайым алгебралық қасиеттерде құралған шабуылдардан қорғау қамтамасыз етеді.

 

 

 

ShiftRows()

 

ShiftRows процедурасында state-тің әр жолдарындағы байттары циклді солға жылжиды. Әр жолдағы байттардың алмасу мөлшері өзінің нөмеріне байланысты.

ShiftRows процедурасы State-тің жолдарымен жұмыс жасайды. Жолдар тарнсформациясының жағдайы r байтқа көлденең жолдың нөмеріне тәуелді жылжиды. Нөлдік жол үшін r = 0, бірінші жол үшін r = 1 б т.б. Осылай, ShiftRows процедурасын қолданғаннан кейін шығыс жағдайдың әр жазбасы әр жазбаның бастапқы жағдайының байттарынан тұрады. Rijndael алгоритмі үшін жолдарды жылжыту паттерні 128 және 192-биттік жоларға бірдей. Бірақ 256-бит мөлшерлі блок алдыңғылардан айырмашылығы тек мұнда, 2,3 және 4 жолдары 1, 3 және 4 байттарға жылжиды сәйкесінше.

 

MixColumns()

 

MixColumns процедурасында әр жазбаның жағдайы бекітілген көпмүшемен c(x) көбейтіледі.

В процедуре MixColumns процедурасында State-тің әр жазбасының төрт байты кері сызықтық трансформацияны қолданып жылжиды. MixColumns жазбалардың жағдайының әрқайсысын төрт жәрежелі полином деп түсіндіріп өңдейді. Осы полиномдармен модульмен бекітілген көпмүше бекітілген көпмүше -те көбейту жүргізіледі. ShiftRows-пен MixColumns шифрге диффузия енгізеді.

AddRoundKey()

 

 

AddRoundKey процедурасында қалып-күйдің әр байтын XOR (⊕) операциясын қолданып RoundKeyмен байланысады.

AddRoundKey процедурасында RoundKey-дің әр бөлімі State-пен қосылады. CipherKey-ден Roundkey-дің әр бөліміне KeyExpansion процедурасын қолданым шығаруға болады; State-пен әр RoundKey-дің мөлшері бірдей. Процедура RoundKey-дің әр байтымен State-тің әр байтымен биттік XOR жүргізеді.

Кері шифрлеу

 

Кері шифрлеу кері кезектегі кері операцияларды қолданып орындалады. Сәйкесінше, кері шифрлеудің бірінші бөлімінің басында AddRoundKey операциясы қолданылады. Ол кеңейтілген кілттің соңғы төрт сөзін шифрмәтінге салуды орындайды, яғни W4R…W4R+3.

 

 

7-сурет. Кері шифрлеу бөлімі.

 

Содан соң кері шифрлеудің R бөлімдері орындалады, оның әрқайсысы келесі өзгертулер орындайды (7-сурет):

1. InvShiftRows операциясы мәліметтер массивының соңғы үш жолды оңға циклдық жылжыту орындайды.

2. InvSubBytes операциясы келесі кестемен анықталған байттық кері кестелік ауыстыруды орындайды:

 

6A D5 A5 BF A3 9E F3 D7 FB
7C E3 9B 2F FF 8E C4 DE E9 CB
7B A6 C2 3D EE 4C 0B FA C3 4E
2E A1 D9 B2 5B A2 6D 8B D1
F8 F6 D4 A4 5C CC 5D B6
6C FD ED B9 DA 5E A7 8D 9D
D8 AB 8C BC D3 0A F7 E4 B8 B3
D0 2C 1E 8F CA 3F 0F C1 AF BD 8A 6B
3A 4F DC EA F2 CF CE F0 B4 E6
AC E7 AD E2 F9 E8 1C DF 6E
F1 1A 1D C5 6F B7 0E AA BE 1B
FC 3E 4B C6 D2 9A DB C0 FE CD 5A F4
1F DD A8 C7 B1 EC 5F
7F A9 B5 4A 0D 2D E5 7A 9F C9 9C EF
A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C
2B 7E BA D6 E1 0C 7D

Берілген кестелік ауыстыруды 1.2 операциясына кері өзгертуді кіріс байтына қолдануға болады, содан кейін GF(28) соңғы өрісіндегі алдынғы операция нәтижесінің мультипликативті кері үлкендігін табу керек.

3. AddRoundKey операциясы шифрлеу кезінде W4r…W4r+3кеңейтілген кілттің өңделіп жатқан төрт сөз мәліметтеріне салуды орындайды. Бірақ, бөлімдердің нөмерленуі шифрлеу кезінде кері жаққа R-1-ден 0-ге дейін шығарылады.

4. InvMixColumns операциясы мәліметтер массивының әр бағанына тіке MixColumns операциясына көбейту орындайды, бірақ келесідей анықталған a-1(x)полиномында көбейту орындалады:

a-1(x) = Bx3 + Dx2 + 9x + E.



Просмотров 1027

Эта страница нарушает авторские права




allrefrs.su - 2024 год. Все права принадлежат их авторам!