CS-Cipher

A Cs-cipher ( fr.  Chiffrement Symètrique , szimmetrikus titkosítás ) egy szimmetrikus 64 bites [1] blokk adattitkosítási algoritmus [2] , amely legfeljebb 128 bites kulcsot használ [1] . Működési elve szerint 8 körből álló SP-hálózat [3] .

Történelem

A Cs- ciphert 1998-ban fejlesztette ki Jacques Stern és Serge  Vaudenay [ 4 ] a Compagnie des Signaux [ 5] támogatásával . Az Európai Bizottság IST ( Information Societies Technology ) programjának NESSIE projektjében jelölték be a 64 bites blokk titkosítások versenycsoportjában [6] . Annak ellenére, hogy a tanulmány nem talált sebezhetőséget [7] , a titkosítást nem választották a projekt 2. fázisához [8] , mert az bizonyult a leglassabbnak a csoportjában [7] .   

Alapmegnevezések

Használt függvények

Kezdjük a következő jelöléssel:

asztal és
x 0 egy 2 3 négy 5 6 7 nyolc 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 egy nyolc d négy 5 3 f c 7 9
Végül a [11] táblázat segítségével állítsa be : asztal
xy .0 .egy .2 .3 .négy .5 .6 .7 .nyolc .9 .a .b .c .d .e .f
0. 29 0d 61 40 9c eb 9e 8f 1f 85 5f 58 5b 01 39 86
egy. 97 2e d7 d6 35 ae 17 16 21 b6 69 4e a5 72 87 08
2. 3c tizennyolc e6 e7 fa hirdetés b8 89 b7 00 f7 6f 73 84 tizenegy 63
3. 3f 96 7f 6e bf tizennégy 9d ac a4 0e 7e f6 húsz 4a 62 harminc
négy. 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
nyolc. 98 af c0 e1 2d 09 0f 1e b9 27 8a e9 bd e3 9f 07
9. b1 ea 92 93 53 6a 31 tíz 80 f2 d8 9b 04 36 06 8e
a. lenni a9 64 45 38 1c 7a 6b f3 a1 f0 CD 37 25 tizenöt 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 szerk
d. d0 bb d3 d2 71 68 13 12 9a b3 c2 kb de 77 dc df
e. 66 83 időszámításunk előtt 8 D 60 c6 22 23 b2 8b 91 05 76 74 c9
f. aa f1 99 a8 59 ötven 3b 2a fe f9 24 b0 ba fd f8 55


Algoritmus állandók

Az alábbiakban az algoritmus készítői által meghatározott állandók listája található:

Kulcsgenerálás

Ha a rejtjelezésben használt titkos kulcs 128 bitnél kisebb, akkor az első biteket nullákkal töltjük fel [1] , így a jövőben a titkos kulcsot 128 bitesnek fogjuk tekinteni.

Kulcsgeneráló algoritmus

A következő algoritmus szerint egy 128 bites kulcsból 9 db 64 bites alkulcs jön létre a titkosításban:

Kulcsgenerálási példa

Vegyünk egy példát a kulcsgenerálásra, amelyet a CS-cipher [13] alkotói írnak le . Titkos kulcsot használ

0123456789abcdeffedcba9876543210 .

A fentiek szerint megkapjuk a kerek kulcsok generálásához szükséges kezdeti paramétereket:

0123456789abcdef fedcba9876543210

Fontolja meg részletesen a kulcsgenerálást :

0123456789abcdef 290d61409ceb9e8f b711fa89ae0394e4 fedcba9876543210 bb21a9e2388bacd4

A generáló algoritmus végeredménye:

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

Titkosítás

A titkosítás rövid leírása

A titkosítás minden köre egy XOR művelettel kezdődik a bejövő 64 bites karakterláncon és alkulcson. Ezután a 64 bites karakterlánc 4 darab 16 bites stringre oszlik, amelyeken egy nemlineáris transzformáció ( ) történik. A karakterláncok ezután ismét felosztásra kerülnek, ezúttal 8 darab 8 bites karakterláncot eredményezve, amelyeket ezután felcserélnek. Ezek a műveletek minden körben még kétszer megismétlődnek, az egyetlen különbség az, hogy az XOR művelet a megadott konstansokkal történik, és nem a generált kulccsal. Az utolsó kört egy további XOR művelet követi a fennmaradó generált kulccsal [3] .

Az algoritmus formális leírása

Először határozzuk meg:

Kerek függvények

A kerek funkció a következő műveletekből áll [15] :

Titkosítás

A titkosítás 8 körből áll, a végső 64 bites titkosított szöveg a nyílt szöveg töredékből a [9] képlet segítségével számítható ki :

Hol van a fent leírt  kerek függvény [10] .

Példa egyszerű szöveges titkosításra

Vegyünk egy példát a CS-cipher [13] alkotói által leírt egyszerű szöveges titkosításra . A következő titkos kulcsot és egyszerű szöveget használja:

0123456789abcdef 0123456789abcdeffedcba9876543210

A titkos kulcs megfelel a fenti körkulcsgenerálási példának, azaz a kerek kulcsokat fentebb kiszámítottuk:

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

Köztes eredmények a számításhoz :

d85c19785690b0e3 0f4bfb9e2f8ac7e2

A fordulókon a következő értékeket kapjuk:

c3feb96c0cf4b649 3f54e0c8e61a84d1 b15cb4af3786976e 76c122b7a562ac45 21300b6ccfaa08d8 99b8d8ab9034ec9a a2245ba3697445d2

Ennek eredményeként a következő rejtjelezett szöveget kaptuk:

88fddfbe954479d7 Megfejtés

A visszafejtés 8 körből áll, a titkosítás fordítottja [16] . Fontos, hogy a visszafejtő algoritmus a generált kulcsokat fordított sorrendben használja, azaz [2] . Kezdés előtt a művelet megtörténik .

A jelölések egyszerűsége és következetessége érdekében még egyszer jelezzük:

  • - iterációs szám: 0-tól 7-ig - összesen 8 kör
  • - 64 bites karakterlánc, az iteráció során a kerek függvény inverzének bemenetére érkezik, - egyszerű szöveg
  • - 64 bites generált kulcs, az iteráció során a kerek függvény inverzének bemenetére érkezik
  • - ideiglenes 64 bites érték, amelyet a körfüggvény inverz lépésével számítanak ki.

Minden körben a következő akciósorozatot nevezzük [13] :

Titkosított adatok statisztikai kiértékelése

A NESSIE projektben való részvétel során számos statisztikai tesztet végeztek titkosított adatokon [17] , többek között:

A rejtjel tesztelésének eredményeként nem találtunk eltérést a véletlenszerű eloszlástól [23] .

Kriptanalízis

Markov titkosítás

Tegyük fel, hogy van egy kerek rejtjel, a rejtjelezett szöveget a következő képlettel kaphatjuk meg: , amelyben minden kör a saját kulcsát használja .

Ekkor a Markov-rejtjel olyan rejtjel, amelyhez bármely körhöz és bármely , és , van [24] :

Az elemzett rejtjel meghatározása

Az elemzés egy módosított CS-rejtjelet használ, a továbbiakban: CSC.

A CS-rejtjelből a következő helyettesítéssel kapjuk meg:

  • A titkosításhoz a CS-cipher a következő kulcs- és konstans-sorozatot használja:
. A kényelem kedvéért nevezzük át őket a következőre: .
  • Definíció szerint [25] a CSC-t a CS-cipherből kapjuk úgy, hogy a kulcsok és konstansok generálásával kapott sorozatot egy 1600 bites egyenletesen elosztott véletlen kulccsal helyettesítjük.

A kapott CSC-rejtjel egy 24 körből álló Markov-rejtjel [26] .

Támadásállóság

A CSC-rejtjel esetében a következők bizonyultak:

Ezért feltételezzük, hogy a CS-rejtjel:

Megvalósítás

Ennek a titkosítási algoritmusnak van egy implementációja a C-ben [31] (a szerzők által biztosított):

# definiálja a CSC_C10 0xbf-t # definiálja a CSC_C11 0x71-et # definiálja a CSC_C12 0x58-at # definiálja a CSC_C13 0x80-at # definiálja a CSC_C14 0x9c-t # definiálja a CSC_C15 0xf4-et # definiálja a CSC_C16 0xf3-at # definiálja a CSC_C17 0xc7-et 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) \ kód=tmpx=m[adl]^cl; \ kód=tmpx=(tmpx<<1)^(tmpx>>7); \ code=tmpy=m[adr]^cr; \ kód=m[adl]=tbp[(tmprx&0x55)^tmpx^tmpy]; \ kód=m[adr]=tbp[tmprx^tmpy]; for(kód=i=0;i<8;i++,k+=8) { ALKALMAZÁS_M(k[0],k[1],0,1) APPLY_M(k[2],k[3],2,3) APPLY_M(k[4],k[5],4,5) APPLY_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(code=i=0;i<8;i++) kód=m[i]^=k[i]; }

titkosítási algoritmus kódja C-ben

A szerzők adattitkosítási sebességi statisztikákat is gyűjtöttek, amelyek gyorsabbnak bizonyultak, mint a DES [5] :

Adattitkosítási sebesség CS-rejtjel
felület órajel frekvenciája titkosítási sebesség
VLSI 1216n és 1mm 230 MHz 73 Mbps
VLSI 30000n és 15mm 230 MHz 2 Gbps
szabványos C 32 bites 133 MHz 2 Mbps
bit szelet (Pentium) 133 MHz 11 Mbps
bit szelet (alfa) 300 MHz 196 Mbps
Pentium összeállítási kód 133 MHz 8 Mbps
6805 összeállítási kód 4 MHz 20 Kbps

Továbbfejlesztés

A CS-cipher alapján 2004 -ben, Tom St. Denis kifejlesztett egy 128 bites titkosítást [ 32] .

A kapott titkosítást tesztelték, és ellenállónak találták:

Jegyzetek

  1. 1 2 3 Az első jelentés a CS-Cipherről, 2001 , p. egy.
  2. 1 2 3 4 Cs-Cipher, 1998 , p. 190.
  3. 1 2 NESSIE nyilvános jelentés D14, 2001 , p. 6.
  4. Cs-Cipher, 1998 , p. 189.
  5. 1 2 Cs-Cipher, 1998 , p. 201.
  6. NESSIE D20-NESSIE biztonsági jelentés, 2003 , pp. négy.
  7. 1 2 NESSIE nyilvános jelentés D18, 2002 , p. egy.
  8. NESSIE D20-NESSIE biztonsági jelentés, 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. Statisztikai Értékelés, 2002 , pp. 1, 4, 7-16, 18, 21, 22-29.
  18. Statisztikai Értékelés, 2002 , pp. 10, 24.
  19. Statisztikai Értékelés, 2002 , pp. 12, 25.
  20. Statisztikai Értékelés, 2002 , pp. 13, 26.
  21. 1 2 A Statisztikai Értékelés, 2002 , pp. 9, 23.
  22. Statisztikai Értékelés, 2002 , pp. 8, 21.
  23. Statisztikai Értékelés, 2002 , p. harminc.
  24. A CS-cipher biztonságáról, 1999 , p. 262.
  25. A CS-cipher biztonságáról, 1999 , p. 266.
  26. A CS-cipher biztonságáról, 1999 , p. 267.
  27. 1 2 A CS-cipher biztonságáról, 1999 , p. 269.
  28. A CS-cipher biztonságáról, 1999 , p. 270.
  29. 1 2 Biztonság a lehetetlen differenciális kriptoanalízis ellen, 2008 , p. tíz.
  30. 1 2 3 A CS-cipher biztonságáról, 1999 , p. 272.
  31. Cs-Cipher, 1998 , pp. 203-204.
  32. A CS2 blokk titkosítása, 2004 , p. egy.
  33. A CS2 blokk titkosítása, 2004 , p. nyolc.
  34. 1 2 A CS2 blokk titkosítása, 2004 , p. 9.

Irodalom

  • Fast Software Encryption: 6th International Workshop  (angol) / Knudsen L.. - Róma, Olaszország, 1999. - P. 260-274. — 317 p.