- Chiffre.init() für jede Nachricht?
Angenommen zwei clients den Austausch von sicheren Nachrichten hin und her.
Muss dieser block ausgeführt werden, jedes mal für jede Nachricht, oder kann jeder Schritt(E) durchgeführt werden nur einmal am start:
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
output = cipher.doFinal(content);
Ich denke, zu verleihen, in einen Zusammenhang - obwohl ich (noch) nicht verstehen, die internals komplett, es ist mein Verständnis, dass aus Sicherheitsgründen ist es wichtig, für die IV für jede Nachricht. Also ich denke, die Antwort auf diese Frage hängt davon ab, ob dieser Schritt geschieht unter der Haube auf der doFinal (- Stufe) oder init()....?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig: um sicher zu sein, die Sie brauchen, um eine neue,zufällige, IV für jede Nachricht. Dies bedeutet, dass Sie entweder neu erstellen zu müssen die cipher oder zufällig gesetzt, die IV sich selbst für jede weitere Nachricht. Die erstere ist wahrscheinlich sicherer da, wenn Sie ändern, Chiffren oder Modi, es gibt vielleicht einige anderen Staat, die Sie benötigen, um nach dem Zufallsprinzip gesetzt und eine erneute Initialisierung des cipher behandeln soll alles.
Wenn Sie dies nicht tun, werden Sie am Ende mit der gleichen eher schlecht SSL-bug hatte mit IV Wiederverwendung.
Chiffre.doFinal nicht zurückgesetzt cipher ein random IV. In der Tat, seine weit schlimmer als das, es erscheint zum rücksetzen des internen Zustands der gleiche IV mit dem Sie angefangen haben. Wie gezeigt, die von dieser code.