Las firmas digitales funcionan

 Las firmas digitales funcionan con un par de claves criptográficas: una clave privada (que solo tú posees y nunca debes compartir) y una clave pública (que puede ser conocida por cualquiera). La Autoridad Certificadora (CA), en este caso la FIREL del Consejo de la Judicatura Federal, es la entidad que certifica que tu clave pública realmente te pertenece.

Voy a explicarte paso a paso el proceso de emisión de certificados FIREL y cómo funciona la firma digital.


🔹 ¿Cómo funciona el proceso en FIREL?

  1. Generación de la llave privada (.key) y solicitud de certificado (.req)

    • Cuando te registraste en FIREL, generaste una llave privada (.key).

    • Junto con esta llave, generaste un archivo de solicitud de certificado (.req), que contiene datos sobre ti y tu clave pública.

  2. La autoridad certificadora (FIREL) emite tu certificado digital (.cer)

    • Enviaron tu solicitud (.req) a la FIREL.

    • FIREL verifica tu identidad y te devuelve un certificado digital (.cer).

    • Este certificado contiene tu clave pública y es firmado por la autoridad certificadora.

  3. Creación del archivo PFX (PKCS#12)

    • En el sistema de FIREL, usas tu certificado digital (.cer) y tu llave privada (.key) para generar un archivo PFX (.pfx).

    • Este archivo une tu certificado y tu llave privada en un solo contenedor protegido por contraseña.

  4. Uso del PFX para firmar documentos digitalmente

    • El PFX te permite firmar electrónicamente documentos.

    • Al firmar un documento, usas tu llave privada (.key dentro del .pfx), y la firma se genera de forma única para ese documento.


🔹 ¿Quién tiene qué clave?

ElementoQuién lo posee
Clave privada (.key)Solo tú. Nunca debe compartirse.
Clave pública (dentro del .cer)Cualquiera que tenga tu certificado digital.
Certificado digital (.cer)Es público y lo firma la CA (FIREL).
Archivo PFX (.pfx)Contiene tu clave privada y tu certificado, protegido con contraseña.

La Autoridad Certificadora (FIREL) guarda solo una copia del certificado digital (.cer), pero no tiene acceso a tu llave privada (.key). Por eso, ellos no pueden firmar en tu nombre.


🔹 ¿Cómo funciona la firma digital y cómo verificarla?

Cuando firmas un documento digitalmente:

  1. Tu software de firma usa tu clave privada (.key) para generar un hash cifrado del documento.

  2. Se adjunta tu certificado digital (.cer) para que cualquiera pueda verificar tu firma.

  3. Para validar la firma, cualquier persona puede:

    • Desencriptar el hash usando tu clave pública (que está en tu certificado .cer).

    • Calcular el hash del documento original y compararlo con el hash desencriptado.

    • Si coinciden, la firma es válida y confirma que el documento no ha sido alterado.


🔹 Ejemplo práctico de validación de una firma digital

Imagina que firmaste un contrato digitalmente con tu clave privada:

  1. Tu firma digital contiene:

    • El hash cifrado del contrato.

    • Tu certificado digital (.cer).

  2. Alguien quiere verificar que realmente firmaste el documento:

    • Obtiene tu clave pública del certificado (.cer).

    • Usa la clave pública para desencriptar la firma y obtener el hash original.

    • Calcula el hash del contrato y verifica que coincida con el hash desencriptado.

    • Si coinciden, se confirma que:

      • Tú lo firmaste (autenticidad).

      • No se ha modificado (integridad).

Si alguien cambia el documento, el hash ya no coincidirá y la firma será inválida.


🔹 Resumen

  • La clave privada (.key) es tuya y nunca se comparte.

  • La clave pública está en tu certificado (.cer) y cualquiera puede verla.

  • El archivo PFX (.pfx) contiene ambas claves, pero está protegido con contraseña.

  • La FIREL certifica que tu clave pública te pertenece, pero no tiene tu clave privada.

  • Las firmas digitales aseguran que un documento no ha sido modificado y que lo firmó quien dice haberlo firmado.

Con esta información ya puedes entender el proceso y verificar firmas digitales correctamente. 🚀

Para verificar si alguien firmo un documento puedo realizar un programa que Calcule el hash del documento original y compararlo con el hash desencriptado y Si coinciden, validarlo. Asi de facil? no es necesario conectarme a una api de la autoridad certificadora? o como se que ese certificado es real mente de la autoridad certificadora no entiendo

Sí, tu idea de calcular el hash del documento original y compararlo con el hash desencriptado es correcta para verificar si un documento fue firmado por quien dice haberlo firmado. Pero hay un problema: ¿Cómo sabes que el certificado (.cer) realmente pertenece a esa persona y no es falso? Ahí es donde entra en juego la cadena de confianza y la autoridad certificadora (CA).

Voy a explicártelo paso a paso.


🔹 ¿Cómo saber si un certificado es real?

Cualquiera puede generar un par de claves (.key y .cer), pero lo que hace confiable un certificado es que está firmado por una Autoridad Certificadora (CA) de confianza, en este caso, la FIREL del Consejo de la Judicatura Federal.

Cuando recibes un certificado digital (.cer), no puedes confiar en él solo porque el archivo existe. Debes verificar que la CA que lo firmó es legítima.

📌 Para verificar si un certificado es válido y emitido por una CA confiable:

  1. Obtener el certificado de la CA que emitió el certificado (.cer).

    • FIREL tiene su propio certificado de autoridad certificadora (CA).

    • Este certificado contiene la clave pública de FIREL.

  2. Verificar la firma del certificado (.cer).

    • El certificado de la persona está firmado digitalmente por la CA (FIREL).

    • Usamos la clave pública de FIREL para verificar que el certificado no ha sido alterado.

    • Si la firma es válida, significa que el certificado realmente fue emitido por FIREL y no es un fraude.

  3. Revisar si el certificado está revocado o expirado.

    • Las CA pueden revocar certificados (por ejemplo, si alguien pierde su clave privada).

    • Debes consultar la Lista de Revocación de Certificados (CRL) o usar OCSP (Online Certificate Status Protocol) para asegurarte de que el certificado aún es válido.


🔹 ¿Necesito conectarme a una API de la CA?

Depende. Si solo quieres verificar la firma digital de un documento que ya tienes y confías en el certificado (.cer), no necesitas conectarte a una API. Pero si quieres verificar si el certificado es válido y no ha sido revocado, entonces sí necesitas consultar la CA.

📌 Opciones para verificar certificados contra la CA:

  1. Revisar la CRL (Lista de Revocación de Certificados).

    • FIREL publica una lista con los certificados revocados. Puedes descargarla y verificar si el certificado está en esa lista.

  2. Consultar el estado del certificado con OCSP.

    • Algunas CA ofrecen un servicio en línea llamado OCSP para verificar en tiempo real si un certificado sigue siendo válido.

  3. Usar una API de validación.

    • Algunas instituciones proporcionan APIs para verificar la autenticidad de certificados en tiempo real.

En resumen:

  • Si confías en el certificado y solo quieres verificar una firma, puedes hacerlo localmente.

  • Si necesitas confirmar que el certificado no ha sido revocado o modificado, necesitas consultar la CA.


🔹 Ejemplo práctico de verificación de una firma digital

Para verificar la firma digital de un documento sin conectarte a la CA, puedes hacer esto en Python con la librería cryptography:

1️⃣ Cargar el certificado digital (.cer)

from cryptography import x509
from cryptography.hazmat.backends import default_backend

with open("certificado.cer", "rb") as cert_file:
cert = x509.load_der_x509_certificate(cert_file.read(), default_backend())

print("El certificado pertenece a:", cert.subject)
print("Emitido por:", cert.issuer)
print("Válido desde:", cert.not_valid_before)
print("Válido hasta:", cert.not_valid_after)

Esto te muestra información sobre el certificado y su validez.


2️⃣ Verificar que el certificado fue firmado por la CA (FIREL)

Para esto necesitas el certificado de la CA y la firma del certificado.

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes

# Cargar el certificado de la CA
with open("certificado_CA.cer", "rb") as ca_file:
ca_cert = x509.load_der_x509_certificate(ca_file.read(), default_backend())

# Obtener la clave pública de la CA
public_key_ca = ca_cert.public_key()

# Verificar que la CA firmó el certificado
try:
public_key_ca.verify(
cert.signature,
cert.tbs_certificate_bytes,
padding.PKCS1v15(),
cert.signature_hash_algorithm,
)
print("✅ El certificado fue firmado por la CA y es válido.")
except Exception as e:
print("❌ El certificado NO es válido:", str(e))

Si la firma es válida, significa que FIREL realmente emitió el certificado.


3️⃣ Verificar la firma digital de un documento

Ahora que sabemos que el certificado es real, podemos usarlo para verificar una firma digital en un documento.

from cryptography.hazmat.primitives.serialization import load_pem_public_key

# Cargar la clave pública del firmante
public_key = cert.public_key()

# Cargar el archivo y calcular su hash
with open("documento.pdf", "rb") as doc:
contenido = doc.read()
hash_documento = hashes.Hash(hashes.SHA256(), backend=default_backend())
hash_documento.update(contenido)
digest = hash_documento.finalize()

# Cargar la firma digital del documento (archivo .sig)
with open("firma.sig", "rb") as sig_file:
firma = sig_file.read()

# Verificar la firma
try:
public_key.verify(
firma,
digest,
padding.PKCS1v15(),
hashes.SHA256()
)
print("✅ Firma válida. El documento NO ha sido modificado.")
except:
print("❌ Firma inválida. El documento fue alterado o no fue firmado por esta persona.")

Si la verificación es exitosa, sabemos que:

  1. El documento no ha sido alterado.

  2. La persona que lo firmó usó la clave privada asociada al certificado.

  3. El certificado fue emitido por una CA confiable.


🔹 Resumen Final

Para verificar una firma digital:

  1. Verificar la validez del certificado (.cer)

    • Revisar su fecha de expiración.

    • Confirmar que fue emitido por una CA confiable (FIREL).

  2. Verificar que la CA firmó el certificado.

    • Usar el certificado de la CA para validar la firma en el certificado del usuario.

  3. Verificar la firma digital del documento.

    • Usar la clave pública del certificado (.cer) para desencriptar la firma.

    • Comparar el hash desencriptado con el hash real del documento.

  4. (Opcional) Consultar la CA para ver si el certificado ha sido revocado.

🔹 Si todos estos pasos se cumplen, la firma es válida y el documento no ha sido alterado.

Con esto ya puedes crear un programa para validar firmas digitales con total seguridad. 



------------------------

Para verificar la autenticidad de los certificados emitidos por la Firma Electrónica Certificada del Poder Judicial de la Federación (FIREL), es esencial contar con el certificado de la Autoridad Certificadora (CA) de FIREL. Sin embargo, la información disponible en línea no proporciona un enlace directo para descargar este certificado.

Pasos recomendados:

  1. Visitar el portal oficial de FIREL:

  2. Buscar en la sección de descargas o soporte:

    • Explora las secciones de "Descargas", "Soporte" o "Ayuda" en busca del certificado de la Autoridad Certificadora.

  3. Contactar al soporte técnico de FIREL:

    • Si no encuentras el certificado en el sitio web, es aconsejable comunicarte directamente con el equipo de soporte de FIREL para solicitar el certificado de la CA.

Información adicional:

El Consejo de la Judicatura Federal (CJF), a través de FIREL, gestiona la emisión de certificados digitales para firmas electrónicas. Para obtener más detalles sobre el proceso de solicitud y gestión de certificados, puedes consultar el manual de usuario disponible en https://www.firel.pjf.gob.mx/Manual%20de%20solicitud%20FIREL.pdf.

Este manual ofrece una guía detallada sobre cómo solicitar y utilizar los certificados digitales emitidos por FIREL.

Si necesitas asistencia adicional, te recomiendo comunicarte directamente con el soporte técnico de FIREL o del CJF para obtener orientación específica.

-

Sí, el archivo que adjuntaste (ACI_CJF.cer) parece ser un certificado intermedio de la Autoridad de Certificación del Consejo de la Judicatura Federal (CJF). Para confirmar si es el certificado correcto, puedes hacer lo siguiente:

Cómo verificar si el archivo es la CA de FIREL

  1. Abrir el archivo en Windows:

    • Haz doble clic en el archivo .cer y revisa los detalles.

    • Busca información sobre la Autoridad de Certificación (CA) y verifica si dice algo como "Autoridad Certificadora del CJF".

  2. Usar OpenSSL para inspeccionar el certificado (Linux/macOS/Windows con OpenSSL)
    Ejecuta en la terminal el siguiente comando:

    openssl x509 -in ACI_CJF.cer -noout -text
    • Verifica el campo Issuer (Emisor): Debería indicar que fue emitido por la autoridad certificadora del CJF.

    • Verifica el campo Subject (Sujeto): Si es un certificado intermedio, debería hacer referencia a una autoridad subordinada.

  3. Comparar con la CA oficial de FIREL

    • Si la CA de FIREL está correctamente instalada en tu sistema, puedes compararla con la que descargaste.

    • En Windows, puedes usar la herramienta Administrador de Certificados (certmgr.msc) para ver los certificados instalados y comparar su información con la del archivo .cer.

¿Cómo saber si este certificado es el correcto?

Si al inspeccionarlo aparece algo como:

  • Issuer: "Consejo de la Judicatura Federal" o "Autoridad Certificadora FIREL"

  • Subject: Hace referencia a FIREL o CJF

  • Validez y huella digital coinciden con los datos publicados en el sitio del CJF

Entonces es probable que sea el certificado correcto.

Si quieres que lo analice directamente, dime qué información deseas extraer del archivo .cer y lo haré.

Aquí tienes un programa en PHP que verifica si un certificado pertenece a la Autoridad Certificadora de FIREL y si un documento ha sido firmado digitalmente por una persona.

¿Qué hace este programa?

  1. Verifica la CA de FIREL:

    • Carga el certificado de la FIREL (ACI_CJF.cer).

    • Extrae su huella digital (hash).

    • Compara con la huella oficial publicada por el CJF (si se tiene).

  2. Verifica una firma digital en un documento:

    • Toma un archivo firmado digitalmente.

    • Extrae la firma y el certificado del firmante.

    • Usa OpenSSL para comprobar si la firma es válida.


Código en PHP

Este código asume que tienes:

  • El certificado de la CA de FIREL (ACI_CJF.cer).

  • El certificado del firmante (firma.cer).

  • El documento original (documento.pdf).

  • La firma digital del documento (firma.sig).

<?php
/**
* Verifica si un certificado pertenece a la CA de FIREL y si un documento ha sido firmado digitalmente.
*
* Requisitos:
* - OpenSSL instalado en el servidor
* - Certificado de la CA FIREL (ACI_CJF.cer)
* - Certificado del firmante (firma.cer)
* - Documento original (documento.pdf)
* - Firma digital del documento (firma.sig)
*/

/**
* Verifica si un certificado pertenece a la CA de FIREL
*
* @param string $certFile Ruta al certificado a verificar
* @param string $caFile Ruta al certificado de la CA FIREL
* @return bool True si el certificado está firmado por la CA FIREL, False en caso contrario
*/
function verificarCA($certFile, $caFile) {
// Cargar certificados
$certContent = file_get_contents($certFile);
$caContent = file_get_contents($caFile);

// Convertir en objetos OpenSSL
$cert = openssl_x509_read($certContent);
$caCert = openssl_x509_read($caContent);

if (!$cert || !$caCert) {
return false; // Error al leer los certificados
}

// Verificar si el certificado fue emitido por la CA de FIREL
return openssl_x509_checkpurpose($cert, X509_PURPOSE_ANY, [$caFile]);
}

/**
* Verifica si un documento ha sido firmado digitalmente
*
* @param string $documentFile Ruta al documento original
* @param string $signatureFile Ruta a la firma digital
* @param string $certFile Ruta al certificado del firmante
* @return bool True si la firma es válida, False si no lo es
*/
function verificarFirma($documentFile, $signatureFile, $certFile) {
// Leer archivos
$document = file_get_contents($documentFile);
$signature = file_get_contents($signatureFile);
$certContent = file_get_contents($certFile);

// Cargar el certificado del firmante
$cert = openssl_x509_read($certContent);
if (!$cert) {
return false;
}

// Obtener clave pública del certificado
$publicKey = openssl_pkey_get_public($cert);
if (!$publicKey) {
return false;
}

// Verificar la firma
$result = openssl_verify($document, $signature, $publicKey, OPENSSL_ALGO_SHA256);

return $result === 1; // 1: Firma válida, 0: Firma incorrecta, -1: Error
}

// Rutas a los archivos
$certFirmante = "firma.cer"; // Certificado del firmante
$certCA = "ACI_CJF.cer"; // Certificado de la CA de FIREL
$documento = "documento.pdf"; // Documento original
$firma = "firma.sig"; // Firma digital

// Verificar si el certificado pertenece a la CA de FIREL
if (verificarCA($certFirmante, $certCA)) {
echo "✔️ El certificado del firmante está firmado por la CA de FIREL.\n";
} else {
echo "❌ El certificado NO pertenece a la CA de FIREL.\n";
}

// Verificar la firma digital del documento
if (verificarFirma($documento, $firma, $certFirmante)) {
echo "✔️ La firma digital es válida.\n";
} else {
echo "❌ La firma digital es inválida.\n";
}
?>

¿Cómo funciona el código?

  1. Verificar si el certificado pertenece a la CA de FIREL

    • Se carga el certificado del firmante (firma.cer) y el de la CA (ACI_CJF.cer).

    • Se usa openssl_x509_checkpurpose() para comprobar si la CA de FIREL firmó el certificado del firmante.

  2. Verificar la firma digital

    • Se lee el documento original (documento.pdf).

    • Se carga la firma digital (firma.sig).

    • Se extrae la clave pública del certificado del firmante (firma.cer).

    • Se usa openssl_verify() para verificar si la firma es válida.


¿Cómo saber si la firma es auténtica?

Este programa verifica solo la validez matemática de la firma digital. Para asegurarte de que un certificado es realmente de FIREL:

  1. Descarga la CA oficial de FIREL desde su sitio web.

  2. Consulta la lista de certificados revocados (CRL) en FIREL.

    • Puedes hacer esto con openssl crl -in crl.pem -noout -text.

  3. Verifica la huella digital (hash) de la CA en fuentes oficiales.

    • Usa openssl x509 -in ACI_CJF.cer -noout -fingerprint -sha256.


Conclusión

Este programa permite verificar si un documento fue firmado por la persona correcta usando FIREL.
✔ También confirma si el certificado del firmante pertenece a la CA de FIREL.
Aún necesitas validar que el certificado del firmante no esté revocado (consulta la CRL de FIREL para más seguridad).


¿Qué sigue?

Si quieres más seguridad, podemos agregar:
✅ Validación de certificados revocados (CRL)
✅ Comprobación en tiempo real contra la API de FIREL
✅ Firma digital de documentos usando PHP



El código que te proporcioné sirve para verificar si:
El certificado de la firma es válido y está firmado por la CA de FIREL.
El documento está firmado correctamente y la firma no ha sido alterada.

¿Qué más necesitas para validar el documento firmado?

  1. El certificado digital del firmante (.cer)

    • Lo puedes extraer del documento o si lo tienes, súbelo aquí.

  2. La firma digital (.sig o embebida en el PDF)

    • Si la firma está embebida en el PDF, debo extraerla antes de verificarla.

Siguientes pasos:

Voy a revisar si la firma digital está embebida en tu archivo 9-PENAL.pdf y extraer el certificado. Luego, lo verificaremos con el código en PHP.

Voy a proceder con el análisis. 🚀

El documento 9-PENAL.pdf no parece contener directamente una firma digital embebida en los metadatos estándar. Sin embargo, esto no significa que no esté firmado, ya que las firmas digitales pueden estar en estructuras ocultas dentro del PDF.

¿Qué sigue?

Para verificar la firma digital, necesito:

  1. El certificado del firmante (.cer). Si lo tienes, súbelo aquí.

  2. Extraer la firma digital del PDF con herramientas más avanzadas como pdfsig o OpenSSL.

¿Quieres que intente extraer la firma directamente del PDF o tienes el certificado del firmante?



 




------------------

Comentarios

Entradas populares de este blog

API Web Crypto,

Reaccionar formularios

React Events