CS-Cipher

Cs-cipher ( fr.  Chiffrement Symètrique , simetric cipher) este un algoritm simetric de criptare a datelor bloc de 64 de biți [1] [2] care utilizează o lungime a cheii de până la 128 de biți [1] . Conform principiului de funcționare, este o rețea SP cu 8 runde [3] .

Istorie

Cs-cipher a fost dezvoltat în 1998 de Jacques Stern și Serge Vaudenay  [ 4 ] cu sprijinul Compagnie des Signaux [5] . A fost depus ca candidat în proiectul NESSIE al programului IST ( Information Societies Technology ) al Comisiei Europene în grupul de concurs pentru cifruri bloc pe 64 de biți [6] . În ciuda faptului că studiul nu a găsit vulnerabilități [7] , cifrul nu a fost ales pentru faza a 2-a a proiectului [8] deoarece s-a dovedit a fi cel mai lent din grupul său [7] .   

Denumiri de bază

Funcțiile utilizate

Să începem cu următoarea notație:

masa si
X 0 unu 2 3 patru 5 6 7 opt 9 A b c d e f
f d b b 7 5 7 7 e d A b e d e f
A 6 0 2 b e unu opt d patru 5 3 f c 7 9
În cele din urmă , setați folosind tabelul [11] : masa
X y .0 .unu .2 .3 .patru .5 .6 .7 .opt .9 .A .b .c .d .e .f
0. 29 0d 61 40 9c eb 9e 8f 1f 85 5f 58 5b 01 39 86
unu. 97 2e d7 d6 35 ae 17 16 21 b6 69 4e a5 72 87 08
2. 3c optsprezece e6 e7 fa anunț b8 89 b7 00 f7 6f 73 84 unsprezece 63
3. 3f 96 7f 6e bf paisprezece 9d ac a4 0e 7e f6 douăzeci 4a 62 treizeci
patru. 03 c5 4b 5a 46 a3 44 65 7d 4d 3d 42 79 49 1b 5c
5. f5 6c b5 94 54 ff 56 57 0b f4 43 0c 4f 70 6d 0a
6. e4 02 3e 2f a2 47 e0 c1 d5 1a 95 a7 51 5e 33 2b
7. 5d d4 1d 2c ee 75 ec dd 7c 4c a6 b4 78 48 3a 32
opt. 98 af c0 e1 2d 09 0f 1e b9 27 8a e9 bd e3 9f 07
9. b1 ea 92 93 53 6a 31 zece 80 f2 d8 9b 04 36 06 8e
A. fi a9 64 45 38 1c 7a 6b f3 a1 f0 CD 37 25 cincisprezece 81
b. fb 90 e8 d9 7b 52 19 28 26 88 fc d1 e2 8c a0 34
c. 82 67 da cb c7 41 e5 c4 c8 ef db c3 cc ab ce ed
d. d0 bb d3 d2 71 68 13 12 9a b3 c2 ca de 77 DC df
e. 66 83 bc 8 D 60 c6 22 23 b2 8b 91 05 76 cf 74 c9
f. aa f1 99 a8 59 cincizeci 3b 2a fe f9 24 b0 ba fd f8 55


Constantele algoritmului

Mai jos este o listă de constante definite de creatorii algoritmului:

Generare cheie

Dacă cheia secretă folosită în cifru este mai mică de 128 de biți, atunci primii biți sunt umpluți cu zerouri [1] , așa că în viitor vom considera cheia secretă a fi de 128 de biți.

Algoritm de generare a cheilor

Conform următorului algoritm, 9 subchei cu dimensiunea de 64 de biți sunt generate în cifr de la o cheie de 128 de biți:

Exemplu de generare a cheilor

Luați în considerare un exemplu de generare a cheilor descris de creatorii CS-cipher [13] . Folosește o cheie secretă

0123456789abcdeffedcba9876543210 .

Conform celor de mai sus, obținem parametrii inițiali pentru generarea cheilor rotunde:

0123456789abcdef fedcba9876543210

Luați în considerare generarea cheilor în detaliu :

0123456789abcdef 290d61409ceb9e8f b711fa89ae0394e4 fedcba9876543210 bb21a9e2388bacd4

Rezultatul final al algoritmului de generare:

45fd137a4edf9ec4 1dd43f03e6f7564c ebe26756de9937c7 961704e945bad4fb 0b60dfe9eff473d4 76d3e7cf52c466cf 75ec8cef767d3a0d 82da3337b598fd6d fbd820da8dc8af8c

Criptare

Scurtă descriere a criptării

Fiecare rundă de criptare începe cu o operațiune XOR pe șirul și subcheia primite pe 64 de biți. Apoi șirul de 64 de biți este împărțit în 4 șiruri de 16 biți, peste care are loc o transformare neliniară ( ). Șirurile sunt apoi împărțite din nou, de data aceasta rezultând 8 șiruri de 8 biți, care sunt apoi schimbate. Aceste acțiuni se repetă încă de două ori în fiecare rundă, singura diferență este că operația XOR are loc cu constantele date, și nu cu cheia generată. Ultima rundă este urmată de o operație XOR suplimentară cu cheia generată rămasă [3] .

Descrierea formală a algoritmului

Să definim mai întâi:

Funcții rotunde

Funcția rotundă constă din următoarele acțiuni [15] :

Criptare

Criptarea constă din 8 runde, textul cifrat final pe 64 de biți poate fi calculat din fragmentul de text simplu folosind formula [9] :

Unde  este funcția rotundă [10] , descrisă mai sus.

Exemplu de criptare în text simplu

Luați în considerare un exemplu de criptare în text simplu descris de creatorii CS-cipher [13] . Utilizează următoarea cheie secretă și text simplu:

0123456789abcdef 0123456789abcdeffedcba9876543210

Cheia secretă corespunde exemplului de generare a cheii rotunde de mai sus, adică cheile rotunde au fost calculate mai sus:

45fd137a4edf9ec4 1dd43f03e6f7564c ebe26756de9937c7 961704e945bad4fb 0b60dfe9eff473d4 76d3e7cf52c466cf 75ec8cef767d3a0d 82da3337b598fd6d fbd820da8dc8af8c

Rezultate intermediare pentru calcul :

d85c19785690b0e3 0f4bfb9e2f8ac7e2

Obținem următoarele valori pe runde:

c3feb96c0cf4b649 3f54e0c8e61a84d1 b15cb4af3786976e 76c122b7a562ac45 21300b6ccfaa08d8 99b8d8ab9034ec9a a2245ba3697445d2

Drept urmare, am primit următorul text cifrat:

88fddfbe954479d7 Descifrare

Decriptarea constă din 8 runde, inversul criptării [16] . Este important ca algoritmul de decriptare să folosească cheile generate în ordine inversă, adică [2] . Înainte de începere, operația are loc .

Pentru comoditate și coerență a notării, indicăm încă o dată:

  • - număr de iterație: de la 0 la 7 inclusiv - 8 runde în total
  • - șir de 64 de biți, vine la intrarea inversului la funcția rotundă în iterație, - text simplu
  • - cheie generată pe 64 de biți, vine la intrarea inversă a funcției rotunde în iterație
  • - valoare temporară de 64 de biți calculată la pasul invers al funcției rotunde.

Pentru fiecare rundă, următoarea secvență de acțiuni se numește [13] :

Evaluarea statistică a datelor criptate

Pe parcursul participării la proiectul NESSIE au fost efectuate multe teste statistice pe date criptate [17] , printre care:

Ca urmare a testării cifrului, nu s-au găsit abateri de la distribuția aleatorie [23] .

Criptanaliză

Cifrul Markov

Să presupunem că avem un cifru rotund, textul cifrat poate fi obținut prin formula: , în care fiecare rundă folosește propria cheie .

Atunci un cifr Markov este un cifr pentru care, pentru orice rundă și orice , și , avem [24] :

Definiția cifrului analizat

Analiza utilizează un cifr CS modificat, denumit în continuare CSC.

Se obține din cifrul CS prin următoarea substituție:

  • pentru criptare, CS-cipher utilizează următoarea secvență de chei și constante:
. Pentru comoditate, să le redenumim ca .
  • Prin definiție [25] , CSC se obține din CS-cipher prin înlocuirea secvenței obținute prin generarea de chei și constante cu o cheie aleatoare de 1600 de biți distribuită uniform.

Cifrul CSC rezultat este un cifr Markov cu 24 blocuri rotunde [26] .

Rezistența la atac

Pentru cifrul CSC, s-au dovedit următoarele:

Prin urmare, se presupune că CS-cipher:

Implementare

Există o implementare a acestui algoritm de criptare în C [31] (furnizată de autori):

# definiți CSC_C10 0xbf # definește CSC_C11 0x71 # definiți CSC_C12 0x58 # definiți CSC_C13 0x80 # definiți CSC_C14 0x9c # definiți CSC_C15 0xf4 # definiți CSC_C16 0xf3 # definiți CSC_C17 0xc7 uint8 tbp[256]={ 0x29,0x0d,0x61,0x40,0x9c,0xeb,0x9e,0x8f, 0x1f,0x85,0x5f,0x58,0x5b,0x01,0x39,0x86, 0x97,0x2e,0xd7,0xd6,0x35,0xae,0x17,0x16, 0x21,0xb6,0x69,0x4e,0xa5,0x72,0x87,0x08, 0x3c,0x18,0xe6,0xe7,0xfa,0xad,0xb8,0x89, 0xb7,0x00,0xf7,0x6f,0x73,0x84,0x11,0x63, 0x3f,0x96,0x7f,0x6e,0xbf,0x14,0x9d,0xac, 0xa4,0x0e,0x7e,0xf6,0x20,0x4a,0x62,0x30, 0x03,0xc5,0x4b,0x5a,0x46,0xa3,0x44,0x65, 0x7d,0x4d,0x3d,0x42,0x79,0x49,0x1b,0x5c, 0xf5,0x6c,0xb5,0x94,0x54,0xff,0x56,0x57, 0x0b,0xf4,0x43,0x0c,0x4f,0x70,0x6d,0x0a, 0xe4,0x02,0x3e,0x2f,0xa2,0x47,0xe0,0xc1, 0xd5,0x1a,0x95,0xa7,0x51,0x5e,0x33,0x2b, 0x5d,0xd4,0x1d,0x2c,0xee,0x75,0xec,0xdd, 0x7c,0x4c,0xa6,0xb4,0x78,0x48,0x3a,0x32, 0x98,0xaf,0xc0,0xe1,0x2d,0x09,0x0f,0x1e, 0xb9,0x27,0x8a,0xe9,0xbd,0xe3,0x9f,0x07, 0xb1,0xea,0x92,0x93,0x53,0x6a,0x31,0x10, 0x80,0xf2,0xd8,0x9b,0x04,0x36,0x06,0x8e, 0xbe,0xa9,0x64,0x45,0x38,0x1c,0x7a,0x6b, 0xf3,0xa1,0xf0,0xcd,0x37,0x25,0x15,0x81, 0xfb,0x90,0xe8,0xd9,0x7b,0x52,0x19,0x28, 0x26,0x88,0xfc,0xd1,0xe2,0x8c,0xa0,0x34, 0x82,0x67,0xda,0xcb,0xc7,0x41,0xe5,0xc4, 0xc8,0xef,0xdb,0xc3,0xcc,0xab,0xce,0xed, 0xd0,0xbb,0xd3,0xd2,0x71,0x68,0x13,0x12, 0x9a,0xb3,0xc2,0xca,0xde,0x77,0xdc,0xdf, 0x66,0x83,0xbc,0x8d,0x60,0xc6,0x22,0x23, 0xb2,0x8b,0x91,0x05,0x76,0xcf,0x74,0xc9, 0xaa,0xf1,0x99,0xa8,0x59,0x50,0x3b,0x2a, 0xfe,0xf9,0x24,0xb0,0xba,0xfd,0xf8,0x55, }; void enc_csc(uint8 m[8],uint8* k) { uint8 tmpx,tmprx,tmpy; int i; #define APPLY_M(cl,cr,adl,adr) \ cod=tmpx=m[adl]^cl; \ cod=tmpx=(tmpx<<1)^(tmpx>>7); \ cod=tmpy=m[adr]^cr; \ cod=m[adl]=tbp[(tmprx&0x55)^tmpx^tmpy]; \ cod=m[adr]=tbp[tmprx^tmpy]; pentru(cod=i=0;i<8;i++,k+=8) { APPLY_M(k[0],k[1],0,1) APLICĂ_M(k[2],k[3],2,3) APLICĂ_M(k[4],k[5],4,5) APLICĂ_M(k[6],k[7],6,7) APPLY_M(CSC_C00,CSC_C01,0,2) APPLY_M(CSC_C02;CSC_C03;4;6) APPLY_M(CSC_C04,CSC_C05,1,3) APPLY_M(CSC_C06,CSC_C07,5,7) APPLY_M(CSC_C10;CSC_C11;0;4) APPLY_M(CSC_C12;CSC_C13;1,5) APPLY_M(CSC_C14;CSC_C15;2;6) APPLY_M(CSC_C16,CSC_C17,3,7) } pentru(cod=i=0;i<8;i++) cod=m[i]^=k[i]; }

codul algoritmului de criptare în C

Autorii au colectat, de asemenea, statistici privind viteza de criptare a datelor, care s-au dovedit a fi mai rapide decât DES [5] :

Viteza de criptare a datelor CS-cipher
platformă frecvența ceasului viteza de criptare
VLSI 1216n și 1mm 230 MHz 73 Mbps
VLSI 30000n și 15mm 230 MHz 2 Gbps
standard C 32 de biți 133 MHz 2 Mbps
felie de biți (Pentium) 133 MHz 11 Mbps
felie de biți (Alpha) 300 MHz 196 Mbps
Cod de asamblare Pentium 133 MHz 8 Mbps
6805 cod de asamblare 4 MHz 20 Kbps

Dezvoltare ulterioară

Bazat pe CS-cipher în 2004 de Tom St. Denis a dezvoltat un cifru de 128 de biți [ 32] .

Cifrul rezultat a fost testat și s-a dovedit a fi rezistent la:

Note

  1. 1 2 3 Un prim raport despre CS-Cipher, 2001 , p. unu.
  2. 1 2 3 4 Cs-Cipher, 1998 , p. 190.
  3. 1 2 Raport public NESSIE D14, 2001 , p. 6.
  4. Cs-Cipher, 1998 , p. 189.
  5. 1 2 Cs-Cipher, 1998 , p. 201.
  6. Raport de securitate NESSIE D20-NESSIE, 2003 , pp. patru.
  7. 1 2 Raport public NESSIE D18, 2002 , p. unu.
  8. Raport de securitate NESSIE D20-NESSIE, 2003 , p. 77.
  9. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Cs-Cipher, 1998 , p. 192.
  10. 1 2 Cs-Cipher, 1998 , p. 195.
  11. Cs-Cipher, 1998 , p. 196.
  12. 1 2 3 Cs-Cipher, 1998 , p. 194.
  13. 1 2 3 4 5 Cs-Cipher, 1998 , p. 197.
  14. 1 2 Cs-Cipher, 1998 , p. 193.
  15. Cs-Cipher, 1998 , pp. 193-195.
  16. Cs-Cipher, 1998 , pp. 196-197.
  17. Evaluarea statistică, 2002 , pp. 1, 4, 7-16, 18, 21, 22-29.
  18. Evaluarea statistică, 2002 , pp. 10, 24.
  19. Evaluarea statistică, 2002 , pp. 12, 25.
  20. Evaluarea statistică, 2002 , pp. 13, 26.
  21. 1 2 The Statistical Evaluation, 2002 , pp. 9, 23.
  22. Evaluarea statistică, 2002 , pp. 8, 21.
  23. Evaluarea statistică, 2002 , p. treizeci.
  24. Despre securitatea CS-cipher, 1999 , p. 262.
  25. Despre securitatea CS-cipher, 1999 , p. 266.
  26. Despre securitatea CS-cipher, 1999 , p. 267.
  27. 1 2 Despre securitatea CS-cipher, 1999 , p. 269.
  28. Despre securitatea CS-cipher, 1999 , p. 270.
  29. 1 2 Securitate împotriva criptoanalizei diferențiale imposibile, 2008 , p. zece.
  30. 1 2 3 Despre securitatea CS-cipher, 1999 , p. 272.
  31. Cs-Cipher, 1998 , pp. 203-204.
  32. The CS2 Block Cipher, 2004 , p. unu.
  33. The CS2 Block Cipher, 2004 , p. opt.
  34. 1 2 The CS2 Block Cipher, 2004 , p. 9.

Literatură

  • Fast Software Encryption: 6th International Workshop  (engleză) / Knudsen L.. - Roma, Italia, 1999. - P. 260-274. — 317 p.