|
Enigma Home Page
The first methods
|
IntroductionIn late 1932, Rejewski reconstructed the Enigma machine. During 1933, Polish cryptanalysts were able to read Enigma messages by reconstructing the daily key. This page is dedicated to the study of the "F-catalog," which is used to identify the slow rotors—specifically, the left and middle rotors. Using the F-catalog requires having first determined the plugboard settings (Steckers) via the Grill method. Enigma Encryption EquationsEquations A and FThe chapter describing the Grill method outlined the equation specifying the substitutions associated with the indicator. There are six "A" equations (labeled 0 through 5). Six "F" equations (0 through 5) were also calculated; these are derived from the A equations but exclude the rotation of the right-hand rotor (the fast rotor). If no plugboard settings are used, and the middle rotor remains stationary, and the position of the right-hand rotor is known, then all six F equations become identical.
Equations formulasIf they are no steckers:
\( A_0 = P^x C P^{-x} U P^x C^{-1} P^{-x} \)
\( F_0 = U \)
Equation U\( U = ( P^{j} \cdot MR \cdot P^{-j} ) \cdot ( P^{i} \cdot LR \cdot P^{-i} ) \cdot UKW \cdot ( P^{i} \cdot LR^{-1} \cdot P^{-i} ) \cdot ( P^{j} \cdot MR^{-1} \cdot P^{-j} ) \)
Creating the catalogThe catalog will typically be a file containing the U-substitution and the corresponding left and middle rotors. To create it, we explore all combinations of the left and middle rotors (6 combinations): I-II, I-III, II-I, II-III, III-I, III-II. For each rotor order, we calculate U for every position of the left and middle rotors. Thus, in total, we obtain U for 6 × 26 × 26 = 4,056 combinations. I created a program to generate this catalog (it uses SymPy):
$ python catalog-F.py
Syntaxe: catalog-F.py UKW
UKW == A or B
$ python catalog-F.py B > catalog-F_B.txt
Here is an excerpt from the catalog (all configurations containing the
pairs (am) and (by)):
$ grep am catalog-F_B.txt | grep by [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] -- 12*:RP- [[am][by][cf][dl][eo][gk][hr][iv][jt][nu][ps][qw][xz]] -- 21*:AU- [[am][by][ck][de][fl][gp][hj][iv][nq][ou][rw][sx][tz]] -- 23*:BK- [[am][by][ci][dj][ew][fp][gn][hs][kx][lq][ov][ru][tz]] -- 23*:CU- [[am][by][cn][ds][et][fx][gp][hz][ij][kq][lw][or][uv]] -- 31*:NK- [[am][by][cs][df][en][gz][hl][it][jo][kv][px][qr][uw]] -- 31*:QJ- [[am][by][ck][ds][ej][fl][gn][hu][iz][ox][pt][qv][rw]] -- 31*:ZE- [[am][by][cz][ds][eg][fj][ht][iu][kl][nx][ov][pw][qr]] -- 32*:NZ-Notes:
Using the CatalogAt the end of the Grill procedure, the daily plugboard settings, the position of the right rotor, and the U-substitution value have been obtained—for example: ==== Rotation x = 6 6 0 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] 6 1 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] 6 2 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] 6 3 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] 6 4 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] 6 5 == [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]]
Next, we look up this substitution in the catalog: $ grep am catalog-F_B.txt | grep by | grep ce | grep dh [[am][by][ce][dh][fz][gs][ir][jx][ku][lq][nw][op][tv]] -- 12*:RP- References
|