Forum: Projekte & Code XTEA Enc/Dec in unter 100 Befehlen mit GCC konformer Schnittstelle


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Armin O. (armino)


Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Auf der Suche nach einer schnellen und kompakten Verschlüsselung für 
kleine AVRs (soll vorallem auf einem Tiny2313 zum Einsatz kommen) bin 
ich - wie wahrscheinlich viele vor mir - auf XTEA gestoßen.

Also den Code von der AVR-Crypto-Lib runtergeladen (allerdings scheint 
git nur mit Passwort zu funktionieren, waren also möglicherweise 
veraltete SVN Dateien). So richtig berauschend war selbst die ASM 
Variante nicht (zumal ich mit der nicht wirklich verschlüsseln konnte).

Da der Bootloader von Hagen Re nur entschlüsselt brachte mich das auch 
nur bedingt weiter. Aber auf jedenfall hat er den Code schon mal 
deutlich abgespeckt und beschleunigt.

Anbei also zwei Varianten. Das eigentliche Ziel (möglichst kleine 
Codegröße) erreicht xtea_size.S natürlich besser.

Variante  Code   Encode  Decode  Stack
size      198    5391    5239    0
speed     170    4163    4360    4

Code und Stack in Bytes
Encode und Decode Zeiten für ein Block (8 Byte) in Takten gemessen mit 
dem Simulator (keine Ahnung wie genau der ist)

Auf den ersten Blick scheint natürlich auch die speed Variante die 
kleinere und schneller zu sein. Der Geschwindigkeitszuwachs hierbei 
kommt jedoch von einer vorberechneten Key-Tabelle. Damit kann man sich 
die Berechnung der Rundenkeys sparen, dafür braucht die Tabelle 256 
Bytes im Flash.

Bei beiden Varianten sind die Routinen so geschrieben das der 
Cipher-/Klartest wieder an der gleichen Stelle zu liegen kommt. Somit 
wird nur ein Pointer übergeben. Falls man also die Daten noch 
andersweitig braucht muss man die vorher wegkopieren. Andernfalls kann 
das zurückkopieren an eine andere Stelle auch relativ einfach wieder 
eingebaut werden (auf kosten von zusätzlichen Befehlen).

Die size routine braucht zwar mehr register als die speed Variante 
benötigt aber dennoch keinen Stack da die benötigten Register nicht auf 
den Stack geschoben werden sondern einfach mit den Daten die 
verschlüsselt werden sollen (und ja im RAM liegen) getauscht werden. 
Somit kann die Memswap-Routine auch gleich doppelt genutzt werden.

Also viel Spaß beim verschlüsseln.

Und vielen Dank für alle Vordenker (Hagen Re und die Jungs von der 
AVR-Crypto-Lib).

PS.: Um genau zu sein schafft der xtea_size code nur die 99 Befehle wenn 
man nur einen Key verwendet, denn dann wird dieser direkt aus dem Flash 
gelesen und muss nicht als Parameter übergeben werden in diesem Fall 
XTEA_SINGLE_KEY setzen. Der Code geht dann davon aus das der Key unter 
XTEAKey zu finden ist.

: Bearbeitet durch User
von ben utzer (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Es ist zwar 7 Jahre später, aber ich möchte mich hiermit für den Code 
bedanken. Hat mir einiges an Zeit gespart :)

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.