Hemos estado buscado en internet para así regalarte la solución para tu duda, si continúas con dificultades déjanos la pregunta y contestamos con gusto.
Solución:
Todas las especificaciones para el formato PKCS # 12 se definen en RFC7292.
El breve resumen es que un .p12
archivo (y supongo que también Microsoft es más antiguo PFX
formato, pero nunca he trabajado con ellos) es solo un formato contenedor que especifica la estructura de este archivo, pero no dice nada sobre qué tipo de datos deben incluirse en él.
Para usar una analogía muy mala, la especificación de Microsoft Excel .xlsx
formato especifica la estructura de un archivo de guardado de Excel, pero no le dice nada sobre qué datos o fórmulas puede contener; que está controlado por la versión de Excel que está ejecutando.
Si tuvieras que abrir un .p12
en un editor hexadecimal, encontrará que uno de los campos en el encabezado es AlgorithmIdentifier: _____
donde el programa que creó el .p12
registros A) qué algoritmo de cifrado se utilizó para cifrar los datos, y B) qué algoritmo hash se utilizó para convertir la contraseña en un key. Hasta donde yo sé, no hay una lista definitiva de lo que está permitido aquí; el programa que crea el .p12
puede usar cualquier AlgorithmIdentifier
quiere, incluso inventando uno.
Por ejemplo, si estuviera escribiendo software para leer y escribir protegido por contraseña .p12
archivos, podría configurar AlgorithmIdentifier: AES256WithPBKDF2
y eso estaría bien. Pero también podría establecer AlgorithmIdentifier: MikesCipherWithCatDoodles
, y siempre que el software en el otro extremo sepa qué hacer con eso, aún está bien.
TL; DR: El formato PKCS # 12 solo especifica la estructura del archivo, no enumera qué algoritmos son legales, por lo que el algoritmo de cifrado real utilizado dependerá del software que se utilizó para crear el .p12
Archivo.
Si desea saber qué algoritmos se utilizan para proteger su .p12
archivos, busque documentación sobre el software que está utilizando para leerlos / escribirlos.
Si tiene un archivo .pfx específico que desea verificar, puede determinar qué métodos de cifrado se han utilizado usando openssl:
openssl pkcs12 -info -in cert.pfx -noout
Esto podría darte:
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Esto requiere que conozca la contraseña del archivo .pfx. Si no conoce la contraseña, aún puede encontrar el método de cifrado más externo utilizando:
openssl pkcs12 -info -in cert.pfx -nomacver -noout -passin pass:unknown
Esto da, por ejemplo:
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Este archivo de certificado en particular fue generado por openssl con los parámetros predeterminados, y parece que tiene:
- Una capa de cifrado externa que utiliza RC2 de 40 bits con SHA-1. La capa de cifrado externa contiene el certificado.
- Una capa de encriptación interna que usa 3DES con SHA-1. La capa de encriptación interna contiene el privado key.
Creo que esto es inseguro porque un atacante puede romper el cifrado más externo con una fuerza bruta fácil (el cifrado de 40 bits más RC2 tiene varias vulnerabilidades) y luego usar la misma contraseña en la capa de cifrado interna. Sin embargo, esto probablemente justifique una investigación adicional.
La respuesta de Mike Ounsworth es correcta pero incompleta. PKCS # 12 especifica un formato de contenedor, pero también especifica algunos conjuntos de algoritmos propios:
El esquema de cifrado PBES1 definido en PKCS # 5 proporciona una serie de identificadores de algoritmo para derivar keys y IV; aquí, especificamos algunos más, todos los cuales utilizan el procedimiento detallado en los Apéndices B.2 y B.3 para construir keys (y IV, cuando sea necesario). Como implican sus nombres, todos los identificadores de objetos a continuación utilizan la función hash SHA-1.
pkcs-12PbeIds OBJECT IDENTIFIER ::= pkcs-12 1 pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= pkcs-12PbeIds 1 pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= pkcs-12PbeIds 2 pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= pkcs-12PbeIds 3 pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= pkcs-12PbeIds 4 pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= pkcs-12PbeIds 5 pbewithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= pkcs-12PbeIds 6
Y si se da cuenta de la cita anterior, menciona PKCS # 5 para los algoritmos. PKCS # 5 especifica dos tipos de algoritmos: PBES1 y PBES2.
Los algoritmos PBES1 más antiguos son solo una lista de conjuntos de algoritmos:
pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= pkcs-5 1
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= pkcs-5 4
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= pkcs-5 3
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= pkcs-5 6
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= pkcs-5 10
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= pkcs-5 11
PBES2 le permite mezclar y combinar los algoritmos de cifrado y PRF por separado (a diferencia de los conjuntos de algoritmos predefinidos). Solo enumeraré la parte relevante de la tabla de contenido aquí para que pueda hacerse una idea:
B.1. Pseudorandom Functions . . . . . . . . . . . . . . . . . 28
B.1.1. HMAC-SHA-1 . . . . . . . . . . . . . . . . . . . . . 28
B.1.2. HMAC-SHA-2 . . . . . . . . . . . . . . . . . . . . . 29
B.2. Encryption Schemes . . . . . . . . . . . . . . . . . . . 29
B.2.1. DES-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 30
B.2.2. DES-EDE3-CBC-Pad . . . . . . . . . . . . . . . . . . 30
B.2.3. RC2-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 30
B.2.4. RC5-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 31
B.2.5. AES-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 32
Volviendo a PKCS # 12, también especifica algoritmos MAC para todo el archivo (no para entradas individuales):
Este documento utiliza un tipo particular de MAC llamado HMAC [11] [20], que se puede construir a partir de una variedad de funciones hash. Tenga en cuenta que las especificaciones en [20] y [11] difieren algo de la especificación en [9]. La función hash en la que se basa HMAC se identifica en MacData, que contiene el MAC; para esta versión de este estándar, la función hash puede ser una de las siguientes: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 o SHA-512/256 [10].
Los mismos algoritmos MAC también se especifican en PKCS # 5:
B.3. Message Authentication Schemes . . . . . . . . . . . . . 33
B.3.1. HMAC-SHA-1 . . . . . . . . . . . . . . . . . . . . . 33
B.3.2. HMAC-SHA-2 . . . . . . . . . . . . . . . . . . . . . 33
Finalmente, como dice la respuesta de Mike Ounsworth, puede elegir cualquier algoritmo que desee, incluso si no está en PKCS # 12 o PKCS # 5. De todos modos, eso debe tener un OID para su uso en la representación ASN.1 del archivo p12.