Optimierung von SHA-1 für kleine Eingaben

8

Ich hoffe, eine Implementierung von SHA-1 für eine 8-Bit-MCU (8051-basiert) zu optimieren. Die Eingabedaten sind nur 8 Bytes, also frage ich mich, ob etwas getan werden könnte, um dieses Makro zu verbessern:

%Vor%

Das Problem, das ich habe, ist, dass, wenn das Makro P S mit S(b, 30) aufruft, es rund 60us benötigt, um es abzuschließen. Da es 80 Aufrufe von P gibt, beträgt die Gesamtanzahl ungefähr 4,8 ms.

Wenn ich richtig bin, erwartet S(x,n) x als uint32 . Angesichts der eher kleinen Eingabegröße könnte die Anzahl der Verschiebungen verringert werden, indem x kleiner gemacht wird, z. B. uint8 ?

Wenn ja, ist das die einzige Änderung, die benötigt wird? Von:

%Vor%

An:

%Vor%

Von:

%Vor%

An:

%Vor%

Hier ist der vollständige Code:

%Vor%

Hier ist ein Beispiel für den generierten Code für S(x,n) , wenn er von P( E, A, B, C, D, W[1] ) aufgerufen wird:

%Vor%

Danke

    
Kar 03.11.2015, 06:09
quelle

2 Antworten

1
  

Wenn ich richtig bin, erwartet S(x,n) x als uint32 . Angesichts der eher kleinen Eingabegröße könnte die Anzahl der Verschiebungen verringert werden, indem x kleiner gemacht wird, z. B. uint8 ?

Nein. Der Status der SHA1-Funktion besteht aus fünf 32-Bit-Werten, die jede Iteration ändern, und diese Werte sind, woran S(x,n) arbeitet. Wenn Sie diese in 8-Bit-Werte umwandeln, erhalten Sie eine völlig andere (und wahrscheinlich sehr kaputte!) Hash-Funktion.

Die MD5 / SHA-Familie von Hash-Funktionen ist stark abhängig von 32-Bit-Integer-Operationen. Die einfache Implementierung auf 8-Bit-Prozessoren, wie der 8051, war kein Konstruktionsziel für diese Funktionen, und Implementierungen für diese Teile werden nicht besonders gut funktionieren. Es tut uns leid. Sie müssen entweder mit der Langsamkeit leben, einen anderen Mikroprozessor (oder einen mit SHA1-Hardwarebeschleunigung!) Verwenden oder einen anderen Hash-Algorithmus verwenden.

    
duskwuff 04.11.2015 19:11
quelle
0

Es klingt wie Ihre tatsächliche Anforderung ist eine MAC / PRF zu finden, die auf Ihrer Hardware für 8-Byte-Eingänge zu berechnen ist.

Da Ihre Daten eine feste Länge haben, können Sie eine sichere Blockchiffre (mit 128-Bit-Blöcken) als CBC-MAC . Da Ihre Daten kürzer als ein Block sind, vereinfacht CBC-MAC das Verschlüsseln der Daten mit dem rohen Blockchiffre / ECB-Modus.

Wenn Ihre 128-Bit-Blockchiffrierung ein ähnliches Kosten-pro-Byte wie SHA-1 hat, führt dies zu einer 8-fachen Beschleunigung im Vergleich zu HMAC-SHA-1 (SHA-1 hat 512-Bit-Blöcke und Sie müssen zwei hacken) Blöcke für HMAC). Wenn Sie eine Chiffre wählen, die besonders für Ihre CPU geeignet ist, könnte die Beschleunigung sogar noch größer sein.

Da AES so beliebt ist, sollten Implementierungen , die für 8-Bit-CPUs optimiert sind, nicht gefunden werden. t sei zu schwer.

    
CodesInChaos 04.11.2015 18:05
quelle

Tags und Links