Modelo de seguridad para firma y cifrado
De un vistazo
Sección titulada «De un vistazo»Esta página presenta el modelo de seguridad de las dos superficies criptográficas que expone el motor central: el cifrado de documentos (AES-256) y la firma de documentos (CMS/PAdES). Indica qué protege cada mecanismo, qué no protege y dónde queda el límite de confianza.
Límite. La compatibilidad con un mecanismo criptográfico no garantiza su seguridad en una implementación. La fortaleza de un documento cifrado depende de la contraseña y de la custodia de claves que se elijan. El significado de una firma depende del certificado, del ancla de confianza, de la autoridad de sello de tiempo y de la política del verificador. El certificado, el ancla de confianza, la autoridad de sello de tiempo y la política del verificador están todos fuera de esta biblioteca. Esta página describe el mecanismo; no certifica el resultado.
Instalación
Sección titulada «Instalación»composer require nextpdf/core:^3Se requiere ext-openssl para las rutas de firma y CMS.
Visión conceptual
Sección titulada «Visión conceptual»En el motor central, cifrado se refiere al manejador de seguridad AES-256 de ISO 32000-2 §7.6 (AESV3, revisión 6) (iso32000_2_sec7#x1.x65.p29). Proporciona confidencialidad: quien no tenga la contraseña no puede leer el contenido de cadenas y flujos. No proporciona integridad ni autenticidad. Aun así, un texto cifrado puede truncarse o reemplazarse. Detectar un texto cifrado truncado o reemplazado es tarea de una firma o de un MAC de documento, no del manejador de cifrado.
Los permisos (imprimir, copiar, modificar) son un concepto independiente y una trampa de confianza habitual. Los indicadores de permiso de ISO 32000-2 son cooperativos con el lector (iso32000_2_sec7#x1.x71.p27). Un lector conforme los respeta, pero son metadatos consultivos, no un control de acceso criptográfico. Una herramienta que no coopere puede ignorarlos. El motor los emite fielmente; no puede imponerlos.
Una firma es una estructura CMS SignedData incrustada según ISO 32000-2 §12.8. El rango de bytes firmado es un objeto directo y el resumen excluye deliberadamente el valor Contents de la firma (iso32000_2_sec12#x1.x121.p45), de modo que la firma cubre el documento, pero no se cubre a sí misma.
Superficie de la API
Sección titulada «Superficie de la API»Esta página no documenta de nuevo las firmas. Los puntos de entrada del cifrado y el orquestador de firma se describen en /modules/core/security/ y /modules/core/security/signing/. El modelo tratado aquí se ocupa del significado y del límite, no de las formas de los métodos.
Ejemplo de código — Inicio rápido
Sección titulada «Ejemplo de código — Inicio rápido»El cifrado protege la confidencialidad frente a quienes no tienen la contraseña, y nada más:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = new Document();// AES-256 (AESV3 R6). The owner/user passwords gate read access only.// Permission flags below are advisory: a conforming reader honors them.$doc->encrypt( userPassword: 'open-secret', ownerPassword: 'owner-secret',);$doc->save('confidential.pdf');Ejemplo de código — Producción
Sección titulada «Ejemplo de código — Producción»Un flujo de firma de producción aplica una firma base CMS/PAdES con una clave alojada por software. La edición Core produce el nivel PAdES B-B. Con una autoridad de sello de tiempo configurada, la edición Core produce PAdES B-T: B-B más un único atributo no firmado RFC 3161 signature-time-stamp:
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Security\Signature\CertificateInfo;use NextPDF\Security\Signature\SignatureLevel;
$cert = CertificateInfo::fromPkcs12('signer.p12', 'pin');
$doc = new Document();// B-B is the default. B-T adds a trusted timestamp over the signature value.$doc->setSignature($cert, SignatureLevel::PAdES_B_B);$doc->save('signed.pdf');PAdES B-T es exactamente B-B más un atributo no firmado RFC 3161 signature-time-stamp transportado en el CMS SignerInfo (rfc5652#p603). El sello de tiempo vincula el valor de la firma a un tiempo de confianza obtenido de una autoridad de sello de tiempo (rfc3161#p208). No añade un diccionario de datos de validación, una estructura de información de revocación ni un bucle de sello de tiempo de archivo. Esos son niveles a largo plazo distintos, con alcance independiente, que no forman parte de la superficie B-B/B-T y quedan fuera del alcance de esta página.
U-1. NextPDF no declara ninguna certificación ETSI EN 319 142-1 independiente para PAdES B-T. EN 319 142-1 no está en el corpus de verificación que se usa aquí. El requisito de B-T signature-time-stamp se verifica frente a ETSI EN 319 122-1 §5.3 — la base CAdES que la familia EN 319 142 PAdES importa por referencia (
etsi_en_319_122_1#6.x40.p96) — junto con RFC 3161, RFC 5652 e ISO 32000-2 §12.8. La compatibilidad con el perfil B-T no es una certificación de conformidad ni de validez legal. Un validador independiente realiza esa determinación.
Casos límite y trampas
Sección titulada «Casos límite y trampas»- Cifrado ≠ integridad. A un lector que puede abrir el documento aún puede entregársele una copia manipulada. Solo una firma (o un MAC de documento) lo detecta. «A prueba de manipulaciones» no es una propiedad que proporcione el manejador de cifrado, y el término no se usa como afirmación de producto.
- La presencia de una firma no es su validez. Que un documento lleve un diccionario de firma no dice nada sobre si el certificado es de confianza, sigue vigente o no ha sido revocado. Establecer la validez es una operación del lado del verificador, regida por la política de la parte que confía, no por el firmante.
- La confianza en el sello de tiempo es externa. Un sello de tiempo B-T solo tiene el significado que le otorgue la confianza que el verificador deposita en la autoridad de sello de tiempo que lo emitió. La biblioteca obtiene e incrusta el token. No responde por la TSA.
- La postura FIPS es ambiental. Ejecutar sobre un módulo criptográfico validado por FIPS es una propiedad del entorno operativo y del módulo (
fips_140_3#x12), no algo que una biblioteca de PHP pueda afirmar por quien la invoca.
Rendimiento
Sección titulada «Rendimiento»La ruta de firma calcula un resumen del rango de bytes y una estructura CMS. La extensión B-T añade una ida y vuelta síncrona a la autoridad de sello de tiempo. El cifrado es una operación simétrica per-string/per-stream. Ninguna de estas operaciones suele dominar un renderizado típico. La ida y vuelta de red para B-T es el costo variable y depende de la TSA elegida por quien la invoca.
Notas de seguridad
Sección titulada «Notas de seguridad»Declaraciones de límite, formuladas como reglas exigibles para un revisor:
- Solo confidencialidad. El cifrado AES-256 protege el contenido frente a quienes no tienen la contraseña. No aporta integridad, autenticidad ni control de acceso (
iso32000_2_sec7#x1.x65.p29). - Los permisos son consultivos. Los indicadores de permiso son cooperativos con el lector y no se imponen criptográficamente (
iso32000_2_sec7#x1.x71.p27). Ninguna redacción de producto afirma que impidan una acción. - Solo B-B y B-T en esta página. La superficie de firma de Core/Pro documentada aquí cubre B-B y su extensión de sello de tiempo B-T, con cada mención de B-T ubicada junto a la advertencia U-1 anterior. Los niveles de archivo a largo plazo son una superficie aparte, de edición de pago, y no se describen aquí intencionadamente. En esta página no se afirma ninguna capacidad de datos de validación, de información de revocación ni de sello de tiempo de archivo.
- Sin afirmación de validez legal. Una firma producida es un artefacto criptográfico. Que sea legalmente válida depende de la jurisdicción, de la política de certificado y de la parte que confía, no de esta biblioteca.
Conformidad
Sección titulada «Conformidad»La compatibilidad no es conformidad. El motor genera una salida que usa las construcciones citadas de ISO 32000-2, RFC 3161, RFC 5652 y ETSI EN 319 122-1. El motor no afirma conformidad con PAdES, CAdES ni eIDAS. La validación FIPS 140-3 es una propiedad del module/environment (fips_140_3#x12), no una afirmación de la biblioteca. Un validador o evaluador independiente realiza cualquier determinación de conformidad o de validez legal.