====== Key Ceremony ====== **Svrha:** Sigurno, revizijsko generiranje CA ključeva \\ **Sudionici:** Minimalno 3-4 osobe (podijeljena kontrola) \\ **Trajanje:** 2-4 sata Formalni postupak za generiranje CA ključeva s podijeljenom odgovornošću i revizijskim tragom. ---- ===== Zašto Key Ceremony? ===== | Razlog | Opis | |--------|------| | **Usklađenost** | ISO 27001, BSI-Grundschutz, WebTrust | | **Podijeljena kontrola** | Nitko nema potpuni pristup | | **Revizijska sposobnost** | Dokumentirani, provjerljivi proces | | **Integritet** | Dokaz ispravnog generiranja ključeva | ---- ===== Uloge ===== flowchart LR subgraph ROLES["ULOGE"] R1[Voditelj ceremonije] R2[Crypto Officer 1] R3[Crypto Officer 2] R4[Revizor/Svjedok] end subgraph KEYS["KLJUČEVI"] K1[HSM Admin PIN] K2[Partition PIN] K3[Smartcard 1] K4[Smartcard 2] end R1 --> K1 R2 --> K2 & K3 R3 --> K4 R4 -.->|Promatra| R1 & R2 & R3 | Uloga | Odgovornost | Min. broj | |-------|-------------|-----------| | **Voditelj ceremonije** | Vodi proces, dokumentira | 1 | | **Crypto Officer** | Drži Key Share, izvršava akcije | 2+ | | **Revizor/Svjedok** | Promatra, potpisuje zapisnik | 1 | | **IT Security** | Odobrava, nadzire usklađenost | 1 (opciono) | ---- ===== Priprema ===== ==== Kontrolna lista 24h prije ==== | # | Zadatak | Odgovoran | Gotovo | |---|---------|-----------|--------| | 1 | Rezervirati prostoriju (bez prozora, CCTV) | Voditelj | ☐ | | 2 | Pripremiti HSM/Air-Gap sustav | IT | ☐ | | 3 | Sudionici potvrđeni | Voditelj | ☐ | | 4 | Pripremiti Smartcards/USB-ove | Voditelj | ☐ | | 5 | Ispisati predložak zapisnika | Voditelj | ☐ | | 6 | Organizirati fotografa/video (opciono) | Voditelj | ☐ | ==== Materijal ==== * Air-Gap laptop ili HSM * Smartcards za Key Shares * USB-ovi (novi, zapečaćeni) * Kamera za dokumentaciju * Tamper-Evident vrećice * Obrasci zapisnika * Trajne olovke ---- ===== Tijek ceremonije ===== ==== Faza 1: Otvaranje (15 Min) ==== 1. Identificirati sve sudionike (provjera osobne iskaznice) 2. Započeti zapisnik s: - Datum, vrijeme, mjesto - Svi prisutni (ime, uloga, potpis) 3. Predati mobitele 4. Objasniti svrhu ceremonije 5. Potvrditi uloge ==== Faza 2: Verifikacija hardvera (30 Min) ==== # Provjera Air-Gap sustava # 1. Mreža deaktivirana? ip link show # Nema aktivnih sučelja # 2. Provjera BIOS-boot-loga dmesg | grep -i network # 3. Provjera statusa HSM (ako se koristi) /opt/hsm/bin/status # Očekivani rezultat: Uninitialized ili Ready ==== Faza 3: Generiranje ključeva (60 Min) ==== #!/bin/bash # key-ceremony-generate.sh echo "=== GENERIRANJE ROOT CA KLJUČA ===" echo "Datum: $(date -Iseconds)" echo "Sustav: $(hostname)" # 1. Provjera kvalitete entropije echo "" echo "--- Provjera entropije ---" cat /proc/sys/kernel/random/entropy_avail # Očekivani rezultat: > 3000 # 2. Generiranje Root-CA ključa echo "" echo "--- Generiranje ključa ---" # ECDSA P-384 (klasični) 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) - ako je 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: Generirano" else echo "ML-DSA-87: Nije dostupno (OpenSSL < 3.6)" fi # 3. Zapisivanje Key-Fingerprints echo "" echo "--- Key Fingerprints ---" openssl ec -in root-ca-ecdsa.key -pubout -outform DER 2>/dev/null | sha256sum # Zapisati: SHA256 = ... # 4. Stvaranje CSR-a echo "" echo "--- Generiranje CSR-a ---" openssl req -new -key root-ca-ecdsa.key \ -out root-ca.csr \ -subj "/CN=Example Organization Root CA/O=Example Organization/C=HR" # 5. Stvaranje samopotpisanog Root certifikata echo "" echo "--- Samopotpisani certifikat ---" openssl x509 -req -in root-ca.csr \ -signkey root-ca-ecdsa.key \ -out root-ca.pem \ -days 9125 \ -extfile root-ca.ext \ -sha384 # Provjera certifikata openssl x509 -in root-ca.pem -text -noout | head -30 ==== Faza 4: Podjela ključa (30 Min) ==== # Shamir Secret Sharing echo "=== PODJELA KLJUČA ===" # 5 Shares, 3 potrebna za vraćanje cat root-ca-ecdsa.key | ssss-split -t 3 -n 5 -w root-ca-share # Zapisivanje Shares na Smartcards/USB for i in 1 2 3 4 5; do echo "Share $i -> Smartcard/USB $i" done # Sigurno brisanje originalnog ključa shred -vfz -n 3 root-ca-ecdsa.key rm root-ca-ecdsa.key ==== Faza 5: Verifikacija (20 Min) ==== # 1. Može li certifikat potpisati? echo "Test potpisa..." echo "test" | openssl dgst -sha384 -sign root-ca-ecdsa.key 2>/dev/null && echo "OK" # 2. Mogu li se Key Shares kombinirati? ssss-combine -t 3 << EOF EOF > /tmp/restored.key ==== Faza 6: Pohrana (15 Min) ==== 1. Zapečatiti Key Shares u Tamper-Evident vrećice 2. Svaki Crypto Officer dobiva svoj Share 3. Backup Shares u sef(ove) 4. Zapisati serijske brojeve vrećica 5. Prikupiti potpise primopredaje ==== Faza 7: Zatvaranje (15 Min) ==== 1. Sigurno obrisati sve privremene datoteke shred -vfz -n 3 /tmp/*.key /tmp/*.pem 2. Isključiti sustav (Air-Gap) 3. Završiti zapisnik: - Završno vrijeme - Svi potpisi - Indeks fotografija/videa 4. Zapečatiti i arhivirati zapisnik ---- ===== Predložak zapisnika ===== ZAPISNIK KEY CEREMONY ===================== ID ceremonije: KC-2024-001 Datum: ________________ Početak: _______ Završetak: _______ Mjesto: ____________________________ SUDIONICI: | Ime | Uloga | ID br. | Potpis | |-----|-------|--------|--------| | | | | | | | | | | | | | | | DETALJI KLJUČA: - Algoritam: ECDSA P-384 / ML-DSA-87 - Key-ID: _______________ - Hash javnog ključa (SHA256): ______________________ - Serijski broj certifikata: _______________ - Valjanost: _______ do _______ KEY SHARES: | Share | Br. vrećice | Povjerenik | Potpis primopredaje | |-------|-------------|------------|---------------------| | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | VERIFIKACIJA: [ ] Entropija > 3000 [ ] Ključ uspješno generiran [ ] Certifikat samopotpisan [ ] Key Shares stvoreni (3-of-5) [ ] Shares verificirani [ ] Originalni ključ obrisan [ ] Shares distribuirani i zapečaćeni ZATVARANJE: [ ] Privremene datoteke obrisane [ ] Sustav isključen [ ] Zapisnik potpun _______________________________ Voditelj ceremonije - Potpis _______________________________ Revizor/Svjedok - Potpis ---- ===== Kontrolna lista ===== | # | Točka provjere | Gotovo | |---|----------------|--------| | 1 | Minimalno 3 osobe prisutne | ☐ | | 2 | Identiteti verificirani | ☐ | | 3 | Air-Gap sustav provjeren | ☐ | | 4 | Dovoljna entropija | ☐ | | 5 | Ključ generiran | ☐ | | 6 | Shares stvoreni i distribuirani | ☐ | | 7 | Shares verificirani | ☐ | | 8 | Originalni ključ sigurno obrisan | ☐ | | 9 | Zapisnik potpisan | ☐ | | 10 | Zapisnik arhiviran | ☐ | ---- ===== Povezana dokumentacija ===== * [[.:ca-backup-restore|CA Backup/Restore]] - Vraćanje ključeva * [[.:notfall-revocation|Hitni opoziv]] - Pri kompromitaciji * [[hr:int:pqcrypt:business:compliance|Usklađenost]] - Regulatorni zahtjevi ---- << [[.:ca-backup-restore|<- CA Backup/Restore]] | [[.:notfall-revocation|-> Hitni opoziv]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>key-ceremony hsm audit compliance operator}}