====== Key Ceremony ======
**Zweck:** Sichere, auditierbare Generierung von CA-Schlüsseln \\
**Teilnehmer:** Mindestens 3-4 Personen (geteilte Kontrolle) \\
**Dauer:** 2-4 Stunden
Formales Verfahren zur Generierung von CA-Schlüsseln mit geteilter Verantwortung und Audit-Trail.
----
===== Warum Key Ceremony? =====
| Grund | Beschreibung |
|-------|--------------|
| **Compliance** | ISO 27001, BSI-Grundschutz, WebTrust |
| **Geteilte Kontrolle** | Kein Einzelner hat vollständigen Zugriff |
| **Auditierbarkeit** | Dokumentierter, überprüfbarer Prozess |
| **Integrität** | Nachweis korrekter Schlüsselgenerierung |
----
===== Rollen =====
flowchart LR
subgraph ROLES["👥 ROLLEN"]
R1[Ceremony Lead]
R2[Crypto Officer 1]
R3[Crypto Officer 2]
R4[Auditor/Witness]
end
subgraph KEYS["🔑 SCHLÜSSEL"]
K1[HSM Admin PIN]
K2[Partition PIN]
K3[Smartcard 1]
K4[Smartcard 2]
end
R1 --> K1
R2 --> K2 & K3
R3 --> K4
R4 -.->|Beobachtet| R1 & R2 & R3
| Rolle | Verantwortung | Min. Anzahl |
|-------|---------------|-------------|
| **Ceremony Lead** | Leitet Prozess, dokumentiert | 1 |
| **Crypto Officer** | Hält Key Share, führt Aktionen aus | 2+ |
| **Auditor/Witness** | Beobachtet, signiert Protokoll | 1 |
| **IT Security** | Genehmigt, überwacht Compliance | 1 (optional) |
----
===== Vorbereitung =====
==== Checkliste 24h vorher ====
| # | Aufgabe | Verantwortlich | ✓ |
|---|---------|----------------|---|
| 1 | Raum reservieren (keine Fenster, CCTV) | Ceremony Lead | ☐ |
| 2 | HSM/Air-Gap-System vorbereiten | IT | ☐ |
| 3 | Teilnehmer bestätigt | Lead | ☐ |
| 4 | Smartcards/USB-Sticks bereitstellen | Lead | ☐ |
| 5 | Protokoll-Vorlage drucken | Lead | ☐ |
| 6 | Fotografen/Video organisieren (optional) | Lead | ☐ |
==== Material ====
* Air-Gap-Laptop oder HSM
* Smartcards für Key Shares
* USB-Sticks (neu, versiegelt)
* Kamera für Dokumentation
* Tamper-Evident-Bags
* Protokoll-Formulare
* Stifte (nicht löschbar)
----
===== Ceremony-Ablauf =====
==== Phase 1: Eröffnung (15 Min) ====
1. Alle Teilnehmer identifizieren (Ausweis prüfen)
2. Protokoll starten mit:
- Datum, Uhrzeit, Ort
- Alle Anwesenden (Name, Rolle, Unterschrift)
3. Mobiltelefone abgeben
4. Zweck der Ceremony erklären
5. Rollen bestätigen
==== Phase 2: Hardware-Verifikation (30 Min) ====
# Air-Gap-System prüfen
# 1. Netzwerk deaktiviert?
ip link show # Keine aktiven Interfaces
# 2. BIOS-Boot-Log prüfen
dmesg | grep -i network
# 3. HSM-Status prüfen (falls verwendet)
/opt/hsm/bin/status
# Erwartetes Ergebnis: Uninitialisiert oder Ready
==== Phase 3: Schlüsselgenerierung (60 Min) ====
#!/bin/bash
# key-ceremony-generate.sh
echo "=== ROOT CA KEY GENERATION ==="
echo "Datum: $(date -Iseconds)"
echo "System: $(hostname)"
# 1. Entropy-Qualität prüfen
echo ""
echo "--- Entropy Check ---"
cat /proc/sys/kernel/random/entropy_avail
# Erwartetes Ergebnis: > 3000
# 2. Root-CA Schlüssel generieren
echo ""
echo "--- Key Generation ---"
# ECDSA P-384 (Klassisch)
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) - falls 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: Generated"
else
echo "ML-DSA-87: Not available (OpenSSL < 3.6)"
fi
# 3. Key-Fingerprints protokollieren
echo ""
echo "--- Key Fingerprints ---"
openssl ec -in root-ca-ecdsa.key -pubout -outform DER 2>/dev/null | sha256sum
# Protokollieren: SHA256 = ...
# 4. CSR erstellen (für Cross-Certification oder Self-Signed)
echo ""
echo "--- CSR Generation ---"
openssl req -new -key root-ca-ecdsa.key \
-out root-ca.csr \
-subj "/CN=Example Organization Root CA/O=Example Organization/C=DE"
# 5. Self-Signed Root erstellen
echo ""
echo "--- Self-Signed Certificate ---"
openssl x509 -req -in root-ca.csr \
-signkey root-ca-ecdsa.key \
-out root-ca.pem \
-days 9125 \
-extfile root-ca.ext \
-sha384
# Zertifikat prüfen
openssl x509 -in root-ca.pem -text -noout | head -30
==== Phase 4: Key Split (30 Min) ====
# Shamir Secret Sharing
echo "=== KEY SPLIT ==="
# 5 Shares, 3 benötigt zur Wiederherstellung
cat root-ca-ecdsa.key | ssss-split -t 3 -n 5 -w root-ca-share
# Shares auf Smartcards/USB schreiben
for i in 1 2 3 4 5; do
echo "Share $i → Smartcard/USB $i"
# cp root-ca-share-$i /mnt/smartcard-$i/
done
# Original-Key sicher löschen
shred -vfz -n 3 root-ca-ecdsa.key
rm root-ca-ecdsa.key
==== Phase 5: Verifikation (20 Min) ====
# 1. Zertifikat kann signieren?
echo "Test-Signatur..."
echo "test" | openssl dgst -sha384 -sign root-ca-ecdsa.key 2>/dev/null && echo "OK"
# 2. Key Shares kombinierbar?
ssss-combine -t 3 << EOF
EOF > /tmp/restored.key
# Vergleich
diff <(openssl ec -in /tmp/restored.key -pubout) <(openssl ec -in root-ca-ecdsa.key -pubout)
==== Phase 6: Verwahrung (15 Min) ====
1. Key Shares in Tamper-Evident-Bags versiegeln
2. Jeder Crypto Officer erhält seinen Share
3. Backup-Shares in Safe(s)
4. Seriennummern der Bags protokollieren
5. Übergabe-Unterschriften sammeln
==== Phase 7: Abschluss (15 Min) ====
1. Alle temporären Dateien sicher löschen
shred -vfz -n 3 /tmp/*.key /tmp/*.pem
2. System herunterfahren (Air-Gap)
3. Protokoll vervollständigen:
- Ende-Uhrzeit
- Alle Unterschriften
- Foto-/Video-Index
4. Protokoll versiegeln und archivieren
----
===== Protokoll-Vorlage =====
KEY CEREMONY PROTOCOL
=====================
Ceremony-ID: KC-2024-001
Datum: ________________
Beginn: _______ Ende: _______
Ort: ____________________________
TEILNEHMER:
| Name | Rolle | ID-Nr. | Unterschrift |
|------|-------|--------|--------------|
| | | | |
| | | | |
| | | | |
| | | | |
SCHLÜSSEL-DETAILS:
- Algorithmus: ECDSA P-384 / ML-DSA-87
- Key-ID: _______________
- Public Key Hash (SHA256): ______________________
- Zertifikats-Serial: _______________
- Gültigkeit: _______ bis _______
KEY SHARES:
| Share | Bag-Nr. | Treuhänder | Übergabe-Unterschrift |
|-------|---------|------------|----------------------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
| 5 | | | |
VERIFIKATION:
[ ] Entropy > 3000
[ ] Key erfolgreich generiert
[ ] Zertifikat selbst-signiert
[ ] Key Shares erstellt (3-of-5)
[ ] Shares verifiziert
[ ] Original-Key gelöscht
[ ] Shares verteilt und versiegelt
ABSCHLUSS:
[ ] Temporäre Dateien gelöscht
[ ] System heruntergefahren
[ ] Protokoll vollständig
_______________________________
Ceremony Lead Unterschrift
_______________________________
Auditor/Witness Unterschrift
----
===== HSM Key Ceremony =====
# Luna HSM Key Ceremony
/usr/safenet/lunaclient/bin/lunacm << 'EOF'
# Partition erstellen
partition create -label "Root-CA"
# Key generieren
partition contents -slot 0
generateKeyPair -keyType ECDSA -curvetype secp384r1 -label "root-ca-2024"
# Backup erstellen
partition backup -serialNumber
EOF
----
===== Checkliste =====
| # | Prüfpunkt | ✓ |
|---|-----------|---|
| 1 | Mindestens 3 Personen anwesend | ☐ |
| 2 | Identitäten verifiziert | ☐ |
| 3 | Air-Gap-System geprüft | ☐ |
| 4 | Entropy ausreichend | ☐ |
| 5 | Schlüssel generiert | ☐ |
| 6 | Shares erstellt und verteilt | ☐ |
| 7 | Shares verifiziert | ☐ |
| 8 | Original-Key sicher gelöscht | ☐ |
| 9 | Protokoll unterschrieben | ☐ |
| 10 | Protokoll archiviert | ☐ |
----
===== Verwandte Dokumentation =====
* [[.:ca-backup-restore|CA Backup/Restore]] – Schlüssel wiederherstellen
* [[.:notfall-revocation|Notfall-Revocation]] – Bei Kompromittierung
* [[de:int:pqcrypt:business:compliance|Compliance]] – Regulatorische Anforderungen
----
<< [[.:ca-backup-restore|← CA Backup/Restore]] | [[.:notfall-revocation|→ Notfall-Revocation]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>key-ceremony hsm audit compliance operator}}