Kliger

Im Jahr 1980 veröffentlichte der Kryptologe Frank Rubin ein mathematisches Verschlüsselungsverfahren, das von Albert Kliger stammt und ihm zugesandt worden war. Die exakte mathematische Zahlentheorie soll nicht im Detail formuliert, sondern nur der zentrale Begriff Primitivwurzel verständlich erklärt werden, soweit es für das Verständnis des Verfahrens erforderlich ist. Zusätzlich wird eine weitere Einschränkung vorgenommen, da für das Verfahren nur Primzahlen betrachtet werden.

Sei p eine Primzahl. Dann heißt mPrimitivwurzel modulo p genau dann, wenn

{ mx | x = 1,2, … p-1 }  =  { 1,2, … p-1 }

Die zentrale Eigenschaft einer Primitivwurzel m modulo p ist also, dass jedes Element der Menge { 1,2,...,p-1 } als Potenz der Primitivwurzel dargestellt werden kann. Ist m eine Primitivwurzel modulo p, so bezeichnet man für die Zahlen x ∈ { 1,2,..., p-1 } die eindeutige Lösung der Gleichung c=mx mod p mit x=logmc als diskreten Logarithmus.

Um festzustellen, ob etwa m = 5 eine Primitivwurzel von p = 7 ist, muss man nacheinander die Potenzen 5x mod 7 für alle Exponenten { 1,2,3,4,5,6 } berechnen.

51 = 50 · 5 ≡ 1 · 5 ≡ 5  ≡ 5
52 = 51 · 5 ≡ 5 · 5 ≡ 25 ≡ 4
53 = 52 · 5 ≡ 4 · 5 ≡ 20 ≡ 6
54 = 53 · 5 ≡ 6 · 5 ≡ 30 ≡ 2
55 = 54 · 5 ≡ 2 · 5 ≡ 10 ≡ 3
56 = 55 · 5 ≡ 3 · 5 ≡ 15 ≡ 1

Da alle Zahlen 1,2,...,p-1 als Ergebnis auftreten, ist 5 eine Primitivwurzeln modulo 7. Ab dem Exponenten 7 wiederholen sich alle Ergebnisse, was an dem letzten Ergebnis 5^61 zu erkennen ist.

Die Zahl m = 4 ist dagegen keine Primitivwurzel modulo 7, da nur drei unterschiedliche Ergebnisse auftreten.

41 = 40 · 4 ≡ 1 · 4 ≡ 4  ≡ 4
42 = 41 · 4 ≡ 4 · 4 ≡ 16 ≡ 2
43 = 42 · 4 ≡ 2 · 4 ≡ 8  ≡ 1

Untersucht man für p = 7 alle Zahlen 1 ≤ m ≤ 6, erhält man

m1m2m3m4m5m6o(x)
1
2413
3264516
4213
5462316
612

Diese Tabelle zeigt, dass die Ordnung o(x), also die Anzahl der unterschiedlichen Ergebnisse, für 3 und 5 gleich p-1 = 6 ist. Daher sind nur diese beiden Zahlen Primitivwurzeln modulo 7.

Es lässt sich beweisen, dass für jede Primzahl p eine Primitivwurzel modulo p existiert. Die nachfolgende Tabelle zeigt die Primitivwurzeln bis 23.

mPrimitivwurzeln modulo m
21
3 2
5 2 3
7 3 5
112 6 7 8
132 6 7 11
172 3 5 6 7 10 11 12 14
192 3 10 13 14 15
235 7 10 11 14 15 17 19 20 21

Das Verschlüsselungsverfahren von Kliger benutzt Primitivwurzeln für die Codierung der Buchstaben. Da mindestens 26 unterschiedliche Ergebnisse für die Zuordnung zu den Buchstaben auftreten müssen, sind erst Primzahlen ab 29 für die Verschlüsselung geeignet.

m1m2m3m4m5m6m7m8m9m10m11m12m13m14m15m16m17m18m19m20m21m22m23m24m25m26m27m28o(x)
2481636122419918714282725211326231751020112215128
3927231141272151516192826202618251722824141310128
416624972825132352022114
525916222328244201376114
671320424282322169255114
7202423162517202423162517
8619727131720154324182821231022216129142526511128
923475162820625222413114
1013142482217251862202628191615521712411232793128
1152625149121622210232128182434152017132771968128
12281714
132422256202816574239114
1422182019512233138252281571191024176261621427128
1522112010517232613212527281471891924126316842128
1624725232017
17281214
1853251591716272219238281124264142012132710621128
1913152421221225116272032810161458717418232926128
2023257241617
2161072131220144262411288231922271617915253518128
222052313252879246164114
2371620252417
2425201672317
2516232420717
2692231841778514161028320276112512222124151319128
2742116266172410911715282258133231251920182214128
2812

Die Berechnung der Potenzen zeigt, dass für p = 29 insgesamt zwölf Primitivwurzeln existieren. Die Tabelle gibt für die ersten zehn Primzahlen, die größer als 26 und damit für die Verschlüsselung geeignet sind, die Primitivwurzeln an.

mPrimitivwurzeln modulo m
292 3 8 10 11 14 15 18 19 21 26 27
313 11 12 13 17 21 22 24
3732 2 35 5 13 15 17 18 19 20 22 24
416 7 11 12 13 15 17 19 22 24 26 28 29 30 34 35
4333 34 3 5 12 18 19 20 26 28 29 30
475 10 11 13 15 19 20 22 23 26 29 30 31 33 35 38 39 40 41 43 44 45
532 3 5 8 12 14 18 19 20 21 22 26 27 31 32 33 34 35 39 41 45 48 50 51
592 6 8 10 11 13 14 18 23 24 30 31 32 33 34 37 38 39 40 42 43 44 47 50 52 54 55 56
612 6 7 10 17 18 26 30 31 35 43 44 51 54 55 59
672 7 11 12 13 18 20 28 31 32 34 41 44 46 48 50 51 57 61 63

Da sich jede Primzahl mit einer zugehörigen Primitivwurzel als Schlüssel für das Verfahren benutzen lässt, ergibt sich theoretisch eine unendliche Anzahl von Schlüsseln. Sollen aber die Klartextbuchstaben durch zweistellige Zifferncodes verschlüsselt werden, eignen sich nur die Primzahlen bis 100.

Im dargestellten Beispiel werden die kleinste geeignete Primzahl p = 29 und die Primitivwurzel m = 11 für die Verschlüsselung gewählt.

Klartext Dies ist ein geheimer Text
Schlüssel 29 11

Unabhängig von den gewählten Schlüsseln werden den Buchstaben zunächst die Zahlen von 1 bis 26 zugeordnet.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567891011121314151617181920212223242526

Danach wird der Klartext durch die festgelegten Zahlencodes umgeformt.

DIESISTEINGEHEIMERTEXT
4951991920591475859135182052420

Die endgültige Verschlüsselung erfolgt über den diskreten Logarithmus, also den Exponenten der Potenz m^x, bei dem der den Buchstaben zugeordnete Zahlencode auftritt. Für p = 29 und m = 11 ergeben sich die Potenzen in der Tabelle. Natürlich treten bei den Potenzen auch Zahlen größer als 26 als Ergebnis auf. Da diese aber nicht als Zahlencodes der Buchstaben auftreten, spielen sie keine Rolle bei der Bestimmung der Geheimtextcodes.

12345678910111213141516171819202122232425262728
11526251491216222102321281824341520171327719681

Der erste Klartextbuchstabe D besitzt den Zahlencode 4, der als Ergebnis der Potenz 1118 auftritt. Damit ist 18 der zugehörige Geheimtextcode. Der zweite Buchstabe I mit dem Zahlencode 9 tritt als Ergebnis der Potenz 116 auf. Da alle Codes zweistellig sein müssen, lautet dieser 06. Verfährt man so mit allen Buchstaben des Klartextes, ergibt sich der Geheimtext.

DIESISTEINGEHEIMERTEXT
4951991920591475859135182052420
18060225062520020605240227020622021520021620

Da der Klartext für Primzahlen kleiner als 100 mit zweistelligen Zahlen verschlüsselt wird, liegt es nahe, für den Geheimtext alle Zahlen { 01,02,...,99 } zu verwenden. Dies ist ohne Probleme möglich, da sich bei Primitivwurzeln die auftretenden Ergebnisse periodisch wiederholen. Für p = 29 bedeutet dies, dass für den diskreten Logarithmus der Geheimtextcode unter drei bis vier Codes beliebig gewählt werden kann. Die Differenz der zueinander gehörenden Codes ist immer ein Vielfaches von p-1. In diesem Beispiel betragen die Unterschiede jeweils 28 und die Verschlüsselung wird damit homophon.

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

Der Geheimtext kann damit auch mit einer anderen Zahlenfolge verschlüsselt werden.

DIESISTEINGEHEIMERTEXT
4951991920591475859135182052420
74900281905376860605248627300622024376584420

Entschlüsselung

Für die Entschlüsselung geht man genau umgekehrt vor, wie an einem Beispiel für p = 31 und m = 21 dargestellt wird.

Geheimtext 42284 08603 90340 02898 02404 87028 79406 48200 1782
Schlüssel 31 21

Im ersten Schritt müssen für die Primitivwurzel m = 21 die 30 unterschiedlichen Ergebnisse der Potenzen mx bestimmt werden.

123456789101112131415161718192021222324252627282930
217231862111415512422283010248132529201716261927931

Der Geheimtext wird zunächst in Gruppen von jeweils zwei Ziffern unterteilt und wegen p=31 auf die Basiszahlen { 1,2,...,30 } reduziert. Dazu muss man von den gegebenen Geheimtextzahlen nur solange p-1 = 30 subtrahieren, bis man zu einer Basiszahl gelangt.

Über den diskreten Logarithmus dieser Zahl gelangt man dann zu den zugeordneten Buchstaben.

42284086039034002898024048702879406482001782
122810263304102882101810281910422101722
4951923118591475859135182052420
DIESWAREINGEHEIMERTEXT

Damit lautet der entschlüsselte Klartext

KlartextDies war ein geheimer Text