2017-02-22 3 views
3

Ich versuche, einige Daten mit AES in Java zu verschlüsseln.
Bis jetzt habe ich erfolgreich die Daten mit einem 128-Bit-Schlüssel verschlüsselt.

Für 256-Bit-Verschlüsselung muss ich meine Richtliniendateien ändern, was für mich keine Option ist.
Ich bezog this SO Q/A auch.
Versucht BouncyCastle, aber es scheint, sie haben keine Bestimmung für 256-Bit-Schlüssel ( 1. Frage here ).
Werfen Sie einen Blick auf JNCryptor. Aber weiß nicht, ob seine eine gute Quelle oder nicht. (BouncyCastle von FIPS genehmigt)

Auch Reflection ist keine Option, da es JAVA Lizenzvereinbarung verstößt.
Wenn also jemand mich zu der relevanten Frage führen oder eine mögliche Lösung teilen könnte, werde ich mich freuen.AES-256-Verschlüsselung in Java ohne Änderung der Richtliniendateien

+0

Erwägen Sie, Ihren Code neu zu schreiben, um die Java Crypto Provider API nicht zu verwenden, und verwenden Sie die bouncycastle API direkt, z. [AESEngine] (http://www.bouncycastle.org/docs/docs1.6/org/bouncycastle/crypto/engines/AESENngine.html). Dadurch wird die Überprüfung der Richtliniendateien entfernt. Etwas in der Art von [this] (http://www.programcreek.com/java-api-examples/index.php?api=org.bouncycastle.crypto.modes.CBCBlockCipher). – Henrik

+0

@Henrik Danke, dass du dir Zeit genommen hast. Ich verwende keine Java API für Crypto-Operationen. Es ist nur, dass Bouncy Castle keine 256-Bit-Verschlüsselung ohne die Policy-Dateien afaik [FAQ] (http://www.bouncycastle.org/wiki/display/JA1/FrequentlyAsked+Questions) unterstützt. –

+1

Diese FAQ-Antwort bezieht sich nur auf die Verwendung von BC über die Crypto-Provider-API. Sehen Sie sich das Beispiel an, das ich in meinem vorherigen Kommentar angegeben habe, und versuchen Sie, die Schlüsselgröße in "cipher.init" von 128 auf 256 zu ändern. Dies wird von den Richtliniendateien nicht beeinflusst. – Henrik

Antwort

0

Es gibt nichts falsch oder unsicher über einen 128-Bit-AES-Schlüssel, es ist nicht brutal gewaltsam. Ein 256-Bit wird keine Sicherheit mehr bieten, ein erfolgreicher Angriff wird in einem anderen Bereich stattfinden.

Die Sache, um sicherzustellen, ist die Qualität des Schlüssels, verwenden Sie einen kryptografisch sicheren Zufallszahlengenerator (CSPRNG) oder leiten Sie den Schlüssel von einem wirklich guten Kennwort mit PBKDF2 ab.

Richtig authentifizieren Sie die Verschlüsselung: Verschlüsseln und dann MAC.

Verwenden Sie einen zufälligen IV im CBC-Modus und melden Sie keine Füllfehler.

+0

wow .. Danke für die Beantwortung. Die Sache ist, dass der aktuelle Industriestandard der Verschlüsselung ** AES mit 256-Bit-Schlüssel ** ist. Gleiches ist die Voraussetzung für mein Projekt. Jedenfalls benutze ich jedes Mal zufällige Sitzungsschlüssel. –

+1

Wo ist das ein Industriestandard? Aus [NIST-Empfehlung für Schlüsselverwaltung] (http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf): 29. Januar 2016, 4.2.2.1 * AES verschlüsselt und entschlüsselt Daten in 128 -Bit-Blöcke, mit 128, 192 oder 256-Bit-Schlüssel. Alle drei Schlüsselgrößen gelten als ausreichend für Anwendungen der Bundesregierung. * AES-128 ist mit RSA 3072 kompatibel. – zaph

+1

Hinweis: Ein Grund für 256-Bit-Schlüssel im Fall von Quantencomputern sind die 256-Bit-Sicherheitsschlüssel. OTOH, RSA und EC werden komplett zerstört. Oh, Quantencomputer mit den erforderlichen Fähigkeiten werden vielleicht nie verfügbar sein, viel weniger kosteneffektiv in unseren Lebenszeiten – zaph

Verwandte Themen