CS-Cipher

Cs-cipher ( fr .  Chiffrement Symètrique , symmetrisk cipher) er en symmetrisk 64-bit [1] blokdatakrypteringsalgoritme [2] der bruger en nøglelængde på op til 128 bit [1] . Ifølge driftsprincippet er det et 8-rundt SP-netværk [3] .

Historie

Cs-cipher blev udviklet i 1998 af Jacques Stern og Serge  Vaudenay [ 4 ] med støtte fra Compagnie des Signaux [5] . Den blev indsendt som kandidat i NESSIE-projektet under Europa-Kommissionens IST-program ( Information Societies Technology ) i konkurrencegruppen for 64-bit blokcifre [6] . På trods af at undersøgelsen ikke fandt nogen sårbarheder [7] , blev chifferen ikke valgt til 2. fase af projektet [8] , fordi den viste sig at være den langsomste i sin gruppe [7] .   

Grundlæggende betegnelser

Anvendte funktioner

Lad os starte med følgende notation:

bord og
x 0 en 2 3 fire 5 6 7 otte 9 -en b c d e f
f d b b 7 5 7 7 e d -en b e d e f
-en 6 0 2 b e en otte d fire 5 3 f c 7 9
Indstil i sidste ende ved hjælp af tabellen [11] : bord
xy .0 .en .2 .3 .fire .5 .6 .7 .otte .9 .en .b .c .d .e .f
0. 29 0d 61 40 9c eb 9e 8f 1f 85 5f 58 5b 01 39 86
en. 97 2e d7 d6 35 ae 17 16 21 b6 69 4e a5 72 87 08
2. 3c atten e6 e7 fa annonce b8 89 b7 00 f7 6f 73 84 elleve 63
3. 3f 96 7f 6e bf fjorten 9d ac a4 0e 7e f6 tyve 4a 62 tredive
fire. 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
otte. 98 af c0 e1 2d 09 0f 1e b9 27 8a e9 bd e3 9f 07
9. b1 ea 92 93 53 6a 31 ti 80 f2 d8 9b 04 36 06 8e
en. være a9 64 45 38 1c 7a 6b f3 a1 f0 cd 37 25 femten 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 udg
d. d0 bb d3 d2 71 68 13 12 9a b3 c2 ca de 77 dc df
e. 66 83 f.Kr 8d 60 c6 22 23 b2 8b 91 05 76 jfr 74 c9
f. aa f1 99 a8 59 halvtreds 3b 2a fe f9 24 b0 ba fd f8 55


Algoritmekonstanter

Nedenfor er en liste over konstanter defineret af skaberne af algoritmen:

Nøglegenerering

Hvis den hemmelige nøgle brugt i chifferen er mindre end 128 bit, så er de første bit fyldt med nuller [1] , så i fremtiden vil vi betragte den hemmelige nøgle for at være 128 bit.

Nøglegenereringsalgoritme

Ifølge følgende algoritme genereres 9 undernøgler med en størrelse på 64 bit i chifferen fra en 128-bit nøgle:

Eksempel på nøglegenerering

Overvej et eksempel på nøglegenerering beskrevet af skaberne af CS-cipher [13] . Den bruger en hemmelig nøgle

0123456789abcdeffedcba9876543210 .

Ifølge ovenstående får vi de indledende parametre til generering af rundnøgler:

0123456789abcdef fedcba9876543210

Overvej nøglegenerering i detaljer :

0123456789abcdef 290d61409ceb9e8f b711fa89ae0394e4 fedcba9876543210 bb21a9e2388bacd4

Slutresultatet af generationsalgoritmen:

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

Kryptering

Kort beskrivelse af krypteringen

Hver runde af kryptering begynder med en XOR -operation på den indkommende 64-bit streng og undernøgle. Derefter opdeles 64-bit strengen i 4 16-bit strenge, over hvilke en ikke-lineær transformation ( ) finder sted. Strengene deles derefter igen, denne gang resulterer i 8 8-bit strenge, som derefter byttes. Disse handlinger gentages to gange mere i hver runde, den eneste forskel er, at XOR- operationen sker med de givne konstanter, og ikke med den genererede nøgle. Den sidste runde efterfølges af en ekstra XOR- operation med den resterende genererede nøgle [3] .

Formel beskrivelse af algoritmen

Lad os først definere:

Runde funktioner

Rundefunktionen består af følgende handlinger [15] :

Kryptering

Kryptering består af 8 runder, den endelige 64-bit chiffertekst kan beregnes ud fra almindeligtekstfragmentet ved hjælp af formlen [9] :

Hvor  er den runde funktion [10] beskrevet ovenfor.

Eksempel på almindelig tekstkryptering

Overvej et eksempel på klartekstkryptering beskrevet af skaberne af CS-cipher [13] . Den bruger følgende hemmelige nøgle og klartekst:

0123456789abcdef 0123456789abcdeffedcba9876543210

Den hemmelige nøgle svarer til ovenstående rundnøglegenereringseksempel, dvs. rundnøglerne er blevet beregnet ovenfor:

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

Mellemresultater til beregning :

d85c19785690b0e3 0f4bfb9e2f8ac7e2

Vi får følgende værdier på runderne:

c3feb96c0cf4b649 3f54e0c8e61a84d1 b15cb4af3786976e 76c122b7a562ac45 21300b6ccfaa08d8 99b8d8ab9034ec9a a2245ba3697445d2

Som et resultat modtog vi følgende chiffertekst:

88fddfbe954479d7 Dechifrering

Dekryptering består af 8 runder, det omvendte af kryptering [16] . Det er vigtigt, at dekrypteringsalgoritmen bruger de genererede nøgler i omvendt rækkefølge, dvs. [2] . Inden start foregår operationen .

For nemheds skyld og konsistens af notation angiver vi endnu en gang:

  • - iterationsnummer: fra 0 til 7 inklusive - 8 runder i alt
  • - 64-bit streng, kommer til input af den omvendte til den runde funktion i iteration, - almindelig tekst
  • - 64-bit genereret nøgle, kommer til input af den inverse til den runde funktion i iteration
  • - midlertidig 64-bit værdi beregnet i det omvendte trin af rundfunktionen.

For hver runde kaldes følgende rækkefølge af handlinger [13] :

Statistisk evaluering af krypterede data

I løbet af deltagelsen i NESSIE-projektet blev der udført mange statistiske test på krypterede data [17] , herunder:

Som et resultat af test af chifferen blev der ikke fundet nogen afvigelser fra tilfældig fordeling [23] .

Krypteringsanalyse

Markov chiffer

Antag at vi har en rund chiffer, kan chifferteksten fås ved formlen: , hvor hver runde bruger sin egen nøgle .

Så er en Markov-cifre en chiffer, for hvilken vi for enhver runde og enhver , og , har [24] :

Definition af den analyserede chiffer

Analysen anvender en modificeret CS-cifre, i det følgende kaldet CSC.

Det opnås fra CS-krypteringen ved følgende substitution:

  • til kryptering bruger CS-cipher følgende sekvens af nøgler og konstanter:
. Lad os for nemheds skyld omdøbe dem til .
  • Per definition [25] opnås CSC fra CS-chiffer ved at erstatte sekvensen opnået ved at generere nøgler og konstanter med en 1600-bit ensartet fordelt tilfældig nøgle.

Den resulterende CSC-cifre er en Markov-cifre med 24 runde bloker [26] .

Angrebsmodstand

For CSC-chifferet er følgende blevet bevist:

Derfor antages det, at CS-ciffer:

Implementering

Der er en implementering af denne krypteringsalgoritme i C [31] (leveret af forfatterne):

# definer CSC_C10 0xbf # define CSC_C11 0x71 # define CSC_C12 0x58 # define CSC_C13 0x80 # definer CSC_C14 0x9c # definer CSC_C15 0xf4 # definer CSC_C16 0xf3 # define 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) \ kode=tmpx=m[adl]^cl; \ kode=tmpx=(tmpx<<1)^(tmpx>>7); \ kode=tmpy=m[adr]^cr; \ code=m[adl]=tbp[(tmprx&0x55)^tmpx^tmpy]; \ code=m[adr]=tbp[tmprx^tmpy]; for(kode=i=0;i<8;i++,k+=8) { ANVEND_M(k[0],k[1],0,1) ANVEND_M(k[2],k[3],2,3) ANVEND_M(k[4],k[5],4,5) ANVEND_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) } for(kode=i=0;i<8;i++) kode=m[i]^=k[i]; }

krypteringsalgoritmekode i C

Forfatterne indsamlede også datakrypteringshastighedsstatistikker, som viste sig at være hurtigere end DES [5] :

Datakrypteringshastighed CS-chiffer
platform ur frekvens krypteringshastighed
VLSI 1216nand 1mm 230 MHz 73 Mbps
VLSI 30000nand 15mm 230 MHz 2 Gbps
standard C 32bit 133 MHz 2 Mbps
bit skive (Pentium) 133 MHz 11 Mbps
bit skive (alfa) 300 MHz 196 Mbps
Pentium samlingskode 133 MHz 8 Mbps
6805 samlingskode 4 MHz 20 Kbps

Videreudvikling

Baseret på CS-cipher i 2004 af Tom St. Denis udviklede en 128-bit cipher-cipher [ 32] .

Den resulterende chiffer blev testet og fundet at være resistent over for:

Noter

  1. 1 2 3 En første rapport om CS-Cipher, 2001 , s. en.
  2. 1 2 3 4 Cs-Cipher, 1998 , s. 190.
  3. 1 2 NESSIE Public Report D14, 2001 , s. 6.
  4. Cs-Cipher, 1998 , s. 189.
  5. 1 2 Cs-Cipher, 1998 , s. 201.
  6. NESSIE D20-NESSIE sikkerhedsrapport, 2003 , s. fire.
  7. 1 2 NESSIE Public Report D18, 2002 , s. en.
  8. NESSIE D20-NESSIE sikkerhedsrapport, 2003 , s. 77.
  9. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Cs-Cipher, 1998 , s. 192.
  10. 1 2 Cs-Cipher, 1998 , s. 195.
  11. Cs-Cipher, 1998 , s. 196.
  12. 1 2 3 Cs-Cipher, 1998 , s. 194.
  13. 1 2 3 4 5 Cs-Cipher, 1998 , s. 197.
  14. 1 2 Cs-Cipher, 1998 , s. 193.
  15. Cs-Cipher, 1998 , s. 193-195.
  16. Cs-Cipher, 1998 , s. 196-197.
  17. The Statistical Evaluation, 2002 , s. 1, 4, 7-16, 18, 21, 22-29.
  18. The Statistical Evaluation, 2002 , s. 10, 24.
  19. The Statistical Evaluation, 2002 , s. 12, 25.
  20. The Statistical Evaluation, 2002 , s. 13, 26.
  21. 1 2 Den statistiske evaluering, 2002 , s. 9, 23.
  22. The Statistical Evaluation, 2002 , s. 8, 21.
  23. Den statistiske evaluering, 2002 , s. tredive.
  24. On the security of CS-cipher, 1999 , s. 262.
  25. On the security of CS-cipher, 1999 , s. 266.
  26. On the security of CS-cipher, 1999 , s. 267.
  27. 1 2 On the security of CS-cipher, 1999 , s. 269.
  28. On the security of CS-cipher, 1999 , s. 270.
  29. 1 2 Sikkerhed mod umulig differentiel kryptoanalyse, 2008 , s. ti.
  30. 1 2 3 On the security of CS-cipher, 1999 , s. 272.
  31. Cs-Cipher, 1998 , s. 203-204.
  32. The CS2 Block Cipher, 2004 , s. en.
  33. The CS2 Block Cipher, 2004 , s. otte.
  34. 1 2 The CS2 Block Cipher, 2004 , s. 9.

Litteratur

  • Hurtig softwarekryptering: 6. internationale værksted  (engelsk) / Knudsen L.. - Rom, Italien, 1999. - S. 260-274. — 317 s.