четверг, 24 июня 2021 г.

GF2p8 Аффинные преобразования (ч. 8): CLEFIA

Нашел еще один алгоритм блочного шифрования, на котором можно применить аффинные преобразования GFNI. В алгоритме CLEFIA блок нелинейной подстановки (биекции) Sbox1 формируется методом APA (Affine-Power-Affine). Преобразования (инверсия) выполняются на полиноме P(x)=x8+x4+x3+x2+1 = 0x11D.

S(x) = A2·(A1·x ⊕ C1)-1 ⊕ C2
A2,A1 - матрицы аффинных преобразовний. 
A1 =0x81605C6503015118 C1=0x1E
A2 =0x449002302058410A C2=0x69
CLEFIA S-Box:
 6C E9 C3 DA 0A 9D 4E 3D B8 38 B4 36 0C 34 13 D9
 BF 8F 94 74 E5 9C B7 DC 9E 4F 49 07 B0 2C 98 93
 12 B3 CD EB 41 E7 92 60 E3 3B 27 21 D2 19 E6 0E
 91 3F C7 11 A1 8E 2A BC 2B 0F C5 C8 87 F3 5B 8B
 FB 20 DE F5 84 A7 C6 CE D8 C9 51 65 43 EF A4 53
 25 31 9B 5D 0D 3E E8 D7 80 8A 69 FF 73 0B BA 5C
 6E 62 15 54 30 35 F6 52 A3 28 D3 16 AA FA 32 5E
 CF 78 ED EA 09 58 33 7B 63 46 C1 C0 A9 DF 1E 99
 55 86 C4 04 82 77 39 EC 40 97 90 18 83 DD 59 1F
 9A 24 06 37 A5 7C 64 56 48 D0 85 08 CA 26 61 6F
 7E 71 B6 6A 05 70 A0 D1 45 1C 23 8C 89 EE F0 AD
 7A 2F C2 4B 4D 5A DB 76 67 F4 2D 17 4A B1 CB A8
 B5 3A 47 22 4C 10 D5 72 CC E0 F9 00 FE E2 FD AE
 F8 F1 AB 5F 81 42 1B D6 BE A6 29 44 AF B9 57 F2
 D4 BB 66 75 50 9F 68 02 01 8D 7F 3C BD 88 1A AC
 F7 96 79 E4 6D FC A2 B2 6B 2E E1 03 95 14 7D 1D

Для аппаратного ускорения на иснтрукциях Intel GFNI применил изоморфные преобразования из поля 0x11D в 0x11B и обратно. Инверсия выполняется на полиноме P(x)=x8+x4+x3+x+1 = 0x11B с использованием инструкции gf2p8affineinv

S(x) = (A2·M-1)·((M·A1)·x ⊕ (M·C1))-1 ⊕ C2
A2,A1 - матрицы аффинных преобразовний. 
M, M-1 -- матрицы изоморфного преобразования
(A2·M-1) =0C70AA50A0B83F2216
00100010 =0x22
00111111 =0x3F
10111000 =0xB8
10100000 =0xA0
01010000 =0x50
10101010 =0xAA
01110000 =0x70
00001100 =0x0C
(M·A1) =931C707D4B19491816, (M·C1) = 0x18
00011000 =0x18
01001001 =0x49
00011001 =0x19
01001011 =0x4B
01111101 =0x7D
01110000 =0x70
00011100 =0x1C
10010011 =0x93

В качестве изоморфного преобразования использовал матрицу с нетрадиционной ориентацией, структурой этой матрицы можно любоваться. Она обратная сама себе! Она работает в нескольких парах полей.

M = M-1 = FFAACC88F0A0C08016
10000000 =0x80
11000000 =0xC0
10100000 =0xA0
11110000 =0xF0
10001000 =0x88
11001100 =0xCC
10101010 =0xAA
11111111 =0xFF

Есть и другие варианты изоморфных преобразований 0x11D => 0x11B, которые можно применить в данном преобразовании. Результат совпадает!

P1   P2  g1 g2          M                   M-1
11D=>11B 02 03 M =FFAACC88F0A0C080 Mt =FFAACC88F0A0C080
11D=>11B 02 05 M =CFB00A10BC602840 Mt =DDE4F2E008A080AA
11D=>11B 02 11 M =5BD4D0B4F6487068 Mt =D9B2068A4AA0AAE4
11D=>11B 02 1A M =DDEE9CA64E38FC18 Mt =E12C36EE6EA0E4B2
11D=>11B 02 4C M =95D4EA8EEC0C2E2C Mt =7BC0D4F446A078E8
11D=>11B 02 5F M =6FAAD692CAC49EE4 Mt =2378BEF65CA0B22C
11D=>11B 02 E5 M =3BB06E74F85A567A Mt =ADE85E3EDAA02C78
11D=>11B 02 FB M =57EED8E22A228202 Mt =4F803A301CA0E8C0

Комментариев нет:

Отправить комментарий