Pregunta

Cuando usted está construyendo un almacén de claves con el Java Keytool utilidad, ¿cómo son las claves protegidas?He leído a través de la documentación, y me doy cuenta de que cada clave privada tiene una clave de contraseña y, a continuación, la tienda dispone de un almacén de contraseña.

Pero ¿qué mecanismo se utiliza para proteger los datos?Es un sistema de cifrado?Si es así, ¿cuál es el algoritmo?Estoy enfocado específicamente en cómo keytool ¿la protección cuando se está construyendo un archivo JKS.

¿Fue útil?

Solución

Sol predeterminado de JKS almacén de claves utiliza un algoritmo propietario, principalmente para conseguir alrededor de la exportación de restricciones en algoritmos estándar.El algoritmo está implementado en esta clase,

  sun.security.provider.KeyProtector

El es la descripción del algoritmo,

Esta es una implementación de un Sol de propiedad, exportable algoritmo diseñado para su uso para proteger o recuperar el texto sin formato de la versión de) teclas sensibles.Este algoritmo no está pensado como un propósito general de cifrado.Esto es cómo funciona el algoritmo para la protección de la clave:p - contraseña de usuario s - aleatorio de sal X - xor clave P - a-ser protegido con clave Y clave protegida R - lo que se almacena en el almacén de claves Paso 1:Tome la contraseña del usuario, anexar al azar de la sal (de tamaño fijo), y hash:d1 = digest(p, s), Almacén d1 en X.Paso 2:Tome la contraseña del usuario, anexar el resumen del resultado del paso anterior, y hash:dn = digest(p, dn-1).Tienda de dn en X (anexar a la previamente almacenada resúmenes).Repita este paso hasta que la longitud de X coincide con la longitud de la clave privada P.Paso 3:XOR X y P, y almacenar el resultado en Y:Y = X XOR P.Paso 4:Tienda s, y y digerir(p, P) en el resultado de búfer R:R = s + Y + digerir(p, P), donde "+" denota la concatenación.(NOTA:digest(p, P) se almacena en el resultado de buffer, de modo que cuando la clave está recuperado, puede verificar si la clave recuperada, de hecho, coincide con la clave original.) R se almacena en el almacén de claves.La clave protegida se recupera de la siguiente manera:Step1 y Step2 son los mismos que el anterior, excepto que la sal no es generado aleatoriamente, pero tomado de el resultado R de el paso 4 (la primera longitud de la(s) bytes).Paso 3 (operación XOR) de los rendimientos de la plaintext clave.Luego concatenar la contraseña con la clave recuperada, y comparar con el último longitud(digest(p, P)) bytes de R.Si coinciden, la clave recuperada es de hecho la misma tecla que la clave original.

Otros consejos

El algoritmo utilizado depende del almacén de claves que se utiliza (que podría ser una tarjeta inteligente, por ejemplo).

El almacén de claves por defecto que viene con el JDK de Sun crea un token suave (en el archivo de disco) con tres opciones de cifrado :

  1. por defecto: "JKS", un tipo de almacén de claves de propiedad (formato). No estoy seguro sobre el algoritmo.

  2. "jceks", un formato propietario alternativa, utilizando 3-DES

  3. "pkcs12", un formato estándar (OpenSSL puede leerlo), con varias opciones, pero por lo general 3-DES para claves privadas y certificados para RC2-40.

En los tres casos se dispone de los datos privados encriptados (simétricamente, el uso de contraseñas individuales), y la integridad de todo el almacén de claves protegido por un resumen criptográfico (usando la contraseña del almacén de claves).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top