next up previous contents
Nächste Seite: Analyse, Angriffe Aufwärts: Algorithmus Vorherige Seite: CAST-128   Inhalt

CAST-256

Wie bereits angedeutet, werden hierfür folgende Elemente des CAST-128 weiter verwendet:

Im Speziellen wird der Algorithmus wie folgt beschrieben: Sei $ \beta=(ABCD)$ ein 128-Bit-Block mit $ A, \hdots, D$ jew. 32-Bit und sei

$\displaystyle \beta \leftarrow Q_i(\beta)$

die Kurznotation für


$\displaystyle C$ $\displaystyle =$ $\displaystyle C \oplus f_1(D, k_{r_0}^{(i)}, k_{m_0}^{(i)})$  
$\displaystyle B$ $\displaystyle =$ $\displaystyle B \oplus f_2(C, k_{r_1}^{(i)}, k_{m_1}^{(i)})$  
$\displaystyle A$ $\displaystyle =$ $\displaystyle A \oplus f_3(B, k_{r_2}^{(i)}, k_{m_2}^{(i)})$  
$\displaystyle D$ $\displaystyle =$ $\displaystyle D \oplus f_1(A, k_{r_3}^{(i)}, k_{m_3}^{(i)})$  

und

$\displaystyle \beta \leftarrow \overline{Q_i}(\beta)$

die Kurznotation für


$\displaystyle D$ $\displaystyle =$ $\displaystyle D \oplus f_1(A, k_{r_3}^{(i)}, k_{m_3}^{(i)})$  
$\displaystyle A$ $\displaystyle =$ $\displaystyle A \oplus f_3(B, k_{r_2}^{(i)}, k_{m_2}^{(i)})$  
$\displaystyle B$ $\displaystyle =$ $\displaystyle B \oplus f_2(C, k_{r_1}^{(i)}, k_{m_1}^{(i)})$  
$\displaystyle C$ $\displaystyle =$ $\displaystyle C \oplus f_1(D, k_{r_0}^{(i)}, k_{m_0}^{(i)})$  

wobei $ Q$ als ``Vorwärts-Vierer-Runde'' und $ \overline{Q}$ als ``Rückwärts-Vierer-Runde'' bezeichnet wird.

Sei weiterhin $ k_r^{(i)}=\{k_{r_0}^{(i)},k_{r_1}^{(i)},k_{r_2}^{(i)},k_{r_3}^{(i)}\}$ die Menge der 5-Bit-Rotations-Schlüssel für die $ i$-te Vierer-Runde. Analog sei $ k_m^{(i)}=\{k_{m_0}^{(i)},k_{m_1}^{(i)},k_{m_2}^{(i)},k_{m_3}^{(i)}\}$ die Menge der 32-Bit-Masken-Schlüssel für die $ i$-te Vierer-Runde.

Sei $ \kappa=(ABCDEFGH)$ ein 256-Bit-Block mit $ A,\hdots, H$ jew. 32-Bit und sei

$\displaystyle \kappa \leftarrow \omega_i(\kappa)$

die Kurzform für


$\displaystyle G$ $\displaystyle =$ $\displaystyle G \oplus f_1(H, t_{r_0}^{(i)}, t_{m_0}^{(i)})$  
$\displaystyle F$ $\displaystyle =$ $\displaystyle F \oplus f_2(G, t_{r_1}^{(i)}, t_{m_1}^{(i)})$  
$\displaystyle E$ $\displaystyle =$ $\displaystyle E \oplus f_3(F, t_{r_2}^{(i)}, t_{m_2}^{(i)})$  
$\displaystyle D$ $\displaystyle =$ $\displaystyle D \oplus f_1(E, t_{r_3}^{(i)}, t_{m_3}^{(i)})$  
$\displaystyle C$ $\displaystyle =$ $\displaystyle C \oplus f_2(D, t_{r_4}^{(i)}, t_{m_4}^{(i)})$  
$\displaystyle B$ $\displaystyle =$ $\displaystyle B \oplus f_3(C, t_{r_5}^{(i)}, t_{m_5}^{(i)})$  
$\displaystyle A$ $\displaystyle =$ $\displaystyle A \oplus f_1(B, t_{r_6}^{(i)}, t_{m_6}^{(i)})$  
$\displaystyle H$ $\displaystyle =$ $\displaystyle H \oplus f_2(A, t_{r_7}^{(i)}, t_{m_7}^{(i)})$  

wobei $ \omega$ auch als ``Vorwärts-Oktave'' bezeichnet wird.

Sei desweiteren

$\displaystyle k_r^{(i)} \leftarrow \kappa$

die Kurznotation für


$\displaystyle k_{r_0}^{(i)}$ $\displaystyle =$ $\displaystyle LSB (5, A)$  
$\displaystyle k_{r_1}^{(i)}$ $\displaystyle =$ $\displaystyle LSB (5, C)$  
$\displaystyle k_{r_2}^{(i)}$ $\displaystyle =$ $\displaystyle LSB (5, E)$  
$\displaystyle k_{r_3}^{(i)}$ $\displaystyle =$ $\displaystyle LSB (5, G)$  

wobei $ LSB(n, x)$ die $ n$ niederwertigsten Bits von $ x$ darstellt. Analog sei

$\displaystyle k_m^{(i)} \leftarrow \kappa$

die Kurznotation für


$\displaystyle k_{m_0}^{(i)}$ $\displaystyle =$ $\displaystyle H$  
$\displaystyle k_{m_1}^{(i)}$ $\displaystyle =$ $\displaystyle F$  
$\displaystyle k_{m_2}^{(i)}$ $\displaystyle =$ $\displaystyle D$  
$\displaystyle k_{m_3}^{(i)}$ $\displaystyle =$ $\displaystyle B$  

Nun kann die Verschüsselung selbst definiert werden:


\begin{algorithmic}[1]
\STATE Eingabe: $\beta$ = 128-Bit-Klartextblock
\FOR{$i=...
...beta)$\ENDFOR
\STATE Ausgabe: 128-Bit-Kryptotextblock = $\beta$\end{algorithmic}

Zur Entschlüsselung wird der gleiche Algorithmus verwendet werden, nur muß hierbei (vorher) die Reihenfolge der Vierer-Rundenschlüssel umgekehrt werden:


\begin{algorithmic}[1]
\FOR{$i=0$ to $11$}
\STATE $k_{r_{new}}^{(i)} = k_r^{(11-i)}$\STATE $k_{m_{new}}^{(i)} = k_m^{(11-i)}$\ENDFOR
\end{algorithmic}

Wie schon angedeutet, wird für den CAST-256 ein neuer Algorithmus für die Berechnung der Rundenschlüssel angegeben:

Initialisierung:


\begin{algorithmic}[1]
\STATE $c_m = 2^{30}\sqrt{2} = 5A827999_{16}$\STATE $m_m ...
...^{(i)} = c_r$\STATE $c_r = (c_r + m_r) \mod 32$\ENDFOR
\ENDFOR
\end{algorithmic}

Rundenschlüsselberechnung:


\begin{algorithmic}[1]
\STATE $\kappa = ABCDEFGH = \textrm{256-Bit-Prim\uml ar-S...
... \leftarrow \kappa$\STATE $k_m^{(i)} \leftarrow \kappa$\ENDFOR
\end{algorithmic}

Falls der ``Primärschlüssel'' kleiner als 256 Bit sein sollte, wird dieser bis 256 Bits links (niederwertig) mit Nullen aufgefüllt.


next up previous contents
Nächste Seite: Analyse, Angriffe Aufwärts: Algorithmus Vorherige Seite: CAST-128   Inhalt
stigge@epost.de