© saicle/Shutterstock.com
PHP Magazin
Variationen der Caesar-Verschlüsselung, implementiert mit JavaScript

Der passende Schlüssel zur Verschlüsselung

Wir sind weiter auf der Suche nach einer „unknackbaren“ Verschlüsselungsmethode. Im letzten Teil haben wir die Caesar-Verschlüsselung vorgestellt, die auf der Basis zweier gegeneinander rotierter Alphabete arbeitet. Wir haben dann eine sehr einfache klassische Chiffriermaschine, die Chiffrierscheibe, mit JavaScript implementiert und festgestellt, dass das Verfahren auch ohne maschinelle Unterstützung mit wenig Aufwand durch einfaches Durchprobieren geknackt werden kann und daher hochgradig unsicher ist. In der Folge soll es nun darum gehen, die Ursache dieser Unsicherheit zu ermitteln und das Verfahren sicherer zu machen.

Wolfgang Schmidt


ArtikelserieTeil 1: GrundlagenTeil 2: Variationen der Caesar-VerschlüsselungTeil 3: Die Enigma – Geschichte und TechnikTeil 4: Die Enigma – Implementierung

Warum ist die Caesar-Verschlüsselung so unsicher? Der Hauptgrund ist, dass die verschiedenen Geheimtextalphabete durch Rotation des normalen Alphabets gebildet werden. Das bewirkt, dass nur 25 mögliche Geheimalphabete existieren, sodass der Schlüsselraum sehr klein ist. Wie bereits im letzten Teil beschrieben, beträgt die Schlüssellänge lediglich 5 Bit, das ist sehr wenig.

Monoalphabetische Verschlüsselung oder warum Schlüssellänge nicht alles ist

Das Verfahren könnte sicherer gemacht werden, wenn nicht nur die Verschiebung, sondern auch das Geheimtextalphabet variiert werden könnte. Als Geheimtextalphabet könnte etwa "YUFBCDHEGIPKZLMANOQSTVJWRX" verwendet werden. Wir können unsere Implementierung der Chiffrierscheibe mit zwei Zeilen Code so anpassen, dass dieses Alphabet verwendet wird. Dazu definieren wir einfach eine Zeichenkette für das Geheimalphabet: let ciphered = "YUFBCDHEGIPKZLMANOQSTVJWRX";. Wir greifen bei der Erstellung des CharDiv-Elements für den Geheimbuchstaben statt auf das Ursprungsalphabet auf das Geheimalphabet in ciphered zu:

Listing 1class CharRings extends React.Component { render() { let {theKey,} = this.props; let charDivs = []; let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; let ciphered = "YUFBCDHEGIPKZLMANOQSTVJWRX"; for (let i = 0; i );  let r2 = 140; let cipheredX = 200 - (Math.cos(radian) * r2) - 8; let cipheredY = 240 - (Math.sin(radian) * r2) - 8; charDivs.push( ); } ...

Abbildung 1 zeigt die angepasste Chiffrierscheibe; die beiden Alphabete sind in de...

PHP Magazin
Variationen der Caesar-Verschlüsselung, implementiert mit JavaScript

Der passende Schlüssel zur Verschlüsselung

Wir sind weiter auf der Suche nach einer „unknackbaren“ Verschlüsselungsmethode. Im letzten Teil haben wir die Caesar-Verschlüsselung vorgestellt, die auf der Basis zweier gegeneinander rotierter Alphabete arbeitet. Wir haben dann eine sehr einfache klassische Chiffriermaschine, die Chiffrierscheibe, mit JavaScript implementiert und festgestellt, dass das Verfahren auch ohne maschinelle Unterstützung mit wenig Aufwand durch einfaches Durchprobieren geknackt werden kann und daher hochgradig unsicher ist. In der Folge soll es nun darum gehen, die Ursache dieser Unsicherheit zu ermitteln und das Verfahren sicherer zu machen.

Wolfgang Schmidt


ArtikelserieTeil 1: GrundlagenTeil 2: Variationen der Caesar-VerschlüsselungTeil 3: Die Enigma – Geschichte und TechnikTeil 4: Die Enigma – Implementierung

Warum ist die Caesar-Verschlüsselung so unsicher? Der Hauptgrund ist, dass die verschiedenen Geheimtextalphabete durch Rotation des normalen Alphabets gebildet werden. Das bewirkt, dass nur 25 mögliche Geheimalphabete existieren, sodass der Schlüsselraum sehr klein ist. Wie bereits im letzten Teil beschrieben, beträgt die Schlüssellänge lediglich 5 Bit, das ist sehr wenig.

Monoalphabetische Verschlüsselung oder warum Schlüssellänge nicht alles ist

Das Verfahren könnte sicherer gemacht werden, wenn nicht nur die Verschiebung, sondern auch das Geheimtextalphabet variiert werden könnte. Als Geheimtextalphabet könnte etwa "YUFBCDHEGIPKZLMANOQSTVJWRX" verwendet werden. Wir können unsere Implementierung der Chiffrierscheibe mit zwei Zeilen Code so anpassen, dass dieses Alphabet verwendet wird. Dazu definieren wir einfach eine Zeichenkette für das Geheimalphabet: let ciphered = "YUFBCDHEGIPKZLMANOQSTVJWRX";. Wir greifen bei der Erstellung des CharDiv-Elements für den Geheimbuchstaben statt auf das Ursprungsalphabet auf das Geheimalphabet in ciphered zu:

Listing 1class CharRings extends React.Component { render() { let {theKey,} = this.props; let charDivs = []; let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; let ciphered = "YUFBCDHEGIPKZLMANOQSTVJWRX"; for (let i = 0; i );  let r2 = 140; let cipheredX = 200 - (Math.cos(radian) * r2) - 8; let cipheredY = 240 - (Math.sin(radian) * r2) - 8; charDivs.push( ); } ...

Abbildung 1 zeigt die angepasste Chiffrierscheibe; die beiden Alphabete sind in de...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang