Español

Herramientas de desarrollo · Codificador y decodificador Base64

PEM explicó: por qué los certificados y claves son Base64 entre BEGIN y END

· Antecedentes

base64 codificación

Armadura PEM: etiquetas BEGIN y END y envoltura Base64 de columna 64 del binario DER
Ilustración de vector original de ToolAcre

Un archivo PEM es un binario DER envuelto en Base64 con líneas de armadura etiquetadas. Esta publicación explica los orígenes del formato, sus reglas de línea y lo que puedes y no puedes aprender al decodificar uno.

El certificado que "parece texto" pero no se analiza: un error tipográfico en el encabezado, un retorno de carro perdido y el formato debajo

Un archivo PEM es un binario codificado en Base64 envuelto en etiquetas de texto. El nombre proviene de Privacy-Enhanced Mail (RFC 1421, 1992), que utilizaba este formato para mensajes cifrados. El formato sobrevive hoy en los certificados TLS, claves SSH y claves GPG. La estructura es simple: una línea que dice -----BEGIN CERTIFICATE----- (o BEGIN PRIVATE KEY, BEGIN PUBLIC KEY, etc.), seguida de 64 líneas de caracteres de texto base64, seguidas de -----END CERTIFICATE-----.

El cuerpo base64 se decodifica en un formato binario llamado DER (Reglas de codificación distinguidas), que es una forma de serializar datos estructurados (específicamente, estructuras ASN.1). Decodificar base64 te da binario; leer el binario requiere comprender ASN.1, que es complejo. La armadura PEM existe porque los archivos binarios son difíciles de enviar por correo electrónico y editar. Un archivo de certificado en formato binario puro se corrompería al pasar a través de sistemas de correo antiguos, USENET o formularios web.

La armadura de texto visible en un bloque PEM: etiquetas alrededor de un cuerpo Base64

Al codificar el binario en base64 y envolverlo en etiquetas de texto, todo el certificado se convierte en texto ASCII de 7 bits que sobrevive a cualquier transporte. Un editor de texto puede abrirlo; un sistema de correo no lo corromperá. Las líneas -----BEGIN y -----END son etiquetas para humanos y herramientas automatizadas; marcan claramente qué tipo de datos hay dentro. Un certificado tiene la etiqueta CERTIFICADO; una clave privada se denomina CLAVE PRIVADA.

La etiqueta no está verificada por software criptográfico; es sólo una pista para los humanos y las herramientas. El límite de líneas de caracteres 64 en PEM proviene del RFC 1421 y del mismo razonamiento MIME que el correo electrónico base64: los sistemas de correo antiguos tenían límites de longitud de líneas y los caracteres 64 cabían en una terminal de los años 80. PEM ajusta la salida base64 en 64 caracteres con un final de línea (CR LF en Windows, LF en Unix).

Desde texto etiquetado hasta bytes decodificados: este repositorio no establece el historial de formato

Al decodificar un certificado PEM, el analizador debe eliminar las líneas de armadura (-----BEGIN..., -----END...) y los saltos de línea, luego decodificar en base64 el resto. Un retorno de carro perdido o una etiqueta que no coincide pueden interrumpir el análisis. El ajuste de línea no forma parte del estándar base64 (RFC 4648 base64 no está ajustado); es específico de PEM. Dentro de base64 hay binario codificado en DER. DER es ASN.1 (Notación de sintaxis abstracta), una especificación compleja para representar estructuras de datos.

Un certificado es un registro estructurado que contiene un nombre de sujeto, una clave pública, una firma y metadatos. ASN.1 no describe los bytes directamente; describe cómo se debe codificar la estructura.

Anatomía del bloque como entrada para esta herramienta: elimine etiquetas y pase solo el cuerpo Base64

La codificación comienza con tripletes de valor de longitud de etiqueta. Por ejemplo, una SECUENCIA en ASN.1 está codificada como etiqueta 0x30, seguida de la longitud del contenido y luego del contenido mismo. Un certificado siempre comienza con los bytes 0x30 0x82 (secuencia, longitud codificada en dos bytes), que aparece como MII en base64.

Verificar un certificado sin analizarlo: los primeros tres caracteres del cuerpo de un certificado PEM casi siempre son MII (que es 0x30 0x82 en base64, el inicio de una SECUENCIA). Si un bloque PEM no se decodifica a 0x30, la base64 está corrupta o la etiqueta es incorrecta. La herramienta de codificación y decodificación Base64 puede decodificar el cuerpo y mostrarle el hexadecimal: pegue las líneas base64 (sin las armaduras -----BEGIN y END), elimine los saltos de línea y decodifique.

Qué expone la decodificación: bytes binarios, campos de certificado no analizados

Si la salida es binaria y comienza con 30 82, es probable que sea una estructura de certificado válida. Si es galimatías o texto, la decodificación falló o la base64 es incorrecta. Errores comunes de PEM: una etiqueta que no coincide (por ejemplo, un cuerpo de certificado con una etiqueta de CLAVE PRIVADA), un problema de final de línea de Windows (algunos analizadores se ahogan con CRLF), un error tipográfico en la línea de blindaje (espacios o caracteres adicionales) o faltan saltos de línea.

Las herramientas esperan -----BEGIN CERTIFICATE----- no -----BEGIN CERTIFICATE----- o BEGIN CERTIFICATE. Copiar y pegar un PEM desde un navegador web o un PDF puede introducir comillas Unicode o comillas tipográficas en lugar de comillas ASCII, rompiendo la etiqueta. Pegar una clave privada en un campo de certificado es un error común; el analizador lo rechazará porque la etiqueta no coincide. PEM admite múltiples bloques en un archivo.

Ejemplo resuelto: decodificar un cuerpo corto e inspeccionar bytes sin afirmar una firma de certificado

Un archivo de clave SSH puede contener una clave privada (etiquetada CLAVE PRIVADA) y una clave pública (etiquetada CLAVE PÚBLICA), o varios bloques de certificados. Un analizador lee el archivo desde la parte superior, buscando líneas que comiencen con -----BEGIN. Cuando encuentra uno, lee hasta -----END con la etiqueta coincidente, extrae y decodifica en base64 el cuerpo y lo procesa. Luego continúa buscando el siguiente bloque.

Una cadena de certificados concatenada accidentalmente (múltiples bloques PEM para un certificado y sus intermedios) en un archivo es válida si todas las etiquetas son correctas. El formato PEM se estandarizó para el correo con privacidad mejorada (RFC 1421) a principios de los años 1990.

Lo que esto no cubre: análisis de estructuras ASN.1, cifrado de clave privada y paquetes PKCS#12

RFC 7468 (2015) modernizó la definición, aclarando las reglas de longitud de línea, el formato de línea de armadura y los casos extremos. La mayoría de las herramientas y estándares hacen referencia al RFC 7468 ahora. Existen otros formatos de binario a texto (como DER a hexadecimal para algunos protocolos), pero PEM con etiquetas base64 y ASCII es el estándar de facto para criptografía y TLS porque es legible por humanos, texto sin formato y fácil de copiar o enviar.

Creación de un bloque PEM: tome el binario DER (por ejemplo, un certificado de una biblioteca criptográfica), codifíquelo en base64, ajuste el resultado en 64 caracteres con saltos de línea y rodéelo con -----BEGIN CERTIFICATE----- y -----END CERTIFICATE----- líneas. Análisis de un bloque PEM: busque las líneas -----BEGIN y -----END, extraiga el cuerpo base64 (eliminando la armadura y los saltos de línea), decodifique base64 para obtener el binario, luego analice el binario DER y ASN.1.

Conclusión: PEM es Base64 con etiquetas: cómo el codificador y decodificador Base64 le brinda un lugar local para probar el cuerpo Base64 de un bloque, completamente en el navegador.

La mayoría de las herramientas automatizan esto; rara vez se construye PEM a mano. Pero comprender la estructura es útil al depurar un error de análisis o al verificar manualmente un certificado. Un certificado PEM parece texto, pero el contenido son datos binarios. Leer las etiquetas de inicio y fin no indica qué contiene el certificado; debe decodificar base64 y analizar ASN.1 para ver el nombre del sujeto, la clave pública, el emisor y el vencimiento.

La herramienta codificadora y decodificadora Base64 puede decodificar el cuerpo para que pueda inspeccionar los primeros bytes. Para un análisis completo, necesita un analizador ASN.1 (la mayoría de los lenguajes de programación tienen bibliotecas para esto). La idea clave es que PEM es un formato contenedor: contiene todos los datos codificados en DER, no sólo los certificados. La etiqueta indica el uso previsto, pero el analizador debe manejar el tipo de datos correctamente.