SM4 (SMS4) | |
---|---|
offentliggjort | 2006 (afklassificeret) |
Nøglestørrelse | 128 bit |
Blokstørrelse | 128 bit |
Antal runder | 32 |
Type | Feistel netværk |
SM4 er en blokchifferalgoritme, der bruges i Kina som en national standard for trådløse lokalnetværk (WLAN Authentication and Privacy Infrastructure (WAPI)).
Oprindeligt blev algoritmen kaldt SMS4 , men i teksten til GM / T 0002-2012 standard SM4 Block Cipher Algorithm dateret 21. marts 2012 blev den officielt omdøbt til SM4 . [en]
SM4 blev foreslået som den chiffer, der blev brugt i IEEE 802.11i -standarden , men blev hurtigt afløst af ISO . En af grundene til dette var modstanden mod WAPI fast-track fremmet af IEEE .
SM4-algoritmen blev udviklet af professor Lu Shu-wang (LU Shu-wang(???)). Algoritmen blev afklassificeret i januar 2006. Flere karakteristika ved SM4:
Sættet er defineret som en vektor af e bits.
dette ord .
dette er en byte .
Rund nøgle | Runde nøgler fås fra Cipher Key ved hjælp af Key Expansion-proceduren. De anvendes til staten ved kryptering og dekryptering |
---|---|
Chiffernøgle | en hemmelig, kryptografisk nøgle, der bruges af nøgleudvidelsesproceduren til at producere et sæt runde nøgler; kan repræsenteres som et rektangulært byte-array med fire rækker og Nk - kolonner. |
nøgleudvidelse | procedure, der bruges til at generere runde nøgler fra Cipher Key |
S kasse | ikke-lineær substitutionstabel, der bruges i flere byte-substitutionstransformationer og i Key Expansion-proceduren for en-til-en substitution af en byteværdi. Den forudberegnede S-boks kan ses nedenfor. |
S-boksen er fast med 8 input bits og 8 output bits, skrevet som Sbox().
Længden af den krypterede nøgle er 128-bit og er repræsenteret som , der hver indeholder et ord.
Den runde nøgle er repræsenteret som . Den er oprettet af krypteringsnøglen.
det er et parametersystem.
fast parameter.
og det er de ord, der bruges til at udvide algoritmen.
SM4 bruger en ikke-lineær substitutionsstruktur, 32 bit krypteres ad gangen. Dette er den såkaldte en- runde udskiftning . For et illustrativt eksempel, overvej en en-runde substitution: Forestil dig en 128-bit inputblok som fire 32-bit elementer
, med , så har formen:
dette er en substitution, der producerer 32 bit ud af 32 bit. Denne substitution er reversibel, og indeholder en ikke-lineær substitution, τ, og en lineær substitution, L, dvs.
Ikke-lineær substitution τ behandler fire S-bokse parallelt.Lad 32-bit inputordet være , hvor hvert er et 8-bit tegn. Lad 32-bit outputordet være ), har formen
= (Sbox( ), Sbox( ), Sbox( ), Sbox( ))
, vil det 32-bit ikke-lineære substitutionsord udsende det lineære substitutionsord L. Lad være det 32-bit outputord skabt af L. Så
Alle Sbox-numre er i hexadecimal notation.
_ | 0 | en | 2 | 3 | fire | 5 | 6 | 7 | otte | 9 | -en | b | c | d | e | f |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | d6 | 90 | e9 | fe | cc | e1 | 3d | b7 | 16 | b6 | fjorten | c2 | 28 | fb | 2c | 05 |
en | 2b | 67 | 9a | 76 | 2a | være | 04 | c3 | aa | 44 | 13 | 26 | 49 | 86 | 06 | 99 |
2 | 9c | 42 | halvtreds | f4 | 91 | ef | 98 | 7a | 33 | 54 | 0b | 43 | udg | jfr | ac | 62 |
3 | e4 | b3 | 1c | a9 | c9 | 08 | e8 | 95 | 80 | df | 94 | fa | 75 | 8f | 3f | a6 |
fire | 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 |
otte | ea | bf | 8a | d2 | 40 | c7 | 38 | b5 | a3 | f7 | f2 | ce | f9 | 61 | femten | a1 |
9 | e0 | ae | 5d | a4 | 9b | 34 | 1a | 55 | annonce | 93 | 32 | tredive | f5 | 8c | b1 | e3 |
-en | 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 | 1b | af | 92 | bb | dd | f.Kr | 7f | elleve | d9 | 5c | 41 | 1f | ti | 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 | atten | f0 | 7d | ec | 3a | dc | 4d | tyve | 79 | ee | 5f | 3e | d7 | cb | 39 | 48 |
For eksempel, hvis input Sbox tager værdien "ef", så finder vi rækken "e" og kolonnen "f", får vi Sbox("ef") = "84".
Lad den omvendte substitution være:
Lad
inputteksten være , outputchifferteksten være
, og krypteringsnøglen være
Så vil kryptering forløbe som følger:
Krypterings- og dekrypteringsalgoritmerne har samme struktur, bortset fra at rækkefølgen, hvori rundnøgler bruges, er omvendt. .
Krypteringsnøglerækkefølge
: Dekrypteringsnøglerækkefølge:
Den runde nøgle , der bruges til kryptering, er afledt af krypteringsnøglen MK.
Lad : outputtet er som følger:
Først,
Derefter for :
Records:
(1) anvender substitutionen det samme som for kryptering, bortset fra den lineære substitution L, den erstattes af : (
2) Systemet af parametre
, er givet i hexadecimal notation ( 3)
Parameterkonstanten er: posterne er nedenfor:
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 |
Nedenfor er et eksempel på kryptering. Vi bruger det til at kontrollere, om krypteringen er korrekt. Tal kontrolleres i hexadecimal notation.
simpel tekst: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
krypteringsnøgle: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
og output information i hver runde:
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 |
Krypteringstekst: 68 1e df 34 d2 06 96 5e 86 b3 e9 4f 53 6e 42 46
Tekst: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
Krypteringsnøgle: | 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 |
Chiffertekst: | 59 52 98 c7 c6 fd 27 1f 04 02 f8 04 c3 3d 3f 66 |
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |