Hallo miteinander, Ich nutze einen ATXMEGA256A3 mit dem AES128 treiber - als AppNote AVR1318 verfügbar - um die interne AES128 Hardware Crypto Engine für Ver- & Entschlüsselung anzusteuern. Die Verschlüsselung (Encryption) funktioniert tadellos, jedoch musste ich heute nach langer Suche feststellen, dass die *Entschlüsselung (Decryption) fehlerhaft* ist. Ich habe das Resultat mit drei anderen Quellen (http://www.riscure.com/tech-corner/online-crypto-tools/aes.html, http://www.unsw.adfa.edu.au/~lpb/src/AEScalc/AEScalc.html, CryptoPP - Win32 Crypto Lib) überprüft und alle kommen auf dasselbe Resultat, was aber von demjenigen des AVRs abweicht. *Nun meine Frage(n)*: Hat jemand schon die selbe Erfahrung gemacht? Ist bekannt, dass die AVR1318 fehlerhaft ist? Oder könnte das womöglich ein hardwaremässiger Fehler im Chip sein? (Ich denke nicht, denn im Errata ist nichts vermerkt! Btw: Ich nutze Chip Rev. B) Ich habe parallel schon bei Atmel um Support angefordert, ich möchte hier nur die Möglichkeit nutzen um eventuell Erfahrungsaustausch mit anderen Nutzern zu haben, die vielleicht auch gerade einen guten Workaround empfehlen können. Danke für eure Hilfe! Grüsse Fabian
Kannst du den einen Text verschlüsseln und anschließend wieder entschlüsseln? Kommt das gleiche raus oder gibt es Fehlermeldungen?
Hallo Läubi, So direkt hab ich's ehrlich gesagt noch nicht versucht, ich habe nur meine Resultate der En- & Decryption mit denjenigen der Online Tools und der CryptoPP Library verglichen. Aber ich würde mal schwer sagen nein, denn wenn die Encryption stimmt aber die Decryption nicht dann kann's ja nicht funktionieren?!? Grundsätzlich geht es um eine Portierung einer RFID (Mifare) lib vom Win32 auf AVR, wobei ich den Crypto Wrapper portieren bzw. umschreiben musste. Wie gesagt die Verschlüsselung funktioniert tadellos (verglichen mit den anderen Tools), die Entschlüsselung aber nicht. Trotzdem machst du mich jetzt aber doch ein wenig stutzig...Vielleicht wäre es ja möglich, dass die AES Engine - je nach Implementation - nicht eindeutige Resultate liefert. Könnte das sein? Jedoch denke ich wiederum wird dies nicht der Fehler sein, denn dann würde dei der Encryption auch ein anderes Resultat herauskommen. Folgender Test hab ich gemacht (siehe Code und Konsolenausgabe unten!). Hab's auch mit anderen (nicht symmetrischen und homogenen) Keys und Messages probiert, überall der selbe Fehler: Encryption stimmt Decryption ist falsch! Gruess Fabian
1 | ====================== CODE 1 START ====================== |
2 | unsigned char sKey[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
3 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
4 | unsigned char sMsg[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
5 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
6 | unsigned char sOut[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, |
7 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
8 | |
9 | printf("\n\nAES_decrypt()\nKey:"); |
10 | print_vector(0, sKey, 16); |
11 | printf("\nMSG:"); |
12 | print_vector(0, sMsg, 16); |
13 | AES_decrypt(sMsg,sOut, sKey); |
14 | printf("\nOUT:"); |
15 | print_vector(0, sOut, 16); |
16 | printf("\n"); |
17 | |
18 | printf("\n\nAES_encrypt()\nKey:"); |
19 | print_vector(0, sKey, 16); |
20 | printf("\nMSG:"); |
21 | print_vector(0, sMsg, 16); |
22 | AES_encrypt(sMsg,sOut, sKey); |
23 | printf("\nOUT:"); |
24 | print_vector(0, sOut, 16); |
25 | printf("\n"); |
26 | ====================== CODE 1 END====================== |
1 | ====================== CONSOLE OUTPUT START ====================== |
2 | AES_decrypt() |
3 | Key:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
4 | MSG:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
5 | OUT:019484CAFFD9F329A2F04638E1BB6A28 |
6 | |
7 | AES_encrypt() |
8 | Key:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
9 | MSG:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
10 | OUT:BCBF217CB280CF30B2517052193AB979 |
11 | ====================== CONSOLE OUTPUT START ====================== |
Tja, wieder einmal ein Thread wegen einem Flüchtigkeitsfehler. :-/ 1. RTFE (Read the F*** Example :-P) 2. die Decyption nutzt ein sog. Subkey und nicht den effektiven Key selbst: AES_lastsubkey_generate(sKey, lastsubkey); AES_decrypt(sMsg,sOut, lastsubkey); Das sollte das Problem ziemlich sicher lösen. Werd's am Montag sofort ausprobieren.... und last but not least wär's sinnvoll das AES modul zu resetten vor der Nutzung: AES_software_reset(); Schönes Wochenede allerseits! Fabian
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.