Saltar al contenido

Formato PKCS # 1 y PKCS # 8 para RSA privado key

Después de tanto trabajar ya encontramos la contestación de esta incógnita que algunos usuarios de esta web tienen. Si deseas aportar algo no dudes en aportar tu comentario.

Solución:

(Expandir más de lo que creo que es apropiado para una edición).

PKCS1, disponible en varias versiones como rfcs 2313 2437 3447 y 8017, se trata principalmente de utilizar el algoritmo RSA para criptografía, incluido el cifrado, el descifrado, la firma y la verificación. Pero dado que la criptografía se usa a menudo entre sistemas o al menos programas, es conveniente tener un formato interoperable definido para keys, y PKCS1 define formatos bastante mínimos para RSA público y privado keys en el apéndice A.1. Como Luke dio a entender, esto usa ASN.1 codificado convencionalmente como DER, que es un estándar para la codificación interoperable de datos de casi cualquier tipo.

PKCS8 disponible como rfc5208, por otro lado, es un estándar para el manejo privado keys para todos los algoritmos, no solo RSA. También usa ASN.1 DER, y comienza simplemente combinando un AlgorithmIdentifier, una estructura ASN.1 (primero) definida por X.509 que identifica un algoritmo de manera no muy sorprendente, con un OCTET STRING que contiene una representación de la key de una manera que depende del algoritmo. Para el algoritmo RSA, identificado por un AlgorithmIdentifier que contiene un OID que significa rsaEncryption, OCTET STRING contiene el PKCS1 privado key codificación. PKCS8 también permite ‘attributes’para ser agregado, pero esto rara vez se usa. (Por ejemplo, no se puede convertir .jks a .pkcs12: exceso de privado key)

PKCS8 también ofrece una opción para cifrar los datos privados. key, utilizando cifrado basado en contraseña (en la práctica, aunque no se requiere explícitamente). Esto es común, especialmente cuando PKCS8 se usa como la parte de clave privada de PKCS12 / PFX, aunque no es universal.

Dado que la mayoría de los sistemas actuales necesitan admitir múltiples algoritmos y desean poder adaptarse a los nuevos algoritmos a medida que se desarrollan, se prefiere PKCS8 para las claves privadas y un esquema similar de cualquier algoritmo definido por X.509 para las claves públicas. Aunque PKCS12 / PFX a menudo se prefiere a ambos.

Ninguno de estos tiene nada que ver con certificados u otros objetos PKI como CSR, CRL, OCSP, SCT, etc. Estos están definidos por otros estándares, incluidos algunos otros miembros de la serie PKCS, aunque pueden usar el keys definido por estos estándares.

Formato PEM como dijo Luke, es una forma de formatear, o (super) codificar, (casi cualquier) datos binarios / DER de una manera que sea más conveniente. Se deriva de un intento de la década de 1990 de crear un correo electrónico seguro llamado Correo con privacidad mejorada, por lo tanto, PEM. En aquellos días, los sistemas de correo electrónico a menudo podían transmitir, o al menos transmitir de manera confiable, solo texto imprimible con un conjunto de caracteres limitado y, a menudo, solo una longitud de línea limitada, por lo que PEM codificaba datos binarios como base64 con una longitud de línea de 64. El esquema PEM en sí no era muy exitoso y ha sido reemplazado por otros como PGP y S / MIME, pero el formato que definió todavía se usa. Hoy en día, los sistemas de correo electrónico a menudo poder transmitir datos binarios, pero como Luke dijo, copiar y pegar a menudo solo puede manejar caracteres mostrados, por lo que PEM sigue siendo útil y, además, más fácil de reconocer para los humanos.

Para ser más exactos, PEM codifica algunos datos, como, entre otros, PKCS1 o PKCS8 key o un certificado, CSR, etc., como:

  • una línea que consta de 5 guiones, la palabra BEGIN, una o algunas palabras (separadas por espacios) que definen el tipo de datos y 5 guiones

  • un encabezado de estilo rfc822 opcional (y raro), terminado por una línea vacía

  • base64 de los datos, divididos en líneas de 64 caracteres (excepto el último); algunos programas, en cambio, usan el límite MIME (un poco más nuevo) de 76 caracteres

  • una línea como la línea BEGIN pero con END en su lugar

Algunos lectores verifican / hacen cumplir la longitud de la línea y la línea END y otros no, por lo que si se equivoca, puede crear archivos que a veces funcionan y otras no, lo cual es molesto de depurar.

Así, por ejemplo, un PKCS1 privado key (sin cifrar) en PEM se ve así:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCjcGqTkOq0CR3rTx0ZSQSIdTrDrFAYl29611xN8aVgMQIWtDB/
lD0W5TpKPuU9iaiG/sSn/VYt6EzN7Sr332jj7cyl2WrrHI6ujRswNy4HojMuqtfa
b5FFDpRmCuvl35fge18OvoQTJELhhJ1EvJ5KUeZiuJ3u3YyMnxxXzLuKbQIDAQAB
AoGAPrNDz7TKtaLBvaIuMaMXgBopHyQd3jFKbT/tg2Fu5kYm3PrnmCoQfZYXFKCo
ZUFIS/G1FBVWWGpD/MQ9tbYZkKpwuH+t2rGndMnLXiTC296/s9uix7gsjnT4Naci
5N6EN9pVUBwQmGrYUTHFc58ThtelSiPARX7LSU2ibtJSv8ECQQDWBRrrAYmbCUN7
ra0DFT6SppaDtvvuKtb+mUeKbg0B8U4y4wCIK5GH8EyQSwUWcXnNBO05rlUPbifs
DLv/u82lAkEAw39sTJ0KmJJyaChqvqAJ8guulKlgucQJ0Et9ppZyet9iVwNKX/aW
9UlwGBMQdafQ36nd1QMEA8AbAw4D+hw/KQJBANJbHDUGQtk2hrSmZNoV5HXB9Uiq
7v4N71k5ER8XwgM5yVGs2tX8dMM3RhnBEtQXXs9LW1uJZSOQcv7JGXNnhN0CQBZe
nzrJAWxh3XtznHtBfsHWelyCYRIAj4rpCHCmaGUM6IjCVKFUawOYKp5mmAyObkUZ
f8ue87emJLEdynC1CLkCQHduNjP1hemAGWrd6v8BHhE3kKtcK6KHsPvJR5dOfzbd
HAqVePERhISfN6cwZt5p8B3/JUwSR8el66DF7Jm57BM=
-----END RSA PRIVATE KEY-----

Lo mismo key en PKCS8 sin cifrar:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKNwapOQ6rQJHetP
HRlJBIh1OsOsUBiXb3rXXE3xpWAxAha0MH+UPRblOko+5T2JqIb+xKf9Vi3oTM3t
KvffaOPtzKXZauscjq6NGzA3LgeiMy6q19pvkUUOlGYK6+Xfl+B7Xw6+hBMkQuGE
nUS8nkpR5mK4ne7djIyfHFfMu4ptAgMBAAECgYA+s0PPtMq1osG9oi4xoxeAGikf
JB3eMUptP+2DYW7mRibc+ueYKhB9lhcUoKhlQUhL8bUUFVZYakP8xD21thmQqnC4
f63asad0ycteJMLb3r+z26LHuCyOdPg1pyLk3oQ32lVQHBCYathRMcVznxOG16VK
I8BFfstJTaJu0lK/wQJBANYFGusBiZsJQ3utrQMVPpKmloO2++4q1v6ZR4puDQHx
TjLjAIgrkYfwTJBLBRZxec0E7TmuVQ9uJ+wMu/+7zaUCQQDDf2xMnQqYknJoKGq+
oAnyC66UqWC5xAnQS32mlnJ632JXA0pf9pb1SXAYExB1p9Dfqd3VAwQDwBsDDgP6
HD8pAkEA0lscNQZC2TaGtKZk2hXkdcH1SKru/g3vWTkRHxfCAznJUaza1fx0wzdG
GcES1Bdez0tbW4llI5By/skZc2eE3QJAFl6fOskBbGHde3Oce0F+wdZ6XIJhEgCP
iukIcKZoZQzoiMJUoVRrA5gqnmaYDI5uRRl/y57zt6YksR3KcLUIuQJAd242M/WF
6YAZat3q/wEeETeQq1wrooew+8lHl05/Nt0cCpV48RGEhJ83pzBm3mnwHf8lTBJH
x6XroMXsmbnsEw==
-----END PRIVATE KEY-----

y PKCS8 cifrado:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIkErtXjGCalMCAggA
MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBApOUG3MKrBC/5bDBH/s5VfBIIC
gN5o1aJxvJYbp2oA/quz+BnCFn8ts3wPPOcqarHddy0L/VH3BdqFNbnPZEaDnvDl
kqChRsti4AAeX18ItMeAyNLNFv0J4mfI8Q5E7iEnPp+dTsZqNfVIJe2NGxOS7zp2
oQQIZVgjW0akDehv6ZDN796qDBlMY2g80wbBrzVgMJu/byG9IQQjngUE9QNGwrsj
7lYSprxjfTZOk1aGBD0d/HsmetIJvCeJ2i/5xAiGgZRrSWMC6aN7Zlra3eIvHQTB
aKZ8/0IT3iKSr6FpkEopOQae8biiTEVGw9D339P3qOSs2ChWWF+OV2sEA67w6q5j
pz6Poc5jgq4FOcf06GdcVa4tst2uykNJCW0wHpcUR1Tr9ILLhrZPYBYVQWW53Eee
o4+mqW2YORdG3a/jLHpEjL0Vdg95QNpdZoMv8plotN1MUBLebd05aCe5hJUb/x74
3GTwmRGmKoHOhOO3hhUaMCmZIg1xPlNT3jqxrZDoATBeONbaFP8OOkeucVYHbdUO
Ad7z6J8XuZDoxM0BVrGykEiQL2nAOccdsGoC33C9hjkqgU8G9jWElbynJlVqv+1a
lFHWjX5lB6ueiY/rClpVlLmXGB83OVPlo70FV0B9rhRChyB1IJJRYPFDJHSHJNu+
Pqay8zw82Gh/G+TWH/JCLm5YjX55ZSFMUmvwOLaxyQpmAGNH6dIBTAaSctVA7UrV
jm7m+5T7seiNYNEi19vDJipgr0GbX8+np47VrsJDxsS20wTeA/9ltD0xXwNrEKHd
2Nv/1OaCgnBQHIGULgEn9pT3/vU87bBHYjVdrWoUmqd9zFYtdImQE9u8IKTxTe4R
UPRGHqltz4uOjbD1epkSGe0=
-----END ENCRYPTED PRIVATE KEY-----

Observe que el tipo de datos en cada archivo (u otra unidad de datos) se reconoce fácilmente desde las líneas BEGIN / END. El actual key los valores de los datos no se leen fácilmente sin herramientas, aunque solo el tercero realmente necesita información secreta (la contraseña utilizada para cifrar).

PKCS # 1 y PKCS # 8 (Estándar de criptografía de clave pública) son estándares que gobiernan el uso de primitivas criptográficas particulares, relleno, etc. Ambos definen formatos de archivo que se utilizan para almacenar keys, certificados y otra información relevante.

PEM y DER son un poco más interesantes. DER es la codificación ASN.1 para keys y certificados, etc., sobre los que podrá buscar en Google. Privado keys y los certificados se codifican mediante DER y se pueden guardar directamente así. Sin embargo, estos archivos son binarios y no se pueden copiar y pegar fácilmente, por lo que muchas (si no la mayoría) de las implementaciones también aceptan archivos codificados con PEM. PEM es básicamente DER codificado en base64: agregamos un encabezado, metadatos opcionales y los datos DER codificados en base64 y tenemos un archivo PEM.

Aquí tienes las reseñas y valoraciones

Ten en cuenta dar difusión a esta noticia si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *