YARROW ist der Zufallsgenerator der im
DEC ab 5.0 standardmäßig benutzt wird.
Wozu einen "sicheren" Header ?
Was du brauchst ist eine kryptographisch sichere Überprüfung ob die verschlüsselten Daten manipuliert wurden, dann erübrigt sich dein "sicherer" Header. Der macht nur dann Sinn wenn du sehr schnell, ohne die Daten entschlüsseln zu müssen, erkennen möchtest ob der Header noch ok ist.
Essentiell ist das alles sehr einfach zu realisieren.
Du brauchst
1.) Zufallssalt
2.) Passwort eingegeben vom Eigner der Daten
3.) secure hash Funktion wie SHA1/SHA256 usw.
Zufallsalt wird als erstes Element im Header gespeichert. Danach deine Headerinformationen und abschließend eine Prüfsumme berechnet mit der Hash Funktion.
Du machst nun folgendes um diese Prüfsumme zu berechnen. Laden den Header als binären Datenblock ohne die Prüfsumme in den Speicher. Initialisiere ein Hash Funktion. Berechne über das Passwort den Hash und anschloießend sofort über den Header. Finalisiere den Hash und fertig ist deine Prüfsumme. Speichere sie nach dem Header.
Nur derjenige der das korrekte Passwort kennt kann die exakt gleiche Prüfsumme nachberechnen und ergo du hast deine sichere Überprüfung.
Exakt auf gleiche Weise könntest du auch die un-/verschlüsselten Daten absichern.
Wichtig dabei ist einzigst das das Passwort im Hirn des Benutzer gespeichert wird und nicht hardcoded in deiner Anwendung.
Gruß Hagen
Einfaches Beispiel:
Delphi-Quellcode:
function Checksum(const Password: String; const Header: Binary): String;
begin
with THash_SHA1.Create do
try
Init;
Calc(Password[1], Length(Password));
Calc(Header[1], Length(Header));
Done;
Result := DigestStr(TFormat_HEX);
finally
Free;
end;
end;