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