Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   HMac-Funktion aus DEC nutzen (https://www.delphipraxis.net/209545-hmac-funktion-aus-dec-nutzen.html)

EdAdvokat 19. Dez 2021 18:37

HMac-Funktion aus DEC nutzen
 
Ich wollte die HMAC-Funktion von DEC testen und habe dazu folgendes eingegeben:

Delphi-Quellcode:
uses
  DECHashBase, DECHashAuthentication, DECHash;

procedure TForm1.btn1Click(Sender: TObject);
var Key, Text : RawByteString;
  x:TArray<Byte>;
begin
  Key := edtkey.text;
  Text:= edtText.text;

  x:= DECHashAuthentication.TDECHashAuthentication.HMAC(TEncoding.UTF8.GetBytes(Key),TEncoding.UTF8.GetBytes(Text)) ;
  edtoutput.text:= TEncoding.UTF8.GetString (x);
end;
Das Testprogramm läßt sich kompilieren, jedoch nach Aufruf des ButtonClick erhalte ich folgende Fehlermeldung:


Zitat:

Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt pDerif1.exe ist eine Exception der Klasse EDECAbstractError mit der Meldung 'Abstract Error: TDECHashAuthentication is not implemented' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe

Kann ich überhaupt die class function HMAC(const Key, Text: RawByteString): TBytes; overload; aus der unit DECAuthentication so aufrufen oder
genauer wie muß ich die HMAC-Funktion aus DEC exakt nutzen? Es ist doch recht kompliziert gegenüber anderen HMAC-Funktionen.
Bin ich auch hinsichtlich meiner bescheidenen Versuche zur Konvertierung von string in System.TArray<System.Byte> und umgekehrt richtig?

Für eure Hilfe wäre ich dankbar.

EdAdvokat 20. Dez 2021 09:38

AW: HMac-Funktion aus DEC nutzen
 
es hat mir keine Ruhe gelassen und daraufhin habe ich den Aufruf dahingehend verändert:

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var Key, Text : String;
    xByte:TArray<System.Byte>;

begin
  Key := (edtkey.text);
  Text:= (edtText.text);

  xByte:=THash_SHA224.HMAC(TEncoding.UTF8.GetBytes(Key),TEncoding.UTF8.GetBytes(Text));
  edtoutput.text:= StringToHex(TEncoding.ANSI.GetString (xByte));
end;
Es klappt nun und ich erhalte den gewünschten HMAC-Hash.
Geht das so, kann man das so machen? Oder ist das aus eurer Sicht Klamauck.
Die Umwandlung string to Hex habe ich mit einer gesonderten Methode durchgeführt. Da gibt es sicher
geschmeidigere Lösungen.
Für eure Meinungsäußerung wäre ich dankbar.

TurboMagic 22. Dez 2021 16:07

AW: HMac-Funktion aus DEC nutzen
 
Hallo,

hab' nur 'nen halben Bklick auf deunen Code geworfen aber ja:
du musst den HMAC an einer konkreten Hash-Klasse aufrufen, denn
der benutzt ja intern den entsprechenden Hash-Algorithmus und wenn ich's
richtig auswendig weiß ist die HMAC Methode auch eine class function.

Und ja, zum HMAC speziell ist glaube ich kein Beispiel drin, aber
in den Unit Tests zu den Hashes wirst du auch welche zum HMAC finden,
da könntest du evtl. auch "abkupfern"...

Grüße
TurboMagic

EdAdvokat 22. Dez 2021 19:00

AW: HMac-Funktion aus DEC nutzen
 
Hallo TurboMagic,
vielen Dank für Deine Weihnachtsgrüsse und die Ankündigung von DEC 6.5. Ich habe zurückliegend immer mal reingeschaut und
mitverfolgt, an was Du gerade herumwerkelst. Mit der nun vorgenommenen Kategorisierung AES 128/192/256 bit wird AES erwachsen.
Aus den mir bekannten AES-Projekten (z.B Dr. Rathlev oder Jorlen Young, Alexander Ionov u.a.) ist mir diese Einteilung unabhängig
von der Schlüssellänge so auch bekannt.
Ich habe jedoch in der Literatur bisher keine Pflicht zur Kategorisierung 128/192/256 bit Schlüssellänge gefunden.
Bei Klaus Schmeh "Kryptographie" (S.138) wird gesagt: "Die Blocklänge des AES beträgt 128 Bit. Das Verfahren Rijndael unterstützt zwar
auch 192 und 256 Bit, doch diese Blocklängen wurden nicht in die AES-Standardisierung aufgenommen (genaugenommen muss man den AES
daher als Spezialfall von Rijdael bezeichnen). Die AES-Schlüssellänge kann - wie bei allen AES-Kandidaten - wahlweise auf 128, 192
oder 256 Bit festgelegt wrden."
Übrigens sei an dieser Stelle auch auf eine sehr interessante Vorlesungsreihe (auf youtube) von Prof. Paar zum Thema AES hingewiesen.
Jedenfalls gibt es bezüglich der Kategorisierung der Schlüssellängen wohl keine Vorgaben.
Egal, wer es so will oder bei der bisherigen Lösung bleiben möchte, sei jedem selbst überlassen.
Ich bin durchaus gespannt auf die neue Version von DEC 6.5.
Ich würde mich auch gern in diese Arbeit einbringen wollen, doch habe ich klar und deutlich meine Grenzen diesbezüglich erkannt.
Ich werkele so für mich allein, lediglich mit Untersützung der DP, Dr. Google und einigen anderen Veröffentlichungen herum und komme
zu sehr bescheidenen Ergebnissen.

So habe ich mit Hilfe der HMAC-Funktion aus DEC und drei anderen HMAC-Projekten einen Key-Generator erstellt, mit dem wahlweise Keys
für symetrische Chiffrieralgorithmen (z.B. AES) erstellt werden können, nachdem entsprechende Passwortphrasen und Keys mit Hilfe von
asymetrischen Chiffrierverfahren (hier konkret ECC) ausgetauscht wurden.
Das klappt durchaus gut und das asymetrische Verfahren ECC - basiert auf eliptischen Kurven mit einer vom BSI empfohlenen Sicherheit,
also sowohl sicherer und schneller als RSA.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz