====== 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}}