JCE Unlimited Strenght Cryptography ab jetzt standardmäßig aktiv

28.02.2018

In Oracles Java-Runtimes bis einschließlich Version 1.8.0_151 ist es standardmäßig nicht möglich, die Java Cryptography Extension (JCE) mit starker Verschlüsselung zu verwenden. Demnach dürfen beispielsweise Verschlüsselungen mit dem AES-Algorithmus nur Schlüssel mit einer maximale Länge von 128 bit benutzen. Alle Versuche, einen längeren Schlüssel zu verwenden werden mit folgender Exception geahndet:

java.security.InvalidKeyException: Illegal key size

Um mit längeren Schlüsseln arbeiten zu dürfen war es vor Java-Versionen vor 1.8.0_151 notwendig, die Java Runtime mit entsprechenden Unlimited Strength Cryptography Policy Files auszustatten (für Java 8 hier erhältlich). In Java 1.8.0_151 müssen diese Policy Files nicht mehr extra installiert werden. Stattdessen kann dort die starke Kryptografie durch setzen der Security Property crypto.policy=unlimited aktiviert werden.

Seit Version 1.8.0_161 ist die Unlimited Strength Cryptography standardmäßig aktiviert. Die Security Property muss also nicht mehr extra gesetzt werden. Soll keine starke Kryptografie erlaubt sein, kann diese mit crypto.policy=limited wieder auf kleine Schlüssellängen begrenzt werden.

Folgender JUnit-Test prüft ob die Unlimited Strength Cryptography in der Java-Runtime, in der der Test läuft, verfügbar ist:

import org.junit.Test;

import javax.crypto.Cipher;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class JceUnlimitedStrengthCryptographyTest {

    @Test
    public void unlimitedStrengthCryptographyIsEnabled() throws Exception {
        
        int maxKeyLength = Cipher.getMaxAllowedKeyLength("AES");
        assertThat(maxKeyLength, is(Integer.MAX_VALUE));
    }

}

Falls Kryptografie mit unbeschränkter Stärke verfügbar ist, gibt die Methode Cipher.getMaxAllowedKeyLength(…) den Wert Integer.MAX_VALUE zurück, und der Test ist erfolgreich. Andernfalls schlägt der Test fehl.

Statt als Test kann der Code kann auch beim Hochfahren einer Anwendung genutzt werden, wie beispielsweise in einem ServletContextListener, wenn die Anwendung starke Verschlüsselung benötigt. Ist diese nicht vorhanden, könnte etwa das Hochfahren der Anwendung mit entsprechender Fehlermeldung verhindert werden.

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*