Sigillum

firma digitale eIDAS, open source, su Linux

Da quando lavoro con la firma digitale qualificata mi sono spesso scontrato con una realtà fastidiosa: i software di firma per Linux che davvero coprono tutto lo stack ETSI/eIDAS si contano sulle dita di una mano, e nessuno di quelli italiani è veramente open source. C'è chi distribuisce solo binari proprietari, chi richiede un'attivazione, chi smette di aggiornarsi quando il vendor di turno cambia direzione.

Per questo ho scritto Sigillum: un'applicazione desktop Linux in Python + GTK, GPL-3, che firma, verifica, marca temporalmente e cifra documenti secondo gli standard ETSI/eIDAS. Funziona sia da GUI sia da CLI, senza dipendere da nessun servizio o componente proprietario lato server.

Cosa fa

Tutto quello che serve per gestire un documento firmato sotto eIDAS:

  • Firme PAdES (PDF), CAdES (.p7m) e XAdES (XML) — livelli B e T (signature + timestamp RFC 3161).
  • Marche temporali standalone: .tsr (solo evidenza RFC 3161) e .tsd (ETSI TS 119 422, contenuto + evidenza in un unico file, utile per la conservazione a lungo termine).
  • Verifica di firme e marche, con check separati per hash, signature, catena del firmatario, timestamp e catena della TSA.
  • Cifratura simmetrica (AES-256/128, 3DES, Blowfish — CBC + PKCS#7 + PBKDF2-SHA256 a 600.000 iterazioni come da NIST SP 800-132) e asimmetrica CMS EnvelopedData (.p7e, compatibile con Aruba Sign / Dike / InfoCamere).
  • Firma visibile su PDF: posizione preset, logo opzionale e selezione del riquadro col mouse direttamente sull'anteprima.
  • Credenziali da file PKCS#12 o da token PKCS#11: YubiKey via libykcs11, Bit4id Digital-DNA Key (CCIAA / InfoCamere / Aruba / Namirial) via libbit4xpki, smartcard generiche tramite OpenSC. Il token viene rilevato automaticamente.

La parte che mi piace di più: Trust List multi-paese

Sigillum scarica e valida le Trusted List nazionali di tutti gli Stati membri EU/EEA dinamicamente dalla EU LOTL — nessun URL hardcoded. La firma XMLDSig della TSL viene verificata risalendo alla catena ancorata nella LOTL stessa (ETSI TS 119 612), con supporto sia a RSA-PKCS1v15 sia a RSA-PSS/MGF1 — quest'ultimo è quello usato dalla Germania, per dirne uno che spesso rompe i verificatori "italiani-centrici".

Il paese principale viene dedotto dal $LANG di sistema (it_IT → Italia) ma può essere cambiato, e si possono attivare più paesi in parallelo nel trust store di verifica. Per gli italiani: la TSL AgID viene importata automaticamente all'avvio se manca o ha più di 30 giorni.

Installazione

Disponibile su PyPI (per chi vuole tenerlo in un virtualenv) e come pacchetti nativi .rpm (Fedora/RHEL) e .deb (Debian/Ubuntu/Mint), pubblicati come asset di ogni release GitHub.

# PyPI (consigliato per sviluppatori e utenti pipx)
pip install sigillum

# Fedora / RHEL
sudo dnf install ./sigillum-0.2.1-1.fc44.noarch.rpm

# Debian / Ubuntu / Mint
sudo apt install ./sigillum_0.2.1-1_all.deb

I pacchetti nativi tirano dentro tutte le runtime dependencies (GTK 3, Poppler, python3-endesive, ecc.) e mettono sigillum nel $PATH. Da GUI: lancialo e basta. Da CLI: sigillum --help.

Un avvertimento onesto sulle CNS italiane

Le CNS italiane sono un mondo a sé. Su molti modelli (Athena, IDEMIA, Bit4id JS) il certificato di firma qualificata è protetto da Secure Messaging con una chiave statica embeddata nel driver del vendor. OpenSC quindi vede solo il certificato di autenticazione CNS, non quello DS che serve davvero per firmare. È un limite tracciato a monte e l'unica soluzione attuale è installare il middleware proprietario del vendor (Aruba Sign, InfoCamere Sign Desktop, Dike), Sigillum lo rileva automaticamente se è installato.

Codice e contributi

Repo: GitHub - sigillum · Licenza GPL-3.0-or-later · Issue, PR e feedback ben accetti.

Se sei finito qui perché cerchi un'alternativa libera ad Aruba Sign o Dike, provalo e fammi sapere cosa ne pensi.