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:
Danke
Wenn ich richtig bin, erwartet
S(x,n)
x
alsuint32
. Angesichts der eher kleinen Eingabegröße könnte die Anzahl der Verschiebungen verringert werden, indemx
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.
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
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.
Tags und Links c cryptography encryption 8051 sha