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?
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
Vous devez vous connecter pour publier un commentaire.
La longueur de la clé limites sont déterminées à l'entreprise criminelle commune, qui est dans le JRE, pas dans le fournisseur. JCE vérifie les limites avant qu'il remet au fournisseur.
La bonne solution pour cela est d'installer le force illimitée de la politique de fichiers. Alors que c'est probablement la solution idéale pour votre station de travail de développement, il devient rapidement un problème majeur (si ce n'est un obstacle) pour avoir les utilisateurs non-techniques de l'installation des fichiers sur tous les ordinateurs. Il est aucun moyen distribuer les fichiers avec votre programme; ils doivent être installés dans le répertoire JRE (qui peut même être en lecture seule en raison des autorisations).
Château gonflable fournit son propre API qui est distincte de l'entreprise criminelle commune. Cette API ne pas appliquer toute la longueur de la clé limites. Ce n'est pas la solution idéale, comme l'API est totalement différente de l'entreprise criminelle commune, et lié à BC et BC est un supplément de 1 MO bibliothèque distribuer avec votre programme.
Enfin, il existe également un la réflexion solution de contournement décrite ici plus en détail.
OpenJDK n'a pas toute la longueur de la clé des limites, c'est pourquoi ils sont tout simplement
Integer.MAX_VALUE
.Les algorithmes de chiffrement sont standard, de sorte qu'il ne fait pas de différence de ce point de vue. Mais la colombie-britannique bibliothèque fondamentalement les doublons fonctionnalités déjà inclus dans le JRE, donc je voudrais aller avec le fournisseur. Je ne sais pas intégré les environnements, mais vous pouvez également obtenir intrinsèques et d'autres optimisations avec SunJCE sur x86 et sparc.
La réflexion solution de contournement ne fonctionne plus dans Java8 github.com/jruby/jruby/issues/4101
OriginalL'auteur ntoskrnl