VALIDADOR ASiC-E / XAdES — Manual Técnico
Versión del documento: 2025-09-20 05:18 UTC
Este documento describe la arquitectura, fundamentos normativos y el flujo de validación del validador portátil y offline de contenedores ASiC-E con firmas XAdES-BES (perfil Baseline-B, modo detached con referencia directa al PDF).
1. Alcance y objetivo
- Estructura del contenedor (mimetype, META-INF/signatures*.xml, manifest.xml opcional).
- Validez estructural XAdES-BES (Baseline-B): referencias a SignedProperties y al PDF, canonicalización exc-c14n, hash SHA-256.
- Verificación criptográfica de ds:Signature con la clave pública del certificado embebido.
- Extracción y reporte de metadatos (firmante, emisor, periodo de validez, MimeType en DataObjectFormat).
2. Fundamentos normativos (referencia)
- ETSI EN 319 122-1 / -2 — Formatos de contenedor ASiC.
- ETSI EN 319 132-1 — XAdES Baseline (B, T, LT, LTA).
- ETSI EN 319 102-1 / -2 — Procedimientos de validación y reporte.
- IETF RFC 5652, RFC 5280 — PKI (referencia general de certificados X.509).
- W3C XML Signature 1.0/1.1 y Canonical XML / Exclusive XML Canonicalization.
3. Arquitectura de la solución
- Core (Biblioteca): lógica de validación (ZIP + XMLDSig/XAdES), sin UI, sin I/O interactivo.
- CLI/GUI: interfaz de usuario (WinForms/WPF/CLI) que invoca Core y muestra reportes.
- Tests: conjunto de pruebas con vectores (ASiC-E válidos y con fallas controladas).
4. Flujo de validación (alto nivel)
- Abrir el .asice como ZIP. Verificar entrada 'mimetype' y preferentemente sin compresión.
- Localizar 'META-INF/signatures*.xml' y cargarlo preservando espacios en blanco.
- Por cada ds:Signature:
- a) Localizar Reference con Type='http://uri.etsi.org/01903#SignedProperties' y validar su digest (exc-c14n + SHA-256).
- b) Localizar Reference al PDF (sin transforms). Resolver la URI con tolerancia: percent-encoding (espacios vs %20), NFC, nombre exacto o último segmento.
- c) Recalcular SHA-256 del PDF y comparar con DigestValue.
- d) Verificar criptográficamente ds:Signature (SignedInfo) con el certificado de KeyInfo.
- e) Reportar DataObjectFormat/MimeType si aparece.
- Construir un reporte (texto/JSON) con los resultados por firma y por contenedor.
5. Resolución de URI (modo Direct)
- Normalizar a Unicode NFC el nombre interno del ZIP y el de la URI.
- Aceptar tanto espacios como '%20'; aceptar equivalencia por último segmento.
- Comparación ordinal (case-sensitive) tras normalización; si falla, intentar comparación por nombre de archivo (sin ruta).
6. Limitaciones del modo offline
- Sin conexión no se evalúan OCSP/CRL ni TSLs. Por tanto, el estado de revocación y el anclaje de confianza del certificado no se determinan.
- El veredicto se limita a: integridad criptográfica, estructura XAdES/ASiC y metadatos.
- Si se habilita un 'modo online', se puede añadir construcción de cadena y validación de confianza según políticas locales.
7. Seguridad y mitigaciones
- Restringir expansión de entidades XML y deshabilitar resolvers externos.
- Límites de tamaño para evitar ZIP bombs; validar que las entradas no contengan rutas relativas ('../').
- Validar tipos MIME esperados y extensiones.
- Firmar y hashear los binarios de distribución (checksums).
8. Salidas de validación
- Texto legible (similar a ‘reporte-asice.txt’).
- JSON con campos por firma: { pdfName, digestOk, spDigestOk, signatureCryptoOk, subject, issuer, notBefore, notAfter, mimeType }.
9. Compilación y empaquetado
- .NET 8 (o 6) recomendado para portabilidad.
- Publicación ‘single-file’ y self-contained para distribución portable.
- Uso sugerido: 'dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:SelfContained=true'.
10. Open Source: lineamientos
- Licencia permisiva (MIT/BSD).
- Repos separados: Core, UI y vectores de prueba.
- Guía de contribución (CONTRIBUTING.md), código de conducta, PR templates.
- Releases firmadas, hashes públicos y reproducibilidad documentada.
11. Futuras extensiones
- Soporte XAdES-T/LT (sellado de tiempo y cadenas incrustadas).
- Políticas de validación configurables (ETSI 319 102-2).
- Módulo online opcional para confianza/TSL con caché local.
— Fin —