Forum: Projekte & Code MSP430 Library für AES-Hardwareverschlüsselung


von Ralf R. (rralf)


Angehängte Dateien:

Lesenswert?

Hallo,

da ich im Netz bisher dazu noch nichts gefunden habe, hab ich ne kleine 
Library geschrieben, die das AES Hardwaremodul, die einige msp430 haben 
ausnutzt.

Wenn wer was damit anfangen kann, viel Spaß damit! Für Fragen / 
Diskussionen bin ich offen :-)

Für Mikrocontroller, die AES nicht hardwaremäsig unterstützen, hat TI 
dazu ein Application Note erstellt:
http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa397a

Kurze Beschreibung:

Der Key muss immer 128Bit lang sein ( =16Bytes ).
Da AES ein Blockchiffre ist, muss die Größe der zu verschlüsselnden 
Nachricht immer ein Vielfaches von 128Bit ( =16Bytes ) sein. 
Automatisches Padding findet nicht statt!

Funktionen:
aes_reset() // Führt Reset auf das AES Modul aus
aes_setkey( key ); // Lädt den geheimen Schlüssel in das Modul

aes_encrypt( dest, src, blk ); // Verschlüsselt blk Blöcke von src und 
schreibt die verschlüsselte Nachricht nach dest
aes_decrypt( dest, src, blk ); // Entschlüsselt blk Blöcke von src und 
schreibt die entschlüsselte Nachricht nach dest

Returnwerte von aes_encrypt/decrypt: AES_SUCCESS wenn alles gut ging und 
AES_ERROR wenns in die Hose ging

Defines:
in der Datei aes.h muss AES_ACCESS_MODE definiert werden. Das kann 
entweder AES8BIT oder AES16BIT sein. Der Unterschied zwischen den beiden 
Verfahren ist lediglich, wie die Daten in das Modul geschrieben/gelesen 
werden, eben 8bit Weise oder 16bit Weise. Der Vorteil von 8bit ist, dass 
etwas weniger Code gebraucht wird, dafür das Laden doppelt so lange 
dauert. Vorteil der 16bit Variante ist, dass etwas mehr Code benötigt 
wird, jedoch das Laden auch schneller geht.

dest und src können auch gleich sein!

Der key muss nur einmal geladen werden, er wird dann immer wieder 
verwendet.
Das Laden eines anderen Keys ist natürlich auch möglich.
Das Verschlüsseln, sowie das Entschlüsseln selbst brauchen jeweils 
167MCLK + Overhead der Funktionen.
Die Library benötigt im Flash ca. 500 Byte.
Hard - und Softwareverschlüsselung sind zueinander kompatibel ( soll 
heißen, ein Sender könnte z.B. Hardwareverschlüsselung verwenden und ein 
Empfänger Softwareverschlüsselung ).

Beispiele:

unsigned char din[48] = "Hello world, this is an AES En/Decryption 
Test!"; // zu verschlüsselnde Nachricht
unsigned char key[16] = { 
123,21,12,12,56,94,12,56,234,123,66,44,22,77,33,12 }; // geheimer 
Schlüssel
unsigned char out[48]; // Hier landet das verschlüsselte

aes_reset();
aes_setkey( key );
aes_encrypt( out, din, 3 );

... do something ...

aes_decrypt( out, out, 3 ); // Jetzt steht der entschlüsselte Inhalt in 
out

Die Library verwendet im Moment noch Busy Waiting während der 
Verschlüsselung. Denkbar wäre die Verwendung des AES Interrupts, der 
ausgelöst wird, wenn ein Block fertig ver/entschlüsselt ist. Während der 
Verschlüsselung könnte man dann z.B. in einen LPM wechseln, um Strom zu 
sparen.

Grüße

Ralf

von Schaltungswächter (Gast)


Lesenswert?

Super Sache, Danke für dieses schöne Stück Code.

Ich habe dazu eine Frage. Der AES Algorythmus ist doch symmetrisch wenn 
ich nicht irre, wozu muss man dafür 2 verschiedene Funktionen aufrufen? 
Die TI Doku kenne ich bisher noch nicht. Kann das wegen der Umschaltung 
der sbox sein, so dass man gleichzeitig de- und en-crypten per Hardware 
kann?

http://en.wikipedia.org/wiki/Rijndael_S-box

von Ralf R. (rralf)


Lesenswert?

Ich will mich jetzt nicht drauf festnageln, aber soweit ich weis, heisst 
symmetrisch ja nur, dass beide Partner den selben Schlüssel verwenden.

Im Gegensatz dazu das asymmetrische Kryptosystem, bei dem Public/Private 
Keys verwendet werden.

-> Bei AES ist es nicht so, dass 2xVerschlüsseln = Entschlüsseln 
bedeutet.

Was du meinst klappt z.B. bei Verschiebungschiffren, wie z.B. 
primitiverweise ROT13. Dort ist 2x Verschlüsseln = Entschlüsseln

Achja: Und gleichzeitig Verschlüsseln und entschlüsseln klappt leider 
nicht, muss man alles schön seriell nacheinander machen

Gruß

Ralf

von Schaltungswächter (Gast)


Lesenswert?

Danke für die Info.
RC4 z.B. ist ein "vollsymmetrisches" Verfahren :-)
und immer noch sicher.

Hast Du vor noch was daran zu machen oder
ist das für Dich erledigt?
Man könnte z.B. noch die Fehlerbehandlung fertigbauen...

Hardware AES hilft schon Zeit sparen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.