AES-NI-Interna standardmäßig aktiviert?
Oracle hat dies zu sagen über die Java 8 mit Bezug auf AES-NI:
Hardware-Interna Hinzugefügt wurden, verwenden Advanced Encryption Standard
(AES). Die UseAES und UseAESIntrinsics flags zur Verfügung, um
die hardware-basierte AES-Interna für Intel-hardware. Die hardware
muss 2010 oder neuer Westmere-hardware. Zum Beispiel, um
hardware-AES, verwenden Sie die folgenden flags:-XX:+UseAES -XX:+UseAESIntrinsics
Zu deaktivieren Sie die hardware-AES verwenden Sie die folgenden flags:
-XX:-UseAES -XX:-UseAESIntrinsics
Aber es zeigt nicht an, wenn AES systeminterne Funktionen sind standardmäßig aktiviert (für Prozessoren, die dies unterstützen). Die Frage ist also einfach: wenn der Prozessor unterstützt AES-NI, sind AES-Interna verwendet?
Bonus-Frage: gibt es eine Möglichkeit zu testen, wenn die AES-NI verwendet wird? Ich denke, man kann erraten, basierend auf der Leistung, aber das ist nicht eine optimale oder sicher Feuer Möglichkeit zu testen.
Für Leser, die nicht vertraut sind mit AES-NI-Interna: es ersetzt byte-code, der mit der vor-kompilierten Maschinencode, mit dem AES-NI-Befehlssatz. Dies geschieht durch die JVM, so dass es nicht zeigen, bis in der API von der Java-Laufzeit-oder bytecode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
The flag ist standardmäßig auf true und wird false, wenn die Erkennung fehlschlägt, so können Sie einfach +PrintFlagsFinal um zu sehen, ob es verwendet wird:
Mein Laptop ohne AES-NI:
Gleiche auf dem Desktop - mit AES-NI:
So, es funktioniert für x64 und i686 (WOW64) mit der neuesten Java-7. Die Funktion wurde eingeführt, mit https://bugs.openjdk.java.net/browse/JDK-7184394 und mehr auf 7u40 und 7u45.
Wichtig: AES-NI können nur auf der server VM.
Dies wurde bestätigt durch Oracle nach einen bug-report eingereicht wurde. Diese wichtige information fehlte, wenn Sie erstellt die Eigenschaften Liste von Java 8, wo es eingeführt wurde (später bekam zurück portiert auf 7 als auch). Die server-VM ist explizit definiert durch die Bereitstellung der
-server
option auf diejava
oderjavaw
Befehlszeile.Nicht kommentieren (SO dumm Regeln mehr als 50 credits erforderlich!). Dieser mailthread von openjdk sagt, alle AES systeminterne Funktionen sind standardmäßig aktiviert. Obwohl ich nicht sicher bin, wie viel von der Oracle core-VM-code Aktien mit openjdk.
Wenn du den ganzen thread durchgelesen, auch Sie diskutieren über die Herausforderungen, die auf 32-bit-VMs, das erklärt wahrscheinlich dein problem mit deinem zweiten Testlauf.
Cipher.getInstance()
und sehen, ob es einen Unterschied macht, wenn die gleiche Instanz verwendet wird oder nicht.