www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR1318 AES Treiber auf xMega


Autor: Fabian Braun (fabbraun)
Datum:

Bewertung
0 lesenswert
nicht 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-t..., 
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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

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

Autor: Fabian Braun (fabbraun)
Datum:

Bewertung
0 lesenswert
nicht 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
====================== CODE 1 START ======================
unsigned char sKey[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char sMsg[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char sOut[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

printf("\n\nAES_decrypt()\nKey:");
print_vector(0, sKey, 16);
printf("\nMSG:");
print_vector(0, sMsg, 16);
AES_decrypt(sMsg,sOut, sKey);
printf("\nOUT:");
print_vector(0, sOut, 16);
printf("\n");

printf("\n\nAES_encrypt()\nKey:");
print_vector(0, sKey, 16);
printf("\nMSG:");
print_vector(0, sMsg, 16);
AES_encrypt(sMsg,sOut, sKey);
printf("\nOUT:");
print_vector(0, sOut, 16);
printf("\n");
====================== CODE 1 END======================
====================== CONSOLE OUTPUT START ======================
AES_decrypt()
Key:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
MSG:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
OUT:019484CAFFD9F329A2F04638E1BB6A28

AES_encrypt()
Key:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
MSG:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
OUT:BCBF217CB280CF30B2517052193AB979
====================== CONSOLE OUTPUT START ======================

Autor: Fabian Braun (fabbraun)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.