====== Cerimonia delle chiavi ======
**Scopo:** Generazione sicura e verificabile delle chiavi CA \\
**Partecipanti:** Minimo 3-4 persone (controllo condiviso) \\
**Durata:** 2-4 ore
Procedura formale per la generazione delle chiavi CA con responsabilità condivisa e traccia di audit.
----
===== Perché la cerimonia delle chiavi? =====
| Motivo | Descrizione |
|--------|-------------|
| **Compliance** | ISO 27001, BSI-Grundschutz, WebTrust |
| **Controllo condiviso** | Nessuno ha accesso completo individualmente |
| **Verificabilità** | Processo documentato e verificabile |
| **Integrità** | Prova di corretta generazione della chiave |
----
===== Ruoli =====
flowchart LR
subgraph ROLES["👥 RUOLI"]
R1[Ceremony Lead]
R2[Crypto Officer 1]
R3[Crypto Officer 2]
R4[Auditor/Testimone]
end
subgraph KEYS["🔑 CHIAVI"]
K1[PIN Admin HSM]
K2[PIN Partizione]
K3[Smartcard 1]
K4[Smartcard 2]
end
R1 --> K1
R2 --> K2 & K3
R3 --> K4
R4 -.->|Osserva| R1 & R2 & R3
| Ruolo | Responsabilità | Min. numero |
|-------|----------------|-------------|
| **Ceremony Lead** | Guida il processo, documenta | 1 |
| **Crypto Officer** | Detiene Key Share, esegue azioni | 2+ |
| **Auditor/Testimone** | Osserva, firma protocollo | 1 |
| **IT Security** | Approva, supervisiona compliance | 1 (opzionale) |
----
===== Preparazione =====
==== Checklist 24h prima ====
| # | Attività | Responsabile | ✓ |
|---|----------|--------------|---|
| 1 | Prenotare sala (senza finestre, CCTV) | Ceremony Lead | ☐ |
| 2 | Preparare HSM/Sistema Air-Gap | IT | ☐ |
| 3 | Partecipanti confermati | Lead | ☐ |
| 4 | Preparare smartcard/chiavette USB | Lead | ☐ |
| 5 | Stampare template protocollo | Lead | ☐ |
| 6 | Organizzare fotografo/video (opzionale) | Lead | ☐ |
==== Materiale ====
* Laptop Air-Gap o HSM
* Smartcard per Key Share
* Chiavette USB (nuove, sigillate)
* Fotocamera per documentazione
* Buste Tamper-Evident
* Moduli protocollo
* Penne (non cancellabili)
----
===== Svolgimento della cerimonia =====
==== Fase 1: Apertura (15 min) ====
1. Identificare tutti i partecipanti (verificare documento)
2. Avviare protocollo con:
- Data, ora, luogo
- Tutti i presenti (nome, ruolo, firma)
3. Consegnare telefoni cellulari
4. Spiegare scopo della cerimonia
5. Confermare ruoli
==== Fase 2: Verifica hardware (30 min) ====
# Verifica sistema Air-Gap
# 1. Rete disattivata?
ip link show # Nessuna interfaccia attiva
# 2. Verifica log boot BIOS
dmesg | grep -i network
# 3. Verifica stato HSM (se utilizzato)
/opt/hsm/bin/status
# Risultato atteso: Non inizializzato o Pronto
==== Fase 3: Generazione chiavi (60 min) ====
#!/bin/bash
# key-ceremony-generate.sh
echo "=== GENERAZIONE CHIAVE ROOT CA ==="
echo "Data: $(date -Iseconds)"
echo "Sistema: $(hostname)"
# 1. Verifica qualità entropia
echo ""
echo "--- Verifica entropia ---"
cat /proc/sys/kernel/random/entropy_avail
# Risultato atteso: > 3000
# 2. Generazione chiave Root-CA
echo ""
echo "--- Generazione chiave ---"
# ECDSA P-384 (Classico)
openssl ecparam -genkey -name secp384r1 -noout -out root-ca-ecdsa.key
echo "ECDSA P-384: $(openssl ec -in root-ca-ecdsa.key -text -noout 2>&1 | head -1)"
# ML-DSA-87 (Post-Quantum) - se OpenSSL 3.6+
openssl genpkey -algorithm ML-DSA-87 -out root-ca-mldsa.key 2>/dev/null
if [ $? -eq 0 ]; then
echo "ML-DSA-87: Generato"
else
echo "ML-DSA-87: Non disponibile (OpenSSL < 3.6)"
fi
# 3. Protocollare fingerprint chiavi
echo ""
echo "--- Fingerprint chiavi ---"
openssl ec -in root-ca-ecdsa.key -pubout -outform DER 2>/dev/null | sha256sum
# Protocollare: SHA256 = ...
# 4. Creazione CSR (per Cross-Certification o Self-Signed)
echo ""
echo "--- Generazione CSR ---"
openssl req -new -key root-ca-ecdsa.key \
-out root-ca.csr \
-subj "/CN=Example Organization Root CA/O=Example Organization/C=DE"
# 5. Creazione Root Self-Signed
echo ""
echo "--- Certificato Self-Signed ---"
openssl x509 -req -in root-ca.csr \
-signkey root-ca-ecdsa.key \
-out root-ca.pem \
-days 9125 \
-extfile root-ca.ext \
-sha384
# Verifica certificato
openssl x509 -in root-ca.pem -text -noout | head -30
==== Fase 4: Suddivisione chiave (30 min) ====
# Shamir Secret Sharing
echo "=== SUDDIVISIONE CHIAVE ==="
# 5 share, 3 necessari per il ripristino
cat root-ca-ecdsa.key | ssss-split -t 3 -n 5 -w root-ca-share
# Scrivere share su smartcard/USB
for i in 1 2 3 4 5; do
echo "Share $i → Smartcard/USB $i"
# cp root-ca-share-$i /mnt/smartcard-$i/
done
# Cancellazione sicura chiave originale
shred -vfz -n 3 root-ca-ecdsa.key
rm root-ca-ecdsa.key
==== Fase 5: Verifica (20 min) ====
# 1. Il certificato può firmare?
echo "Test firma..."
echo "test" | openssl dgst -sha384 -sign root-ca-ecdsa.key 2>/dev/null && echo "OK"
# 2. Key Share combinabili?
ssss-combine -t 3 << EOF
EOF > /tmp/restored.key
# Confronto
diff <(openssl ec -in /tmp/restored.key -pubout) <(openssl ec -in root-ca-ecdsa.key -pubout)
==== Fase 6: Custodia (15 min) ====
1. Sigillare Key Share in buste Tamper-Evident
2. Ogni Crypto Officer riceve il proprio share
3. Share di backup in cassaforte/i
4. Protocollare numeri di serie delle buste
5. Raccogliere firme di consegna
==== Fase 7: Chiusura (15 min) ====
1. Cancellazione sicura di tutti i file temporanei
shred -vfz -n 3 /tmp/*.key /tmp/*.pem
2. Spegnere sistema (Air-Gap)
3. Completare protocollo:
- Ora di fine
- Tutte le firme
- Indice foto/video
4. Sigillare e archiviare protocollo
----
===== Template protocollo =====
PROTOCOLLO CERIMONIA CHIAVI
===========================
ID-Cerimonia: KC-2024-001
Data: ________________
Inizio: _______ Fine: _______
Luogo: ____________________________
PARTECIPANTI:
| Nome | Ruolo | N. ID | Firma |
|------|-------|-------|-------|
| | | | |
| | | | |
| | | | |
| | | | |
DETTAGLI CHIAVE:
- Algoritmo: ECDSA P-384 / ML-DSA-87
- Key-ID: _______________
- Hash chiave pubblica (SHA256): ______________________
- Seriale certificato: _______________
- Validità: _______ fino a _______
KEY SHARE:
| Share | N. Busta | Depositario | Firma consegna |
|-------|----------|-------------|----------------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
| 5 | | | |
VERIFICA:
[ ] Entropia > 3000
[ ] Chiave generata con successo
[ ] Certificato self-signed
[ ] Key Share creati (3-of-5)
[ ] Share verificati
[ ] Chiave originale cancellata
[ ] Share distribuiti e sigillati
CHIUSURA:
[ ] File temporanei cancellati
[ ] Sistema spento
[ ] Protocollo completo
_______________________________
Firma Ceremony Lead
_______________________________
Firma Auditor/Testimone
----
===== Cerimonia chiavi HSM =====
# Luna HSM Key Ceremony
/usr/safenet/lunaclient/bin/lunacm << 'EOF'
# Creazione partizione
partition create -label "Root-CA"
# Generazione chiave
partition contents -slot 0
generateKeyPair -keyType ECDSA -curvetype secp384r1 -label "root-ca-2024"
# Creazione backup
partition backup -serialNumber
EOF
----
===== Checklist =====
| # | Punto di verifica | ✓ |
|---|-------------------|---|
| 1 | Almeno 3 persone presenti | ☐ |
| 2 | Identità verificate | ☐ |
| 3 | Sistema Air-Gap verificato | ☐ |
| 4 | Entropia sufficiente | ☐ |
| 5 | Chiave generata | ☐ |
| 6 | Share creati e distribuiti | ☐ |
| 7 | Share verificati | ☐ |
| 8 | Chiave originale cancellata in sicurezza | ☐ |
| 9 | Protocollo firmato | ☐ |
| 10 | Protocollo archiviato | ☐ |
----
===== Documentazione correlata =====
* [[.:ca-backup-restore|Backup/Restore CA]] – Ripristino chiavi
* [[.:notfall-revocation|Revoca di emergenza]] – In caso di compromissione
* [[it:int:pqcrypt:business:compliance|Compliance]] – Requisiti normativi
----
<< [[.:ca-backup-restore|← Backup/Restore CA]] | [[.:notfall-revocation|→ Revoca di emergenza]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>key-ceremony hsm audit compliance operator}}