Zitat:
Nachdem alles verschlüsselt ist, wird noch der Original-Hashwert des Klartextes vorne angehängt und fertig.
Wie bewertest du diesen Code?
Nun diese Frage hätte ich so nicht gestellt an deiner Stelle, nun antworte ich auch offen.
1.) deine Einrückungen im Source sind Mist
2.) deine Zeilenumbrüche bei den "with do", "if thens" usw. sind Mist, die Befehle gehören in eine Zeile, nur ein "Begin end" Block wird ZWEI Zeichen eingerückt. Dafür gibt es die "Begin end" Blöcke.
3.) das Protokoll deiner Verschlüssung erlaubt Angriffe die nicht sein müssten.
In einem der vorherigen Postings nahm ich an das du die Message vorne mit Zufallsbytes expandierst, dann einen Hash darüber erzeugst in vor die Message hängst und dann alles verschlüsslst. Diese Annahme war ja bekanntlich falsch, hatte aber ihre Gründe.
Denn in deinem Verfahren ist der Hash unverschlüsselt und wird somit für den Angreifer lesbar.
Dieser macht nun folgendes bei zb. 8 Bytes kurzen Messages. Er erzeugt alle möglichen Zufallsbytes = 2^64 Kombinationen. Nun erzeugt er alle 2^64 möglichen Message Kombinationen und hat nun die Möglichkeit ein Dictionary zu allen Kurzen Passwörtern anzulegen. Nur anhand deines Hashes besteht nun die Möglichkeit die Message aus der Datenbank zu finden und das dazugehörige Passwort.
Die Kombinationsvielfalt von 2^64 ist viel zu gering. Erst ab 2^128 wird es unpraktikabel.
Du solltest tatsächlich den Hash mitveerschlüsseln da er sowieso erst relevant wird wenn die Message wieder entschlüsselt wird. Da der Hash aber in jedem Falle eine "Verknüpfung" zu den Daten hat, heist das auch wenn er sicher ist er denoch bestimmte Dictionary Angriffe ermöglicht wenn er nicht geschützt wird. Also: Hash + 128 Bit Zufall + Message verschlüsseln. Wäre der Hash eine verkürzte Prüfsumme, zB. 32 Bit, so könnte man diese auch unverschlüsselt speichern, warum ??
Das besondere eines Hashes ist es das die durch ihn erzeugten "Prüfsummen" mit enorm hoher Wahrscheinlichkeit exakt eine Nachricht identifizieren. (stimmt nur praktisch aber nicht theoretisch, aber egal). Eine 32 Bit Prüfsumme im Vergleich zu einem 128 Bit hash, würde demnach 2^(128 -32) = 2^96 mal mehr Prüfsummen erzeugen die zu jeweils verschiedenen Nachrichten trotzdem gleich wären. D.h. bei 2^128 verschiedenen Nachrichten a 128 Bit, erzeugt eine Hashfunktion exakt 2^128 verschiedne Prüfsummen, eine 32 Bit Prüfsumme würde aber für jede der 2^32 möglichen Prüfsummen jeweils 2^96 verschiedene Messages zulassen. Ein kurze Prüfsumme wäre demnach NICHT mehr eindeutigt und ein Angreifer hat nicht mehr die Chance auf grund der Prüfsumme eine eindeutige Nachricht zuzuordnen. Kryptographisch gesehen verkehrt sich das Verhältnis von BitSize zu Sicherheit aus ins Gegenteil.
Ich hoffe mal das man diesen komplizierten Ausführungen noch folgen konnte.
Gruß Hagen