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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.