MC Projects Security Projects
über MCProjects Forschung Webdesign Links Deutsch ausgewählt switch to English

 

Kryptographie Algorithmen      

Es wurden hoch sichere Kryptographie Algorithmen ausgewählt und in einer MFC ActiveX Library zusammengefasst. Die einzelnen Funktionen können auf Dateien und Strings angewendet werden. Es wurden folgende Verschlüsselungsalgorithmen implementiert: Rijndael, Serpent, Twofish, RC6, Blowfish und spezielle XOR Algorithmen. Ziel dieses Projekts war es auch, außer der Implementierung von verschienen starken Algorithmen, die in naher Zukunft entweder als kryptographische Standards gelten werden, oder als alternative dazu verwendet werden können, auch eine Vielzahl von Betriebsmode für die Verschlüsselung der Daten bereitzustellen. So können mit diesen Algorithmen folgende Moden verwendet werden: ECB (Electronic Codebook), CBC (Cipher Block Chaining), OFB (Output Feed Back), CFB (Cyphertext Feed Back), CTR (Counter Mode), CCM (Counter Mode with CBC-MAC) und für die implementierten AES Kandidaten auch der OCB (Offset Code Book) Mode und der COA (Counter with Offsetcode Authenticated Encryption) Mode.
Da eine ActiveX-DLL eine COM-Komponente ist, kann diese über die OLE-Automation in vielen Programmiersprachen eingebunden werden, wie in Visual Basic (VB), Visual C++ (VC) oder Delphi.


1. Grundlagen zu kryptographischen Algorithmen

1.1 Begriffserklärungen
1
.2 Stärke von kryptographischen Algorithmen
1.3 Symmetrische Cipher (secret-key Systeme)

2. Verschlüsselungsfunktionen der ActiveX DLL bei Dateien und Strings

3. Blockcipher Mode

4. Das KeySetup Feature

5. Selbstauthentifizierung von verschlüsselten Dateien und Strings

6. Einstellmöglichkeiten bei der Auswahl eines Algorithmus

6.1 Funktionen und Parameter
6
.2 Für alle Algorithmen gültiges
6.3 Algorithmen spezifisches

 

 

 

   
 





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

 

   

 

 


[ Über MCProjects ] [ Forschung ] [ Webdesign ] [ Links ]

 
Copyright © 1999-2004 Unterleitner.info. All Rights Reserved.
Markus C. Unterleitner