Нашел еще один алгоритм блочного шифрования, на котором можно применить аффинные преобразования 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
Комментариев нет:
Отправить комментарий