Advanced Encryption Standard AES - Rijndael - Assembler optimiert
Zum Code
In diesem Projekt habe ich meine eigene Implementierung von AES (Rijndael) verwirklicht. AES ist der Nachfolger vom alten Verschlüsselungsstandard DES (bzw. später Triple-DES). Wer mehr über AES erfahren möchte, kann sich bei Wikipedia informieren: http://de.wikipedia.org/wiki/AES

Die korrekte Ausführung des Algorithmus wird mittels einem einfachem Testmodul überprüft. Dennoch kann ich keine Fehlerlosigkeit garantieren, korrigiere aber gerne jeden Fehler den jemand findet. Für eine weitergehende sicherheitsrelevante Anwendung ist die Implementierung nicht ausreichend abgeschirmt, da weder Variablen gelöscht werden noch sonstige Daten abgeschirmt sind. Zusätzlich zum Testmodul existiert ein Speedtest-Modul, mit welchem die Ausführungszeit für einen Durchlauf gemessen werden kann. Hieraus wird zudem der theoretische Datendurchsatz errechnet.

Die Referenzimplementierung ist in reinem VB abgehandelt und kommentiert. Die Kommentare setzen allerdings Kenntnis von der Materie voraus. Theoretisch dürfte der Referenzcode mit allen vorgesehenen Bitlängen (128/196/256 Bit sowohl für Blöcke als auch Schlüssel) zurecht kommen. Zwecks verbesserter Performanz habe ich die Verschlüsselungsroutine ebenfalls in Assembler zur Verfügung gestellt. Diese Variante ist jedoch auf 128 Bit für die Blöcke und die Schlüssel begrenzt. Der beiliegende Assemblercode ist für MASM vorgesehen. Auf meinem Athlon XP2200+ erreicht die optimierte Variante einen theoretischen Datendurchsatz von ~72 Mb/s.

History
24.09.2004 Hinzugefügt
16.10.2004 Entschlüsselung nun auch in Assembler vorhanden

Autor: Dominik Auras <Dominik_auf_vbInside.de>

Code aus cCpuClk.cls
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (Destination As Any, Source As Any, ByVal _
Length As Long)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags _
As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As _
Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem _
As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As _
Long) As Long

Private MemoryHandle As Long, OldCode As Long, NewCode As Long, _
Myself As Long

'Liest per Assemblerbefehl RDTSC den Timestampcounter
Public Sub CpuClk(Cycles As Currency)
End Sub

Private Sub Class_Initialize()
MemoryHandle = GlobalAlloc(0, 16)
NewCode = GlobalLock(MemoryHandle)
CopyMemory Myself, ByVal ObjPtr(Me), 4
CopyMemory ByVal NewCode + &H0, &H4C8B310F, 4
CopyMemory ByVal NewCode + &H4, &H1890824, 4
CopyMemory ByVal NewCode + &H8, &H33045189, 4
CopyMemory ByVal NewCode + &HC, &H8C2C0, 4
CopyMemory OldCode, ByVal Myself + &H1C, 4
CopyMemory ByVal Myself + &H1C, NewCode, 4
GlobalUnlock MemoryHandle
End Sub

Private Sub Class_Terminate()
CopyMemory ByVal Myself + &H1C, OldCode, 4
GlobalFree MemoryHandle
End Sub