Forum: Mikrocontroller und Digitale Elektronik AVR1318 AES Treiber auf xMega


von Fabian B. (fabbraun)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Kannst du den einen Text verschlüsseln und anschließend wieder 
entschlüsseln? Kommt das gleiche raus oder gibt es Fehlermeldungen?

von Fabian B. (fabbraun)


Lesenswert?

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 ======================

von Fabian B. (fabbraun)


Lesenswert?

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