XTEA Enc/Dec in unter 100 Befehlen mit GCC konformer Schnittstelle

OP #3393429
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.
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.