Java 9 Ära AES 256 Chiffre

Sie benötigen keine Richtliniendatei mehr.

Es ist wichtig, also sage ich es noch einmal. Sie benötigen keine Richtliniendatei mehr.

Hintergrund

Java verwendet die Standardbibliothek Cipher-Klasse, um AES-Chiffren ohne Verwendung von Bibliotheken von Drittanbietern zu verarbeiten. Die AES-Verschlüsselung scheint jedoch US-Exportbeschränkungen zu unterliegen, und der Standard kann nur Schlüssel mit bis zu 128 Bit verarbeiten. Es ist bekannt, dass in Ländern wie Japan, die dieser Exportkontrolle nicht unterliegen, eine Richtliniendatei mit unbegrenzter Stärke separat von Oracle heruntergeladen und auf dem System überschrieben werden muss.

Es wäre schön, wenn ich die AES 256-Verschlüsselung durch Ersetzen der Richtliniendatei verwenden könnte, aber ... um ehrlich zu sein, ist es sehr ärgerlich. Es ist mühsam, dies jemandem zu erklären, der nicht weiß, was passiert ist, und es ist auch mühsam, es jedes Mal zu ersetzen, wenn Sie das JDK aktualisieren. Wenn es nur ein Ärger ist, besteht immer noch die Gefahr, dass Sie vergessen oder Fehler machen.

Java 9 ändert sich

In Java 9 wird diese Richtliniendatei bereits mit dem JDK ausgeliefert und kann jetzt durch einfaches Ändern der Sicherheitseigenschaft "crypto.policy" gesteuert werden.

Die Sicherheitseigenschaft crypto.policy kann auf zwei Arten festgelegt werden. Seit Java 9 ist sie jedoch standardmäßig ** unbegrenzt, sodass Sie wirklich nichts tun müssen. da ist nicht.

  1. Legen Sie dies fest, indem Sie "Security.setProperty ()" aufrufen
  1. Legen Sie in der Datei "java.security" fest

Java 8 ändert sich

■ Nachtrag 2018-01-17 (thx. @Yehara) Von 8u161 wurde die Standardeinstellung in Java 8 in "unbegrenzt" geändert. Selbst in einer Java 8-Umgebung können Sie die AES 256-Verschlüsselung verwenden, indem Sie einfach auf das neueste JDK aktualisieren: Herzlichen Glückwunsch:

Bis zu diesem Punkt endet es mit "Ich möchte bald zu Java 9 gehen: müde:", aber tatsächlich gilt dieser Mechanismus auch für Java 8 8u151. Es ist in /javase/8u151-relnotes-3850493.html#JDK-8157561 enthalten. Dies bedeutet, dass Java 8-Benutzer jetzt die AES 256-Verschlüsselung verwenden können, indem sie einfach die Sicherheitseigenschaft "crypto.policy" festlegen.

Es gibt jedoch einige Unterschiede zu den Java 9-Spezifikationen. Beachten Sie daher die folgenden Punkte.

Sie können die Verschlüsselung mit unbegrenzter Stärke auf eine der folgenden Arten aktivieren:

  1. Legen Sie dies fest, indem Sie "Security.setProperty ()" aufrufen
  1. Legen Sie in der Datei "java.security" fest
  1. Legen Sie in der Richtliniendatei "US_export_policy.jar" "local_policy.jar" fest

Vorsichtsmaßnahmen

Dies ist die Methode von 1., die programmgesteuert mit "Security.setProperty ()" festgelegt wird. Seien Sie jedoch vorsichtig, da sie in einigen Anwendungen nicht wie erwartet funktioniert. Der Punkt ist, dass es gesetzt werden muss **, bevor das JCE-Framework initialisiert wird.

Der folgende Code sieht beispielsweise gut aus, aber die Länge2 beträgt ebenfalls 128. Dies liegt daran, dass das JCE-Framework initialisiert wird, wenn die Cipher-Klasse zum ersten Mal referenziert wird, und an diesem Punkt entschieden wird, welche Richtlinie verwendet wird.

    int length = Cipher.getMaxAllowedKeyLength("AES");  // => 128
    Security.setProperty("crypto.policy", "unlimited");
    int length2 = Cipher.getMaxAllowedKeyLength("AES"); // => 128 (!)

Es ist in Ordnung, wenn Sie ein einfaches Befehlszeilentool schreiben, aber es kann ein Problem für Webanwendungen sein, die beispielsweise auf Tomcat ausgeführt werden. Dies liegt daran, dass bei aktivierter HTTPS-Kommunikation das JCE-Framework initialisiert wird, bevor Ihr Anwendungscode ausgeführt wird.

Selbst in derselben Webanwendung befindet sich die Klasse mit der Hauptmethode als Einstiegspunkt auf der Anwendungsseite, wenn ein eingebetteter Container in Spring Boot usw. verwendet wird. Daher ist die Sicherheitseigenschaft in ihrer eigenen Klasse schneller als die Initialisierung des Containers. Kann ersetzt werden.

Zusammenfassung

In diesem Artikel habe ich vorgestellt, dass das Ersetzen von Richtliniendateien, das beim Umgang mit AES 256-Kryptografie in Java erforderlich war, in Java 9 und Java 8 nicht mehr erforderlich ist.

Da es nicht mehr erforderlich ist, die Richtliniendatei im Voraus zu ersetzen, liegt es in der Natur des Menschen, die Methode zur Verwendung von "Security.setProperty ()" 1 zu wählen. In Java 8 wird jedoch der Anwendungstyp entwickelt Bitte beachten Sie, dass einige möglicherweise nicht funktionieren. Sie sollten schnell zu Java 9 wechseln, wo der Standardwert "unbegrenzt" ist.

Referenzinformationen

Recommended Posts

Java 9 Ära AES 256 Chiffre
Java
Java
Ich habe das neue Yuan-Problem in Java ausprobiert
Java Programming Style Guide für die Java 11-Ära