| |




1. Grundlagen zu kryptographischen
Algorithmen
Eine Methode zur Verschlüsselung und Entschlüsselung
von Daten wird Cipher genannt. Manche kryptographische Methoden
hängen von der Geheimhaltung des Algorithmus ab. Solche Algorithmen
sind nur mehr von historischem Interesse und haben in der heutigen
modernen Welt Bedeutung mehr. Alle modernen Algorithmen verwenden
einen Schlüssel für die Kontrolle der Verschlüsselung
und Entschlüsselung - eine Nachricht kann nur dann wieder entschlüsselt
werden, wenn der angewendete Schlüssel identisch dem bei der
Verschlüsselung verwendeten ist.
Es gibt zwei Klassen von schlüsselbasierten kryptographischen
Algorithmen, einerseits symmetrische (oder secret-key) und andererseits
asymmetrische (oder public-key) Algorithmen. Der Unterschied ist,
dass die symmetrischen Algorithmen den gleichen Schlüssel bei
der Verschlüsselung und Entschlüsselung verwenden, jedoch
asymmetrische Algorithmen unterschiedliche Schlüssel für
die Verschlüsselung und Entschlüsselung verwenden, wobei
der Schlüssel für die Entschlüsselung nicht von dem
bei der Verschlüsselung verwendeten berechnet werden kann.
Symmetrische Algorithmen können in block ciphers und stream
ciphers eingeteilt werden. Stream ciphers verschlüsseln ein
einzelnes Bit der Plaintext Daten auf einmal, dem gegenüber
block cipher verschlüsseln eine ganze Reihe von Bits (typischerweise
128 Bit in modernen Cipher Algorithmen) als eine einzige Einheit.
Symmetrische Algorithmen sind um vieles schneller in der Ausführung
als asymmetrische.
1.1 Begriffserklärungen
1.1.1 S-Boxen
Sind Look-Up-Tabellen die n-bits auf m-bits abbilden, wobei üblicherweise
n und m identisch sind. Es gibt mehrere Möglichkeiten gute
S-Boxen für Cipher zu entwickeln, sowie mehrere Möglichkeiten
diese zu bewerten. Manche Entwickler verwenden einen streng mathematischen
Ansatz mit Bent-Funktionen (oder Verwandte) für die Generierung
von S-Boxen, welche mit Beweis resistent gegen mache Attacken sind.
Andere Entwickler verwenden heuristische Ansätze, welche zu
S-Boxen führen, die schwer(er) in mathematischen Beweisen zu
behandeln sind, jedoch möglicherweise zusätzliche Vorteile
(bsp. unterschiedliche Implementierungsmöglichkeiten) bieten.
S-Boxen sind möglicherweise der einzige nicht lineare Teil
des Ciphers, wie dies in DES der Fall ist. Mache Entwickler halten
die DES S-Boxen für so gut, dass sie in das eigene Design übernommen
werden (beispielsweise Serpent).
1.1.2 Feistel Netzwerke
Ein Feistel Netzwerk ist eine generelle Vorrichtung für die
Konstruktion eines Block Ciphers von einfachen Funktionen. Ursprünglich
stammte die Idee vom Block Cipher Lucifer, entwickelt von Horst
Feistel. Ausgehend davon wurden mehrere Variationen entwickelt.
Einfach gesagt, ein Standard Feistel Netzwerk nutzt eine Funktion
von n-bits zu n-bits und produziert eine invertierbare Funktion
von 2n-bits zu 2n-bits. Die grundlegende Funktion auf der die Struktur
basiert wird oftmals Rundenfunktion (round-function) genannt. Die
essentielle Eigenschaft von Feistel Netzwerken, welche diese so
nützlich im Cipher Design macht, ist dass die Rundenfunktion
nicht notwendiger weise invertierbar sein muss, jedoch die resultierende
Funktion ist es immer.
Wenn die Rundenfunktion auf sagen wir k-bits des Schlüssels
beruht, dann braucht der Feistel Cipher rk-bits des Schlüssels,
wobei r die Anzahl der verwendeten Runden ist.
Die Sicherheit der Feistel Struktur ist nicht offensichtlich, jedoch
die Analyse von DES hat gezeigt, dass es eine gute Möglichkeit
ist Cipher zu konstruieren. Es ist verpflichtend, dass ein Feistel
Cipher genug Runden besitzt, jedoch einfach mehr Runden hinzuzufügen
garantiert einem Cipher nicht automatisch Sicherheit.
1.1.3 Key Scheduling
Die Operation den vom Benutzer gewählten Schlüssel zu
übernehmen und zu rk-Bits für die Feistel Runden zu expandieren,
wird Key-Scheduling genannt. Dies ist oft eine nicht lineare Operation,
so dass wenn man irgendwelche der rk-Bits der round-keys herausfindet
man keine direkte Information über den vom Benutzer aktuell
gewählten Schlüssel erhält.
1.1.4 Expansion, Permutation
Es sind übliche Werkzeuge um bits in den Runden Funktionen
zu mixen. Diese sind lineare Funktionen und sind deshalb nicht ausreichend
um Sicherheit zu garantieren. Wie auch immer, wenn diese mit guten,
nicht linearen S-Boxen (wie in DES) verwendet werden, sind sie bedeutend
für die Sicherheit, da sie die Nichtlinearität über
alle Bits verbreiten.
1.1.5 Stückweise Bitoperationen (bit-slice-operations)
Beinhalten bitweise logische Operationen wie XOR, OR, AND, NOT und
bit Permutationen. Es können alle Block Cipher in stückweise
Bitoperationen umgeschrieben werden. Operationen wie Addition oder
Multiplikation sind sehr langsam, auf der anderen Seite sind Permutationen
sehr schnell. Der AES Finalist Serpent verwendet bei der Implementierung
nur Bitoperationen.
1.1.6 Blockgröße
Die Blockgröße ist ein signifikanter Faktor für die Blockcipher Sicherheit. Manche Attacken auf Blockcipher machen sich das "Geburtstagsparadoxon" (birthday paradox) zunutze um Übereinstimmungen in einer großen Anzahl von Ciphertexten zu finden. Es wird erwartet, dass bei einer 64 Bit Block Größe 2^32 Ciphertext Blöcke gebraucht werden. Das ist eine große Anzahl, aber nicht unpraktikabel.
1.1.7 Padding
Da es sich um Blockverschlüsselungsalgorithmen handelt können
nur ganze Blöcke bearbeitet werden. Wenn nun die Länge
der Quelldatei nicht exakt ein vielfaches der Blockgröße
ist muss der letzte Block aufgefüllt werden. Dazu gibt es unterschiedliche
Verfahren.
zurück zur Übersicht
1.2 Stärke von
kryptographischen Algorithmen
Gute kryptographische Systeme sollen immer so entworfen werden,
dass sie so schwierig wie möglich zu brechen sind. Es ist möglich
Systeme zu entwerfen, die praktisch nicht zu brechen sind, auch
wenn dies nicht bewiesen werden kann. Diese Absicht erhöht
nicht unbedingt den Implementierungsaufwand. Jedoch ist dabei Vorsicht
geboten und es sollte Experten überlassen werden solche sichere
Systeme zu designen.
In der Theorie können alle kryptographischen Algorithmen, die
einen Schlüssel verwenden, gebrochen werden, indem sequentiell
alle möglichen Schlüssel probiert werden. Wenn nun die
brute-force Methode die einzige Möglichkeit ist den richtigen
Schlüssel herauszufinden, dann steigt die benötigte Computerleistung
exponentiell mit der Schlüssellänge. Als Beispiel, ein
System mit 40 bit Schlüssel braucht 2^40 Schritte um gebrochen
zu werden, die auf einem modernen Heimcomputer benötigte Zeit
um diese Attacke durchzuführen beträgt ungefähr 4
Tage (abhängig von der Effizienz des Algorithmus). Schlüssel
mit 64 Bits können durch Regierungen gebrochen werden und sind
in Reichweite von großen Firmen und organisierter Kriminalität.
Schlüssel mit 85 Bits sind in Reichweite von Regierungen. Jedoch
Schlüssel mit 128 Bit, wie bald Standard, sollten gegen brute-force
Attacken für die nächste Zeit resistent sein. Allerdings
werden noch längere Schlüssellängen implementiert,
da eine brute-force Attacke die ineffizienteste Methode ist um Schlüssel
zu brechen. Viele Cipher können gebrochen werden ohne das Ausprobieren
von allen möglichen Schlüsseln. Generell ist es äußerst
schwierig Cipher zu designen, die nicht unter der Verwendung anderer
Methoden effizienter gebrochen werden können. Es werden immer
neue Formen von Attacken gefunden und das Problem für die Sicherheit
dabei ist: Attacken können nur besser werden.
Exkurs: Algebraische Attacken auf Rijndael mit 128 Bit
Im Mai 2001 gelang es Niels Ferguson, Richard Schroeppel und
Doug Whiting, den Rijndael-Algorithmus als ein hoch strukturiertes,
geschlossenes algebraisches System darzustellen.
Der Kryptoexperte Eli Biham erkannte Anfang 2002 weitere mathematische
Eigenschaften von Rijndael und verschärfte damit die Kritik.
Im April des gleichen Jahres schien die Zukunft von AES zunächst
aussichtslos, nachdem Nicolas
Courtois und Josef
Pieprzyk ein von Adi Shamir 2000 entwickeltes Dechiffrier-Verfahren(XL-Methode)
spezialisiert hatten.
Die beiden Mathematiker befassten sich mit den so genannten S-Boxen,
die in einem Algorithmus für die Unvorhersehbarkeit des Ciphertext
zuständig sind. Sie stellten diese S-Boxen in Form großer
Systeme quadratischer Gleichungen nach (gemäß der Methode
von Murphy
und Robshaw). Mit Hilfe einer Vielzahl an überbestimmten
Unbekannten, schwach besetzten Termen und Bihams Entdeckungen
vereinfachten sie einen Angriff auf AES stark.
Diese Methode (XSL)
ist umstritten und es wird bezweifelt ob sie anwendbar ist.
Jedoch verringert XSL, falls es so wäre, den Aufwand zum
Brechen auf knapp 2^100 notwendige Rechenoperationen statt der
erwähnten 2^128. Heutige Supercomputer können 2^70 Möglichkeiten
in brauchbarer Zeit durchforsten. Vorsichtige Schätzungen
besagen, dass Computer 2^100 Möglichkeiten frühestens
um das Jahr 2008 brauchbar durchsuchen.
zurück zur Übersicht
1.3 Symmetrische
Cipher (secret-key Systeme)
Symmetrische Algorithmen verwenden den gleichen Schlüssel
bei der Verschlüsselung und Entschlüsselung. Als Antwort
auf die wachsende Unsicherheit des DES wurde durch die NIST ein
Evaluierungs- und Auswahlprozess für einen neuen Cipher gestartet,
der den Anforderungen des 21.Jahrhunders gerecht werden sollte.
Fünf Algorithmen haben es in die zweite Runde des Auswahlprozesses
geschafft, aus der Rijndael als neuer Advanced Encryption Standard
(AES) hervorging.
Alle fünf Ciphers, die nachfolgend kurz beschrieben sind haben
eine 128 Bit Blockgröße und verwenden Schlüssel
mit 128, 192, 256 Bits. Diese größeren Schlüssellängen
haben es notwendig gemacht sichere und effiziente Hash-Funktionen
zu entwicken.
Rijndael,
AES Kandidat und Finalist, zum AES gewählt.
Entwickelt von zwei Belgischen Kryptologen, Joan Daemen und Vincent
Rijmen. Rijndael folgt der Tradition von square Ciphern und basiert
auf Ideen aus dem Square Cipher. Die NIST gab als Grund für
die Auswahl von Rijndael an, dass Rijndael eine gute Performance
in Hardware und Software über eine weite Palette von Umgebungen
in allen möglichen Betriebsmoden hat. Die Zeit für das
Key-Setup ist hervorragend und der Speicherbedarf ist gering, zusätzlich
sind dessen Operationen leicht gegen power und timing attacken zu
verteidigen.
NIST gab an, dass alle fünf Finalisten adequate Sicherheit
bieten und dass nichts an den anderen vier Finalisten auszusetzen
war. Nachdem alle Analysen und eingesendeten Kommentaren berücksichtigt
wurden, wählte NIST Rijndael als besten Algorithmus zum AES.
Mars,
AES Kandidat und Finalist.
Mars wurde von Zunic et. al., IBM entwickelt. Mars hat ein interessantes
neues Design, durch die Verwendung eines speziellen Typs eines Feistel
Netzwerks, welches stark vom Operationssatz, das auf einem modernen
32 Bit Prozessor (CPU) verfügbar ist, ab. Deshalb ist Mars
effizient auf solchen Maschinen, jedoch könnte es zu Implementierungsschwierigkeiten
auf anderen Architekturen, wie beispielsweise Smart Cards, führen.
RC6,
AES Kandidat und Finalist.
Entwickelt von Ron
Rivest, Robshaw, Sidney, Yin (RSA Laboratories/MIT, USA). RC6
folgt den Ideen von RC5, jedoch mit einigen Verbesserungen. Als
Beispiel, in RC6 wird versucht einige der differential attacks gegen
RC5's datenabhängige Rotationen zu verhindern. Wie auch immer,
es gibt Attacken die ziemlich weit kommen und es ist damit unklar
ob RC6 gut genug analysiert wurde.
Serpent,
AES Kandidat und Finalist.
Entwickelt von Ross
Anderson (Cambridge, UK), Eli
Biham (Technion, Israel), Lars
Knudsen (U. Bergen, Norway). Serpent hat ein konservatives,
jedoch hinsichtlich vieler Wege ein innovatives Design. Das 32 implementierten
Runden bieten wahrscheinlich die höchste Sicherheit gegenüber
allen anderen AES Finalisten, zusätzlich bietet dieses Design
eine ausreichend hohe Geschwindigkeit für alle Zwecke.
Twofish, AES
Kandidat und Finalist.
Entwickelt von Bruce Schneier, Kelsey, Whiting, Wagner, Hall, Ferguson
(Counterpane Systems, USA). Twofish ist ein neuer Block Cipher entwickelt
durch Counterpane Security Systems. Das Design ist kryptographisch
gut analysiert und eröffnet viele Wege der Implementierung.
Twofish basiert auf einem Feistel Cipher und beinhaltet viele unterschiedliche
Ideen. Dieser Cipher hat so wie Blowfish schlüsselabhängige
s-boxen.
Blowfish.
Entwickelt von Bruce Schneier, 1994. Blowfish ist ein Block Cipher
mit einer 64 Bit Block größe und einer variablen Schlüssellänge
(bis zu 448 Bit). Blowfish setzt die Idee von randomisierten s-boxen
um. Im Key-Scheduler werden unter der Verwendung von ein paar Verschlüsselungen
große pseudo-random look-up Tabellen generiert. Diese Tabellen
hängen in einem sehr komplizierten Weg vom Schlüssel des
Benutzers ab. Es wurde bewiesen, dass dieser Ansatz in einem hohen
Ausmaß resistent gegen viele formen von Attacken ist, wie
differentielle und lineare Kryptoanalyse. Unglücklicherweise
heißt das auch, dass dieser Algorithmus nicht auf Umgebungen
mit geringem Speicher implementiert werden kann.
zurück zur Übersicht




2. Verschlüsselungsfunktionen
der ActiveX DLL bei Dateien und Strings
| Algorithmus |
Blockgröße |
Schlüssellänge |
Ciphermode |
Anmerkung |
| Rijndael |
16-32 Byte |
128-256 Bit* |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
Keysetup |
| RC6 |
16 Byte |
128-256 Bit* |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
Keysetup |
| Serpent |
16 Byte |
128-256 Bit* |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
Keysetup |
| Twofish |
16 Byte |
128-256 Bit |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
Keysetup |
| Blowfish |
8 Byte |
8-448 Bit |
ECB,CBC,CFB,OFB,CTR,CCM |
Keysetup |
| XORBlock |
16-52 Byte |
8-2048 Bit |
ECB,CBC,CFB,OFB |
Keysetup |
| XORStream |
- |
8-2048 Bit |
(stream) |
Keysetup |
Tabelle 1: Implementierte Algorithmen
* genauere Informationen zur Schlüssellänge auf Anfrage.
zurück zur Übersicht




3. Blockcipher Mode
Block Cipher transformieren eine fixe Blocklänge von Daten
in eine andere fixe Blocklänge unter der Verwendung einer Funktion
gesteuert durch einen vom Benutzer eingegebenen Schlüssel.
Der n-Bit Input-Block an Daten wird durch eins-zu-eins Transformation
von n-Bit Integers auf eine Permutation von n-Bit Integers auf einen
n-Bit Output-Block abgebildet. Wie der Cipher auf diese Blocke angewendet
wird definieren die Blockcipher Betriebsmode. Im einfachsten Fall
wird so wie im ECB-Mode jeder Block ohne Zusatzfunktion (Whitening)
unabhängig verschlüsselt. Dies hat den großen Nachteil,
dass wenn der gleiche Block an Daten zweimal mit dem gleichen Schlüssel
chiffriert wird, auch zweimal der gleiche Outputblock generiert
wird. Dies wäre eine äußerst nützliche Information
für den Angreifer eines Ciphers, deshalb wurden noch andere
unterschiedlich sichere Mode entwickelt.
ECB - Electronic Codebook
Behandelt jeden Block unabhängig.
Versteckt keine Muster oder Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block
Beschränktes Anwendungsgebiet
CBC - Cipher Block Chaining
Ciphertext hängt von allen vorangegangenen Quelltextblöcken
ab
Versteckt Muster und Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block, kopiert in den nächsten
Standard Modus für Blockcipher vor dem AES Auswahlverfahren
OFB - Output Feed Back
Synchroner Stream Cipher
Keine Verbindung zwischen nachfolgenden Blöcken
Keine Fehlerfortpflanzung
CFB - Cyphertext Feed Back
Selbstsynchronisierender Stream Cipher
Ciphertext hängt von allen vorangegangenen Quelltextblöcken
ab
Fehlerfortpflanzung: Kopiert und ausgebreitet über einen
Block
CTR
- Counter Mode
Behandelt jeden Block unabhängig
Versteckt Muster und Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block
Modus bietet Random Access Möglichkeit
Sicherheit vergleichbar mit CBC-Mode
CCM
- Counter Mode with CBC-MAC
Behandelt jeden Block unabhängig
Versteckt Muster und Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block
Modus bietet Random Access Möglichkeit
Modus inkludiert effiziente authentifizierte Verschlüsselung
Sicherheit vergleichbar mit OCB-Mode
Neuer, für AES entwickelter Standard Modus
OCB
- Offset Code Book
Entwickelt von Phillip
Rogaway, Mihir
Bellare, John
Black, Ted
Krovetz
Behandelt jeden Block unabhängig
Versteckt Muster und Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block
Modus inkludiert effiziente authentifiziete Verschlüsselung
Sicherster Mode: Bricht man dieses Verfahren so hat man den Algorithmus
gebrochen
Neuer, für AES entwickelter Modus, allerdings patentiert,
frei für Freeware
COA - Counter with Offsetcode Authenticated Encryption Mode
Behandelt jeden Block unabhängig
Versteckt Muster und Quelltextwiederholungen
Fehlerfortpflanzung: 1 Block
Modus bietet Random Access Möglichkeit
Modus inkludiert effiziente authentifizierte Verschlüsselung
Sicherheit konform mit OCB-Mode
Tweakable Mode
Neuer, für AES entwickelter Modus
zurück zur Übersicht




4. Das KeySetup Feature
KeySetup ist ein Verfahren das die Schlüsselsicherheit maximiert,
selbst wenn man kurze Passwörter eingibt. Die Länge des
Passworts kann bei Anwendung der Keysetup Funktion über die
gewählte Schlüssellänge hinausgehen. Das bedeutet
man kann beliebig lange Passwörter eingeben. Es sollte jedoch
dennoch vermieden werden, dass die Passwortlänge zu kurz gewählt
wird.
Durch die KeySetup Funktion wird ein Angriff auf den Algorithmus
selbst nicht praktisch durchführbar. Bei ausgeschaltetem Keysetup
wird das ausgewählte Passwort direkt dem Cipher Algorithmus
übergeben.
zurück zur Übersicht




5. Selbstauthentifizierung
von verschlüsselten Dateien und Strings
Jede mit der ActiveX DLL verschlüsselte Datei enthält
zusätzlich diese Informationen:
- Name des Computersystems
- Name des eingeloggten Benutzers
- Datum und Uhrzeit der Verschlüsselung der Datei
Strings, die im extended Mode der String Funktion verschlüsselt
wurden enthalten zusätzlich diese Information:
- Datum und Uhrzeit der Verschlüsselung des Strings
Dies dient der Authentifizierung der verschlüsselten Datei,
sowie des Strings.
zurück zur Übersicht




6. Einstellmöglichkeiten
bei der Auswahl eines Algorithmus
6.1 Funktionen und
Parameter
Die folgenden Funktionsdarstellungen sollen repräsentativ
für alle implementieren AES Kandidaten anhand dieser Funktionen
dargestellt werden:
6.1.1 Stringfunktionen und deren Parameter
| Funktionsname |
EncryptString |
DecryptString |
| Returntype |
BSTR |
BSTR |
| 1. Parameter (DT) |
StringToEncrypt (BSTR) |
StringToDecrypt (BSTR) |
| 2. Parameter (DT) |
Key (BSTR) |
Key (BSTR) |
| 3. Parameter (DT) |
KeySize (short) |
KeySize (short) |
| 4. Parameter (DT) |
HexKey (boolean) |
HexKey (boolean) |
| 5. Parameter (DT) |
UseKeySetup (boolean) |
UseKeySetup (boolean) |
| 6. Parameter (DT) |
BlockSize (Blocksize) |
BlockSize (Blocksize) |
| 7. Parameter (DT) |
Padding (PaddingType) |
Padding (PaddingType) |
| 8. Parameter (DT) |
Mode (CipherModeAES) |
Mode (CipherModeAES) |
| 9. Parameter (DT) |
InputDataType (DataTypeA) |
InputDataType (DataTypeA) |
| 10. Parameter (DT) |
OutputDataType (DataType) |
OutputDataType (DataType) |
6.1.2 Extended Stringfunktionen und deren Parameter
| Funktionsname |
EncryptStringEx |
DecryptStringEx |
| Returntype |
BSTR |
BSTR |
| 1. Parameter (DT) |
StringToEncrypt (BSTR) |
StringToDecrypt (BSTR) |
| 2. Parameter (DT) |
Key (BSTR) |
Key (BSTR) |
| 3. Parameter (DT) |
KeySize (short) |
KeySize (short) |
| 4. Parameter (DT) |
HexKey (boolean) |
HexKey (boolean) |
| 5. Parameter (DT) |
UseKeySetup (boolean) |
UseKeySetup (boolean) |
| 6. Parameter (DT) |
BlockSize (Blocksize) |
BlockSize (Blocksize) |
| 7. Parameter (DT) |
Padding (PaddingType) |
Padding (PaddingType) |
| 8. Parameter (DT) |
Mode (CipherModeAES) |
Mode (CipherModeAES) |
| 9. Parameter (DT) |
InputDataType (DataTypeA) |
InputDataType (DataTypeEx) |
| 10. Parameter (DT) |
OutputDataType (DataTypeEx) |
OutputDataType (DataType) |
| 11. Parameter (DT) |
OutputLineLength (short) |
InputRemoveLines (boolean) |
6.1.3 Dateifunktionen und deren Parameter
| Funktionsname |
EncryptFile |
DecryptFile |
| Returntype |
short |
short |
| 1. Parameter (DT) |
InputFile (BSTR) |
InputFile (BSTR) |
| 2. Parameter (DT) |
OutputFile (BSTR) |
OutputFile (BSTR) |
| 3. Parameter (DT) |
Key (BSTR) |
Key (BSTR) |
| 4. Parameter (DT) |
KeySize (short) |
KeySize (short) |
| 5. Parameter (DT) |
HexKey (boolean) |
HexKey (boolean) |
| 6. Parameter (DT) |
UseKeySetup (boolean) |
UseKeySetup (boolean) |
| 7. Parameter (DT) |
BlockSize (Blocksize) |
BlockSize (Blocksize) |
| 8. Parameter (DT) |
Padding (PaddingType) |
Padding (PaddingType) |
| 9. Parameter (DT) |
Mode (CipherModeAES) |
Mode (CipherModeAES) |
| 10. Parameter (DT) |
CompressFirst (boolean) |
|
zurück zur Übersicht
6.2 Für alle Algorithmen
gültiges
| Padding: |
ZEROES, PKCS7, BLANKS |
|
|
| Compressfirst: |
Bei der Anwendung auf eine Datei kann diese Auswahl
getroffen werden. Dies bedeutet, dass diese Datei vor der Verschlüsselung
komprimiert wird, um Speicherplatz zu sparen. |
|
|
| HexKey: |
Passwort kann dem Algorithmus bzw. der KeySetup
Funktion im Hex Format übergeben werden. Da man im Hex
Format die Möglichkeit hat den gesamten ASCII Code einzugeben
kann bei idealer Wahl des Hex Passwortes eine Schlüsselsicherheit
erreichen, die jener der KeySetup Funktion entspricht. Der Ascii
Code enthält Zeichen die nicht im Textfeld darstellbar
sind. |
|
|
| UseKeySetup: |
Bei diesem Parameter kann angegeben werden das
KeySetup verwenden soll oder ob das gewählte Passwort direkt
an den Algorithmus weitergegeben werden soll. |
|
|
| InputDataType: |
Bei der Verschlüsselung von Strings können
die Daten als Plaintext, Hex-Codiert oder als Base64 String
(decryption) übergeben werden. |
|
|
| OutputDataType: |
Durch diesen Parameter kann bei der Verschlüsselung
von Strings veranlasst werden den verschlüsselten String
als Plaintext, Hex-Codiert oder als Base64 String zurückzuliefern.
In der Extended String Funktion kann man zwischen einem hexcodierten
oder Base64 Codierten String als Rückgabeform wählen. |
|
|
| OutputLineLength: |
Die Extended String Funktion bietet bei der Verschlüsselung
die Möglichkeit den zurück gelieferten Hex-Codierten
oder Base64 String zeilenweise zu formatieren. Dies erleichtert
die Weiterverarbeitung. |
|
|
| InputRemoveLines: |
Die Extended String Funktion bietet bei der Entschlüsselung
die Möglichkeit die zeilenweise Formatierung des übergebenen
Hex-Codierten oder Base64 Strings wieder zu entfernen. |
zurück zur Übersicht
6.3 Algorithmen spezifisches
| Rijndael: |
|
| Einwickelt von: |
Joan Daemen, Vincent
Rijmen (Banksys/Katholieke Universiteit Leuven, Belgium)
|
| Beschreibung: |
Für AES wurde Rijndael als ein 10 bis 14-Runden
iterativer Cipher definiert. Die Rundentransformation in Rijndael hat nicht die Feistel Struktur. Statt dessen setzt sich die Rundentransformation aus drei eindeutig invertierbaren Transformationen (Layer der linearen Vertauschungen, nicht-linearer Layer und Schlüssel Additionslayer) zusammen. Dies soll die Resistenz gegen lineare und differentielle Kryptoanalyse erhöhen. Jede Runde wendet vier Funktionen an:
• Byte Substitution mit S-Box Werte: Nichtliniarität
• Reihen Verschiebung: Inter-Spalten-Diffusion
• Spalten Vertauschung: Inter-Byte-Diffusion mit Spalten
• Hinzufügen des Rundenschlüssels
Zusätzlich wird eine anfängliche und abschließende Schlüssel
Addition angewendet. Rijndael wurde aus dem SQUARE cipher entwickelt. |
| Cipher Mode: |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
| Blocksize: |
16, 24 und 32 Byte |
| KeySize: |
16, 24, 32 Byte (entspricht 128 bis 256 Bit)* |
| Homepage: |
http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ |
| Serpent: |
|
| Entwickelt von: |
Ross
Anderson (Cambridge, UK), Eli
Biham (Technion, Israel), Lars
Knudsen (U. Bergen, Norway) |
| Beschreibung: |
Serpent ist ein 32-Runden Feistel Cipher, wobei
in jeder Runde der Schlüssel Mithilfe von XOR und Rotationen
vermixt, weiters 8 schlüsselabhängige 4-bit S-Boxen
substituiert, und eine lineare Transformation angewendet wird.
Ursprünglich stammt Serpent (Serpent-0) von DES ab. Das Design wurde danach überarbeitet um den Algorithmus zu stärken und um die Leistungsfähigkeit zu erhöhen. Es wurden stärkere S-Boxen implementiert, sowie die Key-Schedule wurde leicht verändert. Damit sollte die Resistenz gegen lineare und differentielle Kryptoanalyse erhöhen werden. Serpent verwendet stückweise Bitoperationen (bitslice operations) für die effiziente Blockverschlüsselung.
Serpent verschlüsselt 128 Bit Blöcke in 32 Runden unter der Verwendung von 33 128 Bit Subschlüssel, wobei die Schlüssellänge für den Benutzer variabel ist (im AES Auswahlverfahren fixiert zu 128, 192 und 256 Bit). Kurze Schlüssellängen werden im Key-Scheduler auf 256 Bit aufgestockt. Serpent verwendet am Anfang und Ende der Verschlüsselungsoperation eine Permutationsfunktion (Whitening). |
| Cipher Mode: |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
| Blocksize: |
16 Byte |
| KeySize: |
16, 24, 32 Byte (entspricht 128 bis 256 Bit)* |
| Homepage: |
http://www.cl.cam.ac.uk/~rja14/serpent.html |
| Twofish: |
|
| Entwickelt von: |
Bruce Schneier, Kelsey, Whiting, Wagner, Hall,
Ferguson (Counterpane Systems, USA) |
| Beschreibung: |
Twofish ist ein 16-Runden Feistel Cipher mit zusätzlichen Whitening des Dateninputs und Outputs. Whitening bezeichnet das XORing des Schlüsselmaterials vor der ersten Runde und nach der letzten Runde und erhöht substanziell die Sicherheit vor Attacken durch Schlüsselsuche im Algorithmus. Twofish verwendet in den einzelnen Runden Rotationen und 4
schlüsselabhängige 8-bit S-boxen, gefolgt von einem linearen Vertauschungsfunktion basierend auf einer Maximum Distance Separable (MDS) Matrix, kombiniert durch die Pseudo-Hadamard Transformation unter hinzufügen von zwei Schlüsselwörtern. Resultate der Funktion werden mit XOR verknüpft.
Ein Teil von Twofish basiert auf Blowfish. |
| Cipher Mode: |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
| Blocksize: |
16 Byte |
| KeySize: |
16, 24 und 32 Byte (entspricht 128 bis 256 Bit) |
| Homepage: |
http://www.schneier.com/twofish.html |
| RC6: |
|
| Entwickelt von: |
Ron
Rivest, Robshaw, Sidney, Yin (RSA Labs/MIT, USA) |
| Beschreibung: |
Für AES wurde RC6 als ein 20-Runden (encryption
Depth 3) iterativer Cipher definiert, ist eine Weiterentwickelung
von RC5 (und voll parametrisiert), der sechs grundlegende 32-bit
Operationen verwendet um die Daten in
jeder Runde zu mixen. Diese Operationen sind Addition, Subtraktion, bitweises XOR, Integer Multiplikationen sowie links und rechts Rotationen von 32 Bit Wörtern. |
| Cipher Mode: |
ECB,CBC,CFB,OFB,CTR,CCM,OCB,COA |
| Blocksize: |
16 Byte |
| KeySize: |
Stufenlos von 1-32 Byte (entspricht 8 bis 256
Bit)* |
| Depth: |
Gibt die Verschlüsselungstiefe an. Für AES wurde
eine Tiefe von 3 definiert, dies entspricht 20 Verschlüsselungsrunden.
Die Tiefe kann stufenlos von 1 bis 200 verstellt werden. |
| Homepage: |
http://www.rsasecurity.com/rsalabs/rc6/ |
| Blowfish: |
|
| Entwickelt von: |
Bruce Schneier, 1994 |
| Beschreibung: |
Ein 64 bit Block, 16 Runden Feistel Blockcipher mit
einer variablen Schlüssellänge. Dieser ist optimiert
für Datenverschlüsselung bei der es keines Schlüsselwechsels
bedarf, da der Schlüsselwechsel langsam ist. Blowfish verwendet
vier sehr große 8* 32 bit Zufallssubstitutionstabellen
die aus dem gewählen Schlüssel generiert werden. Jede Runde besteht aus einer schlüsselabhängigen Permutation und einer schlüssel- und datenabhängigen Substitution. Der Output wird durch Additionen und XOR Operationen verarbeitet. Blowfish verwendet eine große Anzahl von Subschlüsseln (4168 Bytes)
In Blowfish können Schlüssel zur Generierung von schwachen S-Boxen führen, dies kann in einer reduzierten Runden Version zu Attacken führen. Jedoch ist diese Attacke komplett ineffizient in der definierten 16 Runden Version. Dadurch sind bislang keine erfolgreichen Attacken auf Blowfish bekannt. |
| Cipher Mode: |
ECB,CBC,CFB,OFB,CTR,CCM |
| Blocksize: |
8 Byte |
| KeySize: |
Aktuelle Passwortlänge bis maximal 448 Bit. |
| Homepage: |
http://www.schneier.com/blowfish.html |
| XORBlock: |
|
| Cipher Mode: |
ECB,CBC,CFB,OFB |
| Blocksize: |
Stufenlos von 1 bis 256 Byte |
| KeySize: |
Aktuelle Passwortlänge bis maximal 2048 Bit. |
| ExternalRounds: |
Stufenlos 1 bis zu beliebig vielen Runden |
| InternalRounds: |
Stufenlos 1 bis zu beliebig vielen Runden |
| XORStream: |
|
| Cipher Mode: |
Cipher Mode nur bei Blockcipher. |
| KeySize: |
Aktuelle Passwortlänge bis maximal 2048 Bit. |
| InternalRounds: |
Stufenlos 1 bis zu beliebig vielen Runden |
zurück zur Übersicht
|