CS-Cipher

Cs-cipher ( fr.  Chiffrement Symètrique , symetrická šifra) je symetrický 64bitový [1] blokový šifrovací algoritmus dat [2] využívající délku klíče až 128 bitů [1] . Podle principu fungování se jedná o 8kolovou SP-síť [3] .

Historie

Cs-šifru vyvinuli v roce 1998 Jacques Stern a Serge  Vaudenay [ 4 ] s podporou Compagnie des Signaux [ 5] . Byl předložen jako kandidát v projektu NESSIE programu Evropské komise IST ( Information Societies Technology ) v soutěžní skupině pro 64bitové blokové šifry [6] . Navzdory tomu, že studie nenašla žádné zranitelnosti [7] , nebyla šifra vybrána pro 2. fázi projektu [8] , protože se ukázala jako nejpomalejší ve své skupině [7] .   

Základní označení

Použité funkce

Začněme s následujícím zápisem:

stůl a
X 0 jeden 2 3 čtyři 5 6 7 osm 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 jeden osm d čtyři 5 3 F C 7 9
Nakonec nastavte pomocí tabulky [11] : stůl
xy .0 .jeden .2 .3 .čtyři .5 .6 .7 .osm .9 .A .b .C .d .E .F
0. 29 0d 61 40 9c eb 9e 8f lf 85 5f 58 5b 01 39 86
jeden. 97 2e d7 d6 35 ae 17 16 21 b6 69 4e a5 72 87 08
2. 3c osmnáct e6 e7 fa inzerát b8 89 b7 00 f7 6f 73 84 jedenáct 63
3. 3f 96 7f 6e bf čtrnáct 9d ac a4 0e 7e f6 dvacet 4a 62 třicet
čtyři. 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. 5 d d4 1d 2c ee 75 ec dd 7c 4c a6 b4 78 48 3a 32
osm. 98 af c0 e1 2d 09 0f 1e b9 27 8a e9 bd e3 9f 07
9. b1 ea 92 93 53 6a 31 deset 80 f2 d8 9b 04 36 06 8e
A. být a9 64 45 38 1c 7a 6b f3 a1 f0 CD 37 25 patnáct 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 vyd
d. d0 bb d3 d2 71 68 13 12 9a b3 c2 ca de 77 DC df
E. 66 83 před naším letopočtem 8d 60 c6 22 23 b2 8b 91 05 76 srov 74 c9
F. aa f1 99 a8 59 padesáti 3b 2a např f9 24 b0 ba fd f8 55


Algoritmové konstanty

Níže je uveden seznam konstant definovaných tvůrci algoritmu:

Generování klíčů

Pokud je tajný klíč použitý v šifře menší než 128 bitů, pak jsou první bity vyplněny nulami [1] , takže v budoucnu budeme za tajný klíč považovat 128 bitů.

Algoritmus generování klíčů

Podle následujícího algoritmu se v šifře ze 128bitového klíče vygeneruje 9 podklíčů o velikosti 64 bitů:

Příklad generování klíče

Vezměme si příklad generování klíče, který popsali tvůrci CS-cipher [13] . Používá tajný klíč

0123456789abcdeffedcba9876543210 .

Podle výše uvedeného získáme počáteční parametry pro generování kulatých klíčů:

0123456789abcdef fedcba9876543210

Zvažte generování klíčů podrobně :

0123456789abcdef 290d61409ceb9e8f b711fa89ae0394e4 fedcba9876543210 bb21a9e2388bacd4

Konečný výsledek generovacího algoritmu:

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

Šifrování

Stručný popis šifrování

Každé kolo šifrování začíná operací XOR na příchozím 64bitovém řetězci a podklíči. Poté se 64bitový řetězec rozdělí na 4 16bitové řetězce, nad kterými proběhne nelineární transformace ( ). Řetězce jsou poté znovu rozděleny, tentokrát výsledkem je 8 8bitových řetězců, které jsou poté prohozeny. Tyto akce se v každém kole opakují ještě dvakrát, rozdíl je pouze v tom, že operace XOR nastává s danými konstantami, nikoli s vygenerovaným klíčem. Po posledním kole následuje dodatečná operace XOR se zbývajícím vygenerovaným klíčem [3] .

Formální popis algoritmu

Nejprve definujme:

Kulaté funkce

Funkce round se skládá z následujících akcí [15] :

Šifrování

Šifrování se skládá z 8 kol, konečný 64bitový šifrovaný text lze vypočítat z fragmentu otevřeného textu pomocí vzorce [9] :

Kde  je výše popsaná funkce round [10] .

Příklad šifrování prostého textu

Vezměme si příklad šifrování prostého textu popsaného tvůrci CS-šifry [13] . Používá následující tajný klíč a prostý text:

0123456789abcdef 0123456789abcdeffedcba9876543210

Tajný klíč odpovídá výše uvedenému příkladu generování kulatého klíče, tj. kulaté klíče byly vypočteny výše:

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

Průběžné výsledky pro výpočet :

d85c19785690b0e3 0f4bfb9e2f8ac7e2

V kolech dostáváme následující hodnoty:

c3feb96c0cf4b649 3f54e0c8e61a84d1 b15cb4af3786976e 76c122b7a562ac45 21300b6ccfaa08d8 99b8d8ab9034ec9a a2245ba3697445d2

V důsledku toho jsme obdrželi následující šifrovaný text:

88fddfbe954479d7 Dešifrování

Dešifrování se skládá z 8 kol, opak šifrování [16] . Je důležité, aby dešifrovací algoritmus používal vygenerované klíče v opačném pořadí, tj. [2] . Před zahájením probíhá operace .

Pro pohodlí a konzistenci zápisu ještě jednou uvádíme:

  • - iterační číslo: od 0 do 7 včetně - celkem 8 kol
  • - 64bitový řetězec, přichází na vstup inverzní funkce round v iteraci, - prostý text
  • - 64bitový generovaný klíč, přichází na vstup inverzní funkce round v iteraci
  • - dočasná 64bitová hodnota vypočtená v inverzním kroku funkce round.

Pro každé kolo se nazývá následující sekvence akcí [13] :

Statistické vyhodnocení šifrovaných dat

V průběhu účasti v projektu NESSIE bylo provedeno mnoho statistických testů na zašifrovaných datech [17] , včetně:

V důsledku testování šifry nebyly zjištěny žádné odchylky od náhodného rozdělení [23] .

Kryptoanalýza

Markovova šifra

Předpokládejme, že máme kulatou šifru, šifrový text lze získat vzorcem: , ve kterém každé kolo používá svůj vlastní klíč .

Pak Markovova šifra je šifra, pro kterou pro libovolné kolo a libovolné , a , máme [24] :

Definice analyzované šifry

Analýza využívá modifikovanou CS-šifru, dále jen CSC.

Získává se z CS-šifry následující substitucí:

  • pro šifrování používá CS-cipher následující sekvenci klíčů a konstant:
. Pro usnadnění je přejmenujme na .
  • Podle definice [25] se CSC získává z CS-šifry nahrazením sekvence získané generováním klíčů a konstant 1600bitovým rovnoměrně distribuovaným náhodným klíčem.

Výsledná CSC šifra je 24 kruhová bloková Markovova šifra [26] .

Odolnost proti útokům

Pro šifru CSC bylo prokázáno následující:

Proto se předpokládá, že CS-šifra:

Implementace

Existuje implementace tohoto šifrovacího algoritmu v C [31] (poskytli autoři):

# definovat CSC_C10 0xbf # definovat CSC_C11 0x71 # definovat CSC_C12 0x58 # definovat CSC_C13 0x80 # definovat CSC_C14 0x9c # definovat CSC_C15 0xf4 # definovat CSC_C16 0xf3 # definovat 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) \ code=tmpx=m[adl]^cl; \ kód=tmpx=(tmpx<<1)^(tmpx>>7); \ code=tmpy=m[adr]^cr; \ code=m[adl]=tbp[(tmprx&0x55)^tmpx^tmpy]; \ code=m[adr]=tbp[tmprx^tmpy]; for(code=i=0;i<8;i++,k+=8) { APPLY_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) POUŽÍT_M(CSC_C00;CSC_C01;0;2) POUŽÍT_M(CSC_C02;CSC_C03;4;6) POUŽÍT_M(CSC_C04;CSC_C05;1;3) POUŽÍT_M(CSC_C06;CSC_C07;5;7) POUŽÍT_M(CSC_C10;CSC_C11;0;4) POUŽÍT_M(CSC_C12;CSC_C13;1;5) POUŽÍT_M(CSC_C14;CSC_C15;2;6) POUŽÍT_M(CSC_C16;CSC_C17;3;7) } for(code=i=0;i<8;i++) kód=m[i]^=k[i]; }

kód šifrovacího algoritmu v C

Autoři také shromáždili statistiku rychlosti šifrování dat, která se ukázala být rychlejší než DES [5] :

Rychlost šifrování dat CS-cipher
plošina hodinová frekvence rychlost šifrování
VLSI 1216n a 1mm 230 MHz 73 Mbps
VLSI 30000n a 15mm 230 MHz 2 Gbps
standardní C 32bit 133 MHz 2 Mbps
bit slice (Pentium) 133 MHz 11 Mbps
bitový řez (Alpha) 300 MHz 196 Mbps
Kód sestavy Pentium 133 MHz 8 Mbps
6805 montážní kód 4 MHz 20 kbps

Další vývoj

Na základě CS-šifry v roce 2004 od Toma St. Denis vyvinul 128bitovou šifru -cipher [32] .

Výsledná šifra byla testována a bylo zjištěno, že je odolná vůči:

Poznámky

  1. 1 2 3 První zpráva o CS-Cipher, 2001 , str. jeden.
  2. 1 2 3 4 Cs-Cipher, 1998 , str. 190.
  3. 1 2 Veřejná zpráva NESSIE D14, 2001 , str. 6.
  4. Cs-Cipher, 1998 , str. 189.
  5. 1 2 Cs-Cipher, 1998 , str. 201.
  6. Bezpečnostní zpráva NESSIE D20-NESSIE, 2003 , pp. čtyři.
  7. 1 2 Veřejná zpráva NESSIE D18, 2002 , str. jeden.
  8. Bezpečnostní zpráva NESSIE D20-NESSIE, 2003 , str. 77.
  9. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Cs-Cipher, 1998 , str. 192.
  10. 1 2 Cs-Cipher, 1998 , str. 195.
  11. Cs-Cipher, 1998 , str. 196.
  12. 1 2 3 Cs-Cipher, 1998 , str. 194.
  13. 1 2 3 4 5 Cs-Cipher, 1998 , str. 197.
  14. 1 2 Cs-Cipher, 1998 , str. 193.
  15. Cs-Cipher, 1998 , pp. 193-195.
  16. Cs-Cipher, 1998 , pp. 196-197.
  17. The Statistical Evaluation, 2002 , pp. 1, 4, 7-16, 18, 21, 22-29.
  18. The Statistical Evaluation, 2002 , pp. 10, 24.
  19. The Statistical Evaluation, 2002 , pp. 12, 25.
  20. The Statistical Evaluation, 2002 , pp. 13, 26.
  21. 1 2 The Statistical Evaluation, 2002 , pp. 9, 23.
  22. The Statistical Evaluation, 2002 , pp. 8, 21.
  23. The Statistical Evaluation, 2002 , str. třicet.
  24. O bezpečnosti CS-šifry, 1999 , str. 262.
  25. O bezpečnosti CS-šifry, 1999 , str. 266.
  26. O bezpečnosti CS-šifry, 1999 , str. 267.
  27. 1 2 O bezpečnosti CS-šifry, 1999 , s. 269.
  28. O bezpečnosti CS-šifry, 1999 , str. 270.
  29. 1 2 Zabezpečení proti nemožné diferenciální kryptoanalýze, 2008 , str. deset.
  30. 1 2 3 O bezpečnosti CS-šifry, 1999 , str. 272.
  31. Cs-Cipher, 1998 , pp. 203-204.
  32. Bloková šifra CS2, 2004 , str. jeden.
  33. Bloková šifra CS2, 2004 , str. osm.
  34. 1 2 The CS2 Block Cipher, 2004 , str. 9.

Literatura

  • Rychlé softwarové šifrování: 6. mezinárodní workshop  (anglicky) / Knudsen L.. - Řím, Itálie, 1999. - S. 260-274. — 317 s.