2010-04-06 29 views
7

Probando RSA para encriptar una clave AES, I realized que RSA tiene solo 1 bloque con un tamaño limitado (configurable por el programador) almacena la clave encriptada. La pregunta es, cuando uso:Tamaño de clave AES en Java

KeyGenerator.getInstance("AES").generateKey() 

las claves AES tendrán un tamaño constante en todos los ordenadores y la aplicación JVM?

Respuesta

11

Hay un método init en KeyGenerator que le permite especificar el número de bits.

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); 
keyGenerator.init(128); 
SecretKey key = keyGenerator.generateKey(); 

¿Hará eso lo que necesita?

El valor predeterminado appears es de 128 bits, pero no supondría que todas las JVM usan el mismo valor predeterminado, o que siempre será el predeterminado.

+0

Estoy de acuerdo en no depender del valor predeterminado. (Otros valores predeterminados de Java cambian con el tiempo). Además, vale la pena señalar que los únicos valores válidos son 128, 192 o 256 bits para '.init()', y que 192 y 256 podrían no estar disponibles ... lo cual podría llevar a una diversión de despliegue doloroso. –

2

Suns Java Cryptography Extension documentation indica que múltiples tamaños de clave son compatibles con las claves AES y no proporciona ninguna información sobre el tamaño predeterminado.

El tamaño máximo de las claves también puede variar según los archivos jurisdiccionales utilizados por las diferentes versiones de Suns JVM.

+0

esto es malo .. así que no puedo acaba de establecer un tamaño y supongo que funcionará bien en todas partes. –

+0

el tamaño también puede ser limitado dependiendo de la configuración jurisdiccional. – BenM

+0

parece que el AES puede ser siempre de 128 bits (16 bytes) –

0

KeyGenerator tiene varios métodos init(); debe llamar a uno de ellos antes de generar una clave. El Javadoc para KeyGenerator especifica que en caso de que no llame al método init(), entonces "cada proveedor debe suministrar (y documentar) una inicialización predeterminada".

Esto es específico del proveedor. Dado que inicializa el generador de claves con el nombre del algoritmo "AES", se puede suponer que obtendrá una clave con un tamaño adecuado para AES, es decir, 128, 192 o 256 bits (16, 24 y 32 bytes, respectivamente). Pero cuál obtiene depende del proveedor real, que puede depender de la JVM y posiblemente de su configuración.

0

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html

Cada implementación de la plataforma Java se requiere para apoyar las siguientes transformaciones de cifrado estándar con los KeySizes entre paréntesis:

AES/CBC/NoPadding (128) 
AES/CBC/PKCS5Padding (128) 
AES/ECB/NoPadding (128) 
AES/ECB/PKCS5Padding (128) 
DES/CBC/NoPadding (56) 
DES/CBC/PKCS5Padding (56) 
DES/ECB/NoPadding (56) 
DES/ECB/PKCS5Padding (56) 
DESede/CBC/NoPadding (168) 
DESede/CBC/PKCS5Padding (168) 
DESede/ECB/NoPadding (168) 
DESede/ECB/PKCS5Padding (168) 
RSA/ECB/PKCS1Padding (1024, 2048) 
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) 
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048) 
Cuestiones relacionadas