La longueur de la clé de la limite avec Java Cryptography Extension

Je suis conscient que le keylenght dans le Sun/Oracle JVM est limité judiciaire raisons. Cependant, comme j'ai compris le concept de la JCE (Java Cryptography Extension) est que l'utilisateur peut choisir son propre fournisseur de sécurité pour compenser cette limitation.

Pour cette raison, j'essaie de faire fonctionner le Rebondir Château en tant que fournisseur de services de sécurité en collaboration avec le Orcale JDK 1.7.

Afin de déterminer les réels a permis keylegths je suis en utilisant ce code:

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import java.security.GeneralSecurityException;
import java.security.Provider;
import java.security.Security;

public class JCETest {
public static void main( String[] args ) throws GeneralSecurityException
{

    BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
    Security.addProvider(bouncyCastleProvider);

    System.out.println( "\nSecurity-Provider:" );
    for( Provider prov : Security.getProviders() ) {
        System.out.println( "  " + prov + ": " + prov.getInfo() );
    }
    System.out.println( "\nMaxAllowedKeyLength (for '" + Cipher.getInstance("AES").getProvider() + "' using current 'JCE Policy Files'):\n"
            + "  DES        = " + Cipher.getMaxAllowedKeyLength( "DES"        ) + "\n"
            + "  Triple DES = " + Cipher.getMaxAllowedKeyLength( "Triple DES" ) + "\n"
            + "  AES        = " + Cipher.getMaxAllowedKeyLength( "AES"        ) + "\n"
            + "  Blowfish   = " + Cipher.getMaxAllowedKeyLength( "Blowfish"   ) + "\n"
            + "  RSA        = " + Cipher.getMaxAllowedKeyLength( "RSA"        ) + "\n" );
}
}

La sortie de l' Orcale JDK 1.7 et c'est de construire des fournisseurs est:

Security-Provider:
  SUN version 1.7: SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
  SunRsaSign version 1.7: Sun RSA signature provider
  SunEC version 1.7: Sun Elliptic Curve provider (EC, ECDSA, ECDH)
  SunJSSE version 1.7: Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
  SunJCE version 1.7: SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)
  SunJGSS version 1.7: Sun (Kerberos v5, SPNEGO)
  SunSASL version 1.7: Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)
  XMLDSig version 1.0: XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)
  SunPCSC version 1.7: Sun PC/SC provider
  BC version 1.46: BouncyCastle Security Provider v1.46

MaxAllowedKeyLength (for 'SunJCE version 1.7' using current 'JCE Policy Files'):
  DES        = 64
  Triple DES = 128
  AES        = 128
  Blowfish   = 128
  RSA        = 2147483647

Mais quand j'applique la colombie-britannique en tant que fournisseur de passage à

Cipher.getInstance("AES", bouncyCastleProvider).getProvider()

- Il encore me montre le peu de longueur de la clé (sauf pour le RSA) comme ceci:

MaxAllowedKeyLength (for 'BC version 1.46' using current 'JCE Policy Files'):
  DES        = 64
  Triple DES = 128
  AES        = 128
  Blowfish   = 128
  RSA        = 2147483647

Mais quand je change le JDK pour openJDK, j'obtiens ce résultat:

MaxAllowedKeyLength (for 'BC version 1.46' using current 'JCE Policy Files'):
  DES        = 2147483647
  Triple DES = 2147483647
  AES        = 2147483647
  Blowfish   = 2147483647
  RSA        = 2147483647

Ce étonne moi depuis que je suis sous l'impression que pas le JDK, mais la sécurité fournisseur de limiter la longueur de la clé. Mais mes tests montrent que, évidemment, le JDK est la limitation de la longueur de la clé, n'importe quel fournisseur je choisir.

Ma question est: ai-je quelque chose de mal? Est-il un moyen de libérer le keyleght avec l'Oracle JDK?

La même longueur de clé pour les chiffrements symétrique et asymétrique n'a pas beaucoup de sens. Aussi DES est limité à 64 ans (56 efficace) bits de par leur conception, comme le Triple DES est limité à 112 efficace bits (64*2 technique, où les gens seraient en général utiliser la même clé sur deux des trois DES-séquences. La seule limite qui doit être soulevé pour augmenter la sécurité est la l'un pour l'AES (et peut-être Blowfish, pas sûr qu'il y a). Tout cela pour dire, que MaxAllowedKeyLength de 2147483647 n'a pas de sens pour l'AES, parce que le max de longueur de clé de 256 bits AES est par la conception.
Juste un commentaire: à court et à moyen terme de sécurité il n'est pas nécessaire d'augmenter la clé AES de 128 bits. Actuellement la meilleure attaque de l'AES avec une clé de 128 bits a une complexité de 126 bits. Cela signifie qu'il faudrait 2^126 étapes pour récupérer la clé.
Merci, c'est effectivement de m'aider. J'étais juste confus au sujet de la sortie différente de l'openJDK.
double possible de "Force irrésistible" entreprise criminelle commune, la Politique de Fichiers
Comme expliqué dans la question ci-dessus, la longueur de la clé limites ne sont pas déterminés par le fournisseur, mais dans le JRE. OpenJDK ne pas limiter les longueurs de clés, de sorte que les limites sont tout simplement Integer.MAX_VALUE.

OriginalL'auteur Randy | 2014-09-15