close

CAST-128

Přejít na navigaci Přejít na hledání
CAST-128
CAST-128-large.png
Tvůrce Carlisle Adams, Stafford Tavares
Vytvořeno 1996
Velikost klíče 40-128 bitů
Velikost bloku 64 bit
Počet kol 12 (16, pokud klíč > 80 bitů)
Typ Síť Feistel
CAST-128-large.png

CAST-128 (nebo CAST5 ) v kryptografii je  algoritmus symetrického blokového šifrování založený na síti Feistel , který se používá v řadě produktů pro kryptografické zabezpečení, zejména v některých verzích PGP a GPG , a je také schválen pro použití kanadskou vládou.

Základní informace

Algoritmus vytvořili v roce 1996 Carlisle Adams a Stafford Tavares pomocí metody konstrukce šifry CAST , kterou také používá jejich další algoritmus CAST-256 ( AES kandidátský algoritmus ).

CAST-128 se skládá z 12 nebo 16 kol sítě Feistel s velikostí bloku 64 bitů a délkou klíče 40 až 128 bitů (ale pouze v krocích po 8 bitech). Pokud velikost klíče přesáhne 80 bitů, použije se 16 kol. Algoritmus používá 8x16 S-bloků založených na ohýbané funkci , operaci XOR a modulární aritmetice (modulární sčítání a odčítání). Existují tři různé typy kulatých funkcí, ale mají podobnou strukturu a liší se pouze volbou operace (sčítání, odečítání nebo XOR) na různých místech.


Přestože je CAST-128 chráněn patentem Entrust , lze jej zdarma používat po celém světě pro komerční i nekomerční účely.

Popis

CAST je oblíbená 64bitová šifra umožňující velikosti klíčů až 128 bitů, kterou v Kanadě vyvinuli Carlisle Adams a Stafford Tavares. Autoři tvrdí, že název je dán postupem vývoje a měl by připomínat pravděpodobnostní povahu procesu, nikoli iniciály autorů.

Algoritmus CAST používá 64bitový blok a 64bitový klíč. CAST je odolný vůči diferenciální a lineární kryptoanalýze. Síla algoritmu CAST spočívá v jeho S-boxech. CAST nemá žádné pevné S-boxy a je přepracován pro každou aplikaci. S-box vytvořený pro konkrétní implementaci CAST se již nikdy nezmění. Jinými slovy, S-boxy jsou závislé na implementaci, nikoli na konkrétním klíči. Northern Telecom používá CAST ve svém softwarovém balíčku Entrust pro pracovní stanice Macintosh, PC a UNIX. S-boxy, které si vybrali, nebyly zveřejněny, což není překvapivé.

CAST-128 je ve vlastnictví společnosti Entrust Technologies, ale je zdarma pro komerční i nekomerční použití. CAST-256  je bezplatné dostupné rozšíření CAST-128, které přijímá velikost klíče až 256 bitů a má velikost bloku 128 bitů. CAST-256 byl jedním z původních kandidátů na AES.


Popis algoritmu

Cast-128(1).png

CAST-128 je založen na síti Feistel. Kompletní šifrovací algoritmus je popsán v následujících čtyřech krocích:

VSTUP: text m 1 ... m 64 , klíč K = k 1 ... k 128 .
VÝSTUP: šifrový text c 1 ... C 64 .

1. (rozbalení klíče) je 16 párů podklíčů {Kmi, Kri} odvozených od K (viz sekce Kulaté páry klíčů a Neidentická kola).

2. (Lo , R ° ) <- (m1 ... m64 ) . (Rozdělí text na levou a pravou 32bitovou polovinu L 0 = m 1 ... m 32 a R 0 = m 33 ... m 64 ).

3. (16 kol) pro i od 1 do 16 vypočítejte Li a Ri následovně: Li = Ri - i ; R i = L i-1 ^ F(R i -1 ,Kmi , Kri ) kde F je definováno v kulatých párech klíčů (F je typ 1, typ 2, typ 3 nebo v závislosti na i).

4. c1 ... c64 < - (R16 , L16 ) . (Vyměňte poslední bloky L 16 , R 16 a sloučením vytvořte šifrový text.)

Dešifrování je stejné jako výše uvedený šifrovací algoritmus, kromě toho, že kola (a tedy dvojice podklíčů) se používají v obráceném pořadí k výpočtu (Lo , Ro ) z (R16 , L16 ) .

Páry kulatých klíčů

CAST-128 používá dvojici podklíčů na kolo: 32bitové hodnoty Km se používají jako „maska“ klíče a Kr se používají jako „permutace“ klíče, z nichž pouze počátečních 5 bitů Jsou používány.

Neidentická kola

Image
Obr.2 Počáteční funkce F

V CAST-128 se používají tři různé typy funkcí. Typy jsou následující (kde "D" je vstup funkce F a "I a " - "I d " je nejvýznamnější bajt, respektive nejnižší bajt I). Všimněte si, že "+" a "-" sčítají a odečítají modulo 2 ** 32, "^" je bitový XOR a "<<<" je kruhový posun doleva.


Kola
1,4,7,10,13,16
I = ((Km i + R i-1 ) <<< Kr i )
F = ((S1[I a ] ^ S2[I b ]) – (S3[I c ]) )+ S4[I d ]
Kola
2,5,8,11,14
I = ((Km i ^ R i-1 ) <<< Kr i )
F = ((S1[I a ] - S2[ Ib ]) + (S3[ Ic ])) ^ S4[I d ]
Kola
3,6,9,12,15
I = ((Km i - R i-1 ) <<< Kr i )
F = ((S1[I a ] + S2[ Ib ]) ^ (S3[ Ic ]) )- S4[I d ]

Náhradní pole

CAST-128 používá osm náhradních polí: pole S1, S2, S3 a S4 zaokrouhlují funkce náhradních polí, S5, S6, S7 a S8 jsou náhradní klávesy rozmítání polí. Přestože 8 náhradních polí vyžaduje k uložení celkem 8 kB, uvědomte si, že během skutečného šifrování/dešifrování jsou vyžadovány pouze 4 kB, protože generování podklíče se obvykle provádí před zadáním jakýchkoli dat. Obsah náhradních polí S1 - S8 najdete v příloze.

Sweep Keys

Představme si 128bitový klíč jako x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF, kde x0 je horní bajt a xF je dolní bajt.

Představme si z0..zF jako mezilehlé (dočasné) bajty. Si[] představuje náhradní pole i a "^" představuje přidání XOR.

Náhradní pole se tvoří z klíče x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF následovně.

  z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]
  z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA]
  z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9]
  zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB]
  K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2]
  K2 = S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6]
  K3 = S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9]
  K4 = S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC]
  x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0]
  x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ ​​​​S8[x3] ^ S8[z2]
  x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1]
  xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3]
  K5 = S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8]
  K6 = S5[x1] ^ ​​​​S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD]
  K7 = S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3]
  K8 = S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7]
  z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]
  z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA]
  z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9]
  zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB]
  K9 = S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9]
  K10 = S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC]
  K11 = S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2]
  K12 = S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6]
  x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0]
  x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ ​​​​S8[x3] ^ S8[z2]
  x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1]
  xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3]
  K13 = S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3]
  K14 = S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7]
  K15 = S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8]
  K16 = S5[xE] ^ S6[xF] ^ S7[x1] ^ ​​​​S8[x0] ^ S8[xD]

Zbývající polovina je identická s tou uvedenou výše, pokračuje od posledně jmenované vytvořené x0..xF ke generování klíčů K17 - K32.

  z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]
  z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA]
  z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9]
  zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB]
  K17 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2]
  K18 = S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6]
  K19 = S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9]
  K20 = S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC]
  x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0]
  x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ ​​​​S8[x3] ^ S8[z2]
  x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1]
  xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3]
  K21 = S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8]
  K22 = S5[x1] ^ ​​​​S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD]
  K23 = S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3]
  K24 = S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7]
  z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]
  z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA]
  z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9]
  zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB]
  K25 = S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9]
  K26 = S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC]
  K27 = S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2]
  K28 = S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6]
  x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0]
  x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ ​​​​S8[x3] ^ S8[z2]
  x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1]
  xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3]
  K29 = S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3]
  K30 = S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7]
  K31 = S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8]
  K32 = S5[xE] ^ S6[xF] ^ S7[x1] ^ ​​​​S8[x0] ^ S8[xD]

Maskování a záměna podklíčů

Km 1 , ..., Km 16 32bitové maskovací podklíče (jeden na kolo). Kr 1 ,, Kr 16 32bitové permutace podklíče (jedna za kolo); v každém kole se používá pouze spodních 5 bitů.

pro (i=1; i<=16; i++) { Km i = Ki; Krj = K16+i ; }

Variabilní velikost klíče

CAST-128 Šifrovací algoritmus byl navržen tak, aby umožňoval velikost klíče měnit od 40 do 128 bitů v 8bitových krocích (tj. platné velikosti klíče jsou 40, 48, 56, 64..., 112, 120 a 128 bitů ). Pro operace s proměnnou velikostí klíče je specifikace následující:

1) Pro velikosti klíčů do 80 bitů včetně (tj. 40, 48, 56, 64, 72 a 80 bitů) je algoritmus úplně stejný, ale používá 12 kol místo 16;

2) Pro velikosti klíčů větší než 80 bitů používá algoritmus celých 16 kol;

3) Pro velikosti klíčů menší než 128 bitů je klíč doplněn o nulové bajty (v pozicích zcela vpravo nebo nejméně významných) až po 128 bitů (protože plán klíčů CAST 128 přijímá vstupní klíč 128 bitů).

Příloha: Náhradní pole

S-Box S1

S-Box S2

S-Box S3

S-Box S4

S-Box S5

S-Box S6

S-Box S7

S-Box S8

Dešifrování

Dešifrování pro CAST-128 je poměrně jednoduché. Dešifrování funguje stejným algoritmickým směrem jako šifrování, počínaje šifrovaným textem jako vstupem. V tomto případě je podklíč použit v opačném směru.

Odkazy