Cuando se importa un archivo PKCS12 en un navegador web o en un almacén de Windows, se le solicita al usuario una contraseña de clave privada. ¿Cómo gestiona esta contraseña el navegador o el sistema operativo? ¿Es seguro?
Cuando se importa un archivo PKCS12 en un navegador web o en un almacén de Windows, se le solicita al usuario una contraseña de clave privada. ¿Cómo gestiona esta contraseña el navegador o el sistema operativo? ¿Es seguro?
La contraseña que se le solicita es la que se usa para bloquear el archivo PKCS # 12. Los archivos PKCS # 12 son en realidad archivos bastante genéricos, extensibles de muchas maneras, pero en la práctica son contenedores protegidos por contraseña para uso privado. Llaves y certificados. La "protección de contraseña" realmente es cifrado basado en contraseña : la contraseña se convierte en una clave de cifrado utilizando una clave Función de derivación : en ese caso, es PBKDF2 .
PBKDF2 intenta proteger la contraseña contra ataques de fuerza bruta al ser intrínsecamente lento, al usar muchas iteraciones internas. El número de iteraciones es configurable y fue elegido por el sistema que generó el archivo PKCS # 12; un mayor número de iteraciones implica mayor seguridad (ya que hace que cada contraseña sea más cara) pero también un mayor costo de uso (ya que hace que cada contraseña sea más cara).
En cualquier caso, una vez que el usuario ha solicitado la contraseña y se ha convertido en una clave de cifrado con PBKDF2, el contenido del archivo PKCS # 12 se descifra (en la RAM de la computadora). Lo que sucede después no tiene relación alguna con el archivo PKCS # 12: ese archivo es simplemente un buque de transporte; una vez que su computadora tiene la clave privada en su RAM, el archivo PKCS # 12 (y su contraseña) deja de ser de alguna utilidad. Como está haciendo una importación , su navegador o sistema operativo se hace cargo del almacenamiento y la protección de la clave privada, y lo hace utilizando métodos que no se ven afectados por el archivo PKCS # 12 o su contraseña Windows (por lo tanto, Internet Explorer) intentará almacenar la clave privada encriptada con su contraseña de sesión, aunque puede agregar una contraseña adicional.
Desde un punto de vista de alto nivel, si está importando una clave privada en su máquina, esto significa que:
En general, este tipo de cosas se consideran subóptimas. Si la clave es suya, entonces debería haber sido generada en su propia computadora, y la clave privada nunca debería haberla dejado. El escenario de uso de PKI recomendado es que genere su par de claves en su computadora, envíe la clave pública a la CA (como parte de una solicitud de certificado) y reciba nuevamente el certificado recién emitido. En ese escenario, solo la información pública viaja y no hay ningún archivo PKCS # 12 en absoluto.
Para agregar a la respuesta de Thomasm Pornin, considere un PKCS # 12 que fue creado por OpenSSL para contener uno o más certificados y una clave privada.
Los certificados se cifrarán como un conjunto, de forma predeterminada utilizando RC2 con una clave de 40 bits ( "rc2-40-cbc"
). La clave se deriva de la contraseña, un salt aleatorio de 8 bytes y 2048 iteraciones de SHA1 usando PKCS # 5 v1.5 ( "PBE-SHA1-RC2-40"
).
Esto simplemente combina los bytes de la contraseña y los bytes de sal y calcula de forma recursiva el hash SHA1. Los primeros cinco bytes del hash final son la clave RC2 y los ocho siguientes, el IV.
La clave privada se cifrará de forma predeterminada mediante 3DES ( "des-ede3-cbc"
). La clave se deriva de la contraseña, una sal aleatoria de 8 bytes (que es diferente que la sal utilizada para los certificados) y 2048 iteraciones de SHA1 usando PKCS # 12 PBE ( "PBE-SHA1-3DES"
). Esto es un poco más complicado.
Deriva la clave y IV por separado de diferentes puntos de inicio conocidos. También convierte la contraseña a big-endian Unicode. Pero más o menos, es un hash SHA1 computado recursivamente y los primeros bytes del hash final dan la clave o IV.
Tienes que pedir específicamente a OpenSSL que use PKCS # 5 v2.0, también conocido como PBKDF2 , por ejemplo, en < a href="https://www.openssl.org/docs/manmaster/apps/pkcs12.html"> línea de comando con keypbe alg
y / o certpbe alg
:
estas opciones permiten el algoritmo utilizado para cifrar la clave privada y Certificados a seleccionar. Cualquier PKCS # 5 v1.5 o PKCS # 12 algoritmo PBE Se puede usar el nombre (consulte la sección NOTAS para obtener más información). Si un cifrado nombre (como se especifica por el comando list-cipher-algorithms) entonces se usa con PKCS # 5 v2.0. Por razones de interoperabilidad es Es recomendable utilizar solo los algoritmos PKCS # 12.
El archivo PKCS # 12 en sí no está cifrado. Puede leerlo y encontrar el PBE y los cifrados utilizados en ambos casos (para certificados y clave privada). También puedes leer tanto las sales como la iteración. Por lo tanto, su clave privada es tan segura como si fuera un ataque de fuerza bruta al conocer el PBE, la sal, las iteraciones, el cifrado y el texto cifrado . Sin embargo, ese es un obstáculo bastante grande para superar.
Nota: Es posible que tenga problemas para importar el PKCS # 12 predeterminado de un software que sea compatible con FIPS-140 porque no le gusta PBE-SHA1-RC2-40. OpenSSL tiene un interruptor de línea de comando descert
para solicitar PBE-SHA1-3DES para el cifrado del certificado (consulte enlace anterior ).
Lea otras preguntas en las etiquetas public-key-infrastructure key-management pkcs12