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


von Armin O. (armino)


Angehängte Dateien:

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)


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 :)

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.