diff --git a/SM4-with-AESENCLAST.md b/SM4-with-AESENCLAST.md index 42d82c8..9fc4424 100644 --- a/SM4-with-AESENCLAST.md +++ b/SM4-with-AESENCLAST.md @@ -1,3 +1,4 @@ +# 简介 This is the pure golang code to study SM4 implementation with AESENCLAST instruction. [sm4 with AESENCLAST](https://gist.github.com/emmansun/ae4677d71c75ff8407d5f5b3a884f5d2) @@ -19,9 +20,50 @@ Known (M1, C1, M2, C2), please reference [sm4 with AESENCLAST](https://gist.gith {(M1, C1, M2, C2) | SM4-S(x) = A2(AES-S(A1(x)), A1(x) = M1*x + C1, A2(x) = M2*x + C2} ``` -# 收集的(M1, C1, M2, C2)列表: +# 计算、收集的(M1, C1, M2, C2)列表: +``` +M1= 0x96 ,0x47 ,0xe9 ,0x3d ,0xde ,0x65 ,0xac ,0xa7 +C1= 0x69 +M2= 0xfa ,0x64 ,0xb4 ,0x0a ,0x41 ,0xdd ,0x01 ,0xc1 +C2= 0x61 -**Evolution path** +M1= 0x52 ,0xbc ,0x2d ,0x02 ,0x9e ,0x25 ,0xac ,0x34 +C1= 0x65 +M2= 0xcb ,0x9a ,0x0a ,0xb4 ,0xc7 ,0xac ,0x87 ,0x4e +C2= 0x2f + +M1= 0x5d ,0x50 ,0x22 ,0x1a ,0xb9 ,0x7d ,0x28 ,0x4c +C1= 0x3e +M2= 0xd3 ,0xba ,0x1d ,0x65 ,0x47 ,0x4c ,0x0e ,0x48 +C2= 0x6c + +M1= 0xe6 ,0xab ,0x99 ,0x5a ,0x86 ,0x42 ,0x28 ,0x24 +C1= 0x8e +M2= 0x2d ,0x8b ,0x65 ,0x1d ,0xc8 ,0xfb ,0x81 ,0xce +C2= 0xe9 + +M1= 0xd1 ,0x37 ,0xae ,0xce ,0x05 ,0x45 ,0xec ,0xdd +C1= 0x86 +M2= 0x50 ,0x16 ,0x5b ,0x2a ,0x53 ,0x92 ,0x62 ,0x33 +C2= 0x3c + +M1= 0xee ,0xb3 ,0x91 ,0x75 ,0xc1 ,0x81 ,0xec ,0x8a +C1= 0xd6 +M2= 0x19 ,0x56 ,0x2a ,0x5b ,0xa4 ,0xea ,0x95 ,0x0b +C2= 0x4d + +M1= 0x4d ,0x1f ,0x32 ,0xfe ,0x8e ,0xb1 ,0x17 ,0xd5 +C1= 0xce +M2= 0xe8 ,0x28 ,0x74 ,0xc3 ,0xfc ,0x32 ,0x02 ,0x6b +C2= 0x81 + +M1= 0x0d ,0x9b ,0x72 ,0x3a ,0x35 ,0x0a ,0x17 ,0x06 +C1= 0x23 +M2= 0xa8 ,0x61 ,0xc3 ,0x74 ,0xc4 ,0x8c ,0x3a ,0x9c +C2= 0x3b +``` + +# Evolution path sm4_box_aesenclast <-> sm4_box_aesbox_1 <-> sm4_box_aesbox_2 <-> sm4_box_aesbox_3 <-> sm4_box_aesbox_4 @@ -92,7 +134,7 @@ sm4_box_aesbox_4 x.bytes[i] = v } ``` -**How to calculate lookup table from M, C?** +## How to calculate lookup table from M, C? ```golang // {Mi+C | i>=0 && i<256} @@ -152,7 +194,7 @@ def print_table(table): print_table(gen_lookup([0xfe, 0x54, 0xaf, 0xdd, 0xf7, 0xf9, 0xac, 0xe2], 0x34)) ``` -**How to calculate M, C from lookup table?** +## How to calculate M, C from lookup table? 1.The first element of the table, T[0] should be the C. 2.Use T[1] XOR T[0], T[2] XOR T[0], T[4] XOR T[0], T[8] XOR T[0], T[16] XOR T[0], T[32] XOR T[0], T[64] XOR T[0], T[128] XOR T[0] to calculate matrix M.