SM4 (SMS4) | |
---|---|
publiceras | 2006 (avsekretessbelagd) |
Nyckelstorlek | 128 bitar |
Block storlek | 128 bitar |
Antal omgångar | 32 |
Sorts | Feistel nätverk |
SM4 är en blockchifferalgoritm som används i Kina som en nationell standard för trådlösa lokala nätverk (WLAN Authentication and Privacy Infrastructure (WAPI)).
Ursprungligen kallades algoritmen SMS4 , men i texten till GM / T 0002-2012 standard SM4 Block Cipher Algorithm daterad 21 mars 2012 döptes den officiellt om till SM4 . [ett]
SM4 föreslogs som chiffer som används i IEEE 802.11i- standarden , men ersattes snabbt av ISO . En av anledningarna till detta var motståndet mot WAPI snabbspår som främjades av IEEE .
SM4-algoritmen utvecklades av professor Lu Shu-wang (LU Shu-wang(???)). Algoritmen avklassificerades i januari 2006. Flera egenskaper hos SM4:
Mängden definieras som en vektor av e -bitar.
detta ord .
det här är en byte .
Rund nyckel | Runda nycklar erhålls från Cipher Key med hjälp av Key Expansion-proceduren. De tillämpas på staten vid kryptering och dekryptering |
---|---|
Chiffernyckel | en hemlig, kryptografisk nyckel som används av nyckelexpansionsproceduren för att producera en uppsättning runda nycklar; kan representeras som en rektangulär byte-array med fyra rader och Nk- kolumner. |
nyckelexpansion | procedur som används för att generera runda nycklar från Cipher Key |
S box | icke-linjär substitutionstabell som används i flera bytesubstitutionstransformationer och i Key Expansion-proceduren för en-till-en-ersättning av ett bytevärde. Den förberäknade S-boxen kan ses nedan. |
S-boxen är fixerad med 8 ingångsbitar och 8 utgångsbitar, skrivna som Sbox().
Längden på den krypterade nyckeln är 128-bitar och representeras som , var och en innehåller ett ord.
Den runda nyckeln representeras som . Den skapas av krypteringsnyckeln.
det är ett parametersystem.
fast parameter.
och det här är orden som används för att utöka algoritmen.
SM4 använder en icke-linjär substitutionsstruktur, 32 bitar krypteras åt gången. Detta är det så kallade enomgångsbytet . För ett illustrativt exempel, överväg en engångsersättning: Föreställ dig ett 128-bitars ingångsblock som fyra 32-bitars element
, med , och har sedan formen:
detta är en substitution som producerar 32 bitar av 32 bitar. Denna substitution är reversibel och innehåller en icke-linjär substitution, τ, och en linjär substitution, L, dvs.
Icke-linjär substitution τ bearbetar fyra S-boxar parallellt.Låt 32-bitars inmatningsord vara , där var och en är ett 8-bitars tecken. Låt det 32-bitars utgående ordet vara ), har formen
= (Sbox( ), Sbox( ), Sbox( ), Sbox( ))
, kommer det 32-bitars icke-linjära ersättningsordet att mata ut det linjära ersättningsordet L. Låt vara det 32-bitars utgångsordet skapat av L. Sedan
Alla Sbox-nummer är i hexadecimal notation.
_ | 0 | ett | 2 | 3 | fyra | 5 | 6 | 7 | åtta | 9 | a | b | c | d | e | f |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | d6 | 90 | e9 | fe | cc | e1 | 3d | b7 | 16 | b6 | fjorton | c2 | 28 | fb | 2c | 05 |
ett | 2b | 67 | 9a | 76 | 2a | vara | 04 | c3 | aa | 44 | 13 | 26 | 49 | 86 | 06 | 99 |
2 | 9c | 42 | femtio | f4 | 91 | ef | 98 | 7a | 33 | 54 | 0b | 43 | ed | jfr | ac | 62 |
3 | e4 | b3 | 1c | a9 | c9 | 08 | e8 | 95 | 80 | df | 94 | fa | 75 | 8f | 3f | a6 |
fyra | 47 | 07 | a7 | fc | f3 | 73 | 17 | ba | 83 | 59 | 3c | 19 | e6 | 85 | 4f | a8 |
5 | 68 | 6b | 81 | b2 | 71 | 64 | da | 8b | f8 | eb | 0f | 4b | 70 | 56 | 9d | 35 |
6 | 1e | 24 | 0e | 5e | 63 | 58 | d1 | a2 | 25 | 22 | 7c | 3b | 01 | 21 | 78 | 87 |
7 | d4 | 00 | 46 | 57 | 9f | d3 | 27 | 52 | 4c | 36 | 02 | e7 | a0 | c4 | c8 | 9e |
åtta | ea | bf | 8a | d2 | 40 | c7 | 38 | b5 | a3 | f7 | f2 | ce | f9 | 61 | femton | a1 |
9 | e0 | ae | 5d | a4 | 9b | 34 | 1a | 55 | annons | 93 | 32 | trettio | f5 | 8c | b1 | e3 |
a | 1d | f6 | e2 | 2e | 82 | 66 | ca | 60 | c0 | 29 | 23 | ab | 0d | 53 | 4e | 6f |
b | d5 | db | 37 | 45 | de | fd | 8e | 2f | 03 | ff | 6a | 72 | 6d | 6c | 5b | 51 |
c | 8d | Ib | af | 92 | bb | dd | före Kristus | 7f | elva | d9 | 5c | 41 | 1f | tio | 5a | d8 |
d | 0a | c1 | 31 | 88 | a5 | CD | 7b | bd | 2d | 74 | d0 | 12 | b8 | e5 | b4 | b0 |
e | 89 | 69 | 97 | 4a | 0c | 96 | 77 | 7e | 65 | b9 | f1 | 09 | c5 | 6e | c6 | 84 |
f | arton | f0 | 7d | ec | 3a | dc | 4d | tjugo | 79 | ee | 5f | 3e | d7 | cb | 39 | 48 |
Till exempel, om inmatningen Sbox tar värdet "ef", då vi hittar raden "e" och kolumnen "f", får vi Sbox("ef") = "84".
Låt den omvända ersättningen vara:
Låt den inmatade
texten vara , den utgående chiffertexten vara
, och krypteringsnyckeln vara
Sedan kommer krypteringen att gå till enligt följande:
Krypterings- och dekrypteringsalgoritmerna har samma struktur, förutom att ordningen som runda nycklar används är omvänd .
Krypteringsnyckelordning
: Dekrypteringsnyckelordning:
Den runda nyckeln som används för kryptering är härledd från krypteringsnyckeln MK.
Låt : utgången är som följer:
Först,
Sedan för :
Records:
(1) använder substitutionen samma som för kryptering, förutom den linjära substitutionen L, den ersätts med : (
2) Parametrarnas system , ges i hexadecimal notation ( 3)
Parameterkonstanten
är : inläggen är nedan:
00070e15 | 1c232a31 | 383f464d | 545b6269 |
70777e85 | 8c939aa1 | a8afb6bd | c4cbd2d9 |
e0e7eef5 | fc030a11 | 181f262d | 343b4249 |
50575e65 | 6c737a81 | 888f969d | a4abb2b9 |
c0c7ced5 | dce3eaf1 | f8ff060d | 141b2229 |
30373e45 | 4c535a61 | 686f767d | 848b9299 |
a0a7aeb5 | bcc3cad1 | d8dfe6ed | f4fb0209 |
10171e25 | 2c333a41 | 484f565d | 646b7279 |
Nedan är ett exempel på kryptering. Vi använder den för att kontrollera om krypteringen är korrekt. Siffror kontrolleras i hexadecimal notation.
oformatterad text: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
krypteringsnyckel: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
och mata ut information i varje omgång:
rk[0] | = | f12186f9 | X[ 4] | = | 27fad345 |
rk[ 1] | = | 41662b61 | X[5] | = | a18b4cb2 |
rk[ 2] | = | 5a6ab19a | X[6] | = | 11c1e22a |
rk[ 3] | = | 7ba92077 | X[ 7] | = | cc13e2ee |
rk[ 4] | = | 367360f4 | X[8] | = | f87c5bd5 |
rk[ 5] | = | 776a0c61 | X[9] | = | 33220757 |
rk[ 6] | = | b6bb89b3 | X[ 10] | = | 77f4c297 |
rk[ 7] | = | 24763151 | X[ 11] | = | 7a96f2eb |
rk[8] | = | a520307c | X[ 12] | = | 27dac07f |
rk[ 9] | = | b7584dbd | X[ 13] | = | 42dd0f19 |
rk[10] | = | c30753ed | X[14] | = | b8a5da02 |
rk[11] | = | 7ee55b57 | X[15] | = | 907127fa |
rk[12] | = | 6988608c | X[16] | = | 8b952b83 |
rk[13] | = | 30d895b7 | X[17] | = | d42b7c59 |
rk[14] | = | 44ba14af | X[18] | = | 2ffc5831 |
rk[15] | = | 104495a1 | X[19] | = | f69e6888 |
rk[16] | = | d120b428 | X[20] | = | af2432c4 |
rk[17] | = | 73b55fa3 | X[21] | = | ed1ec85e |
rk[18] | = | cc874966 | X[22] | = | 55a3ba22 |
rk[19] | = | 92244439 | X[23] | = | 124b18aa |
rk[20] | = | e89e641f | X[24] | = | 6ae7725f |
rk[21] | = | 98ca015a | X[25] | = | f4cba1f9 |
rk[22] | = | c7159060 | X[26] | = | 1dcdfa10 |
rk[23] | = | 99e1fd2e | X[27] | = | 2ff60603 |
rk[24] | = | b79bd80c | X[28] | = | eff24fdc |
rk[25] | = | 1d2115b0 | X[29] | = | 6fe46b75 |
rk[26] | = | 0e228aeb | X[30] | = | 893450ad |
rk[27] | = | f1780c81 | X[31] | = | 7b938f4c |
rk[28] | = | 428d3654 | X[32] | = | 536e4246 |
rk[29] | = | 62293496 | X[33] | = | 86b3e94f |
rk[30] | = | 01cf72e5 | X[34] | = | d206965e |
rk[31] | = | 9124a012 | X[35] | = | 681edf34 |
Chiffertext: 68 1e df 34 d2 06 96 5e 86 b3 e9 4f 53 6e 42 46
Text: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
Krypteringsnyckel: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
Chiffertext: | 59 52 98 c7 c6 fd 27 1f 04 02 f8 04 c3 3d 3f 66 |
Symmetriska kryptosystem | |
---|---|
Streama chiffer | |
Feistel nätverk | |
SP nätverk | |
Övrig |