Zum Inhalt springen

Services, Wiki-Artikel, Blog-Beiträge und Glossar-Einträge durchsuchen

↑↓NavigierenEnterÖffnenESCSchließen
Kryptografie Glossar

Cryptographic Agility - Kryptografische Agilität

Cryptographic Agility bezeichnet die Fähigkeit eines Systems, kryptografische Algorithmen und Parameter ohne fundamentale Architekturänderungen auszutauschen. Kryptografische Agilität ist entscheidend für die Migration zu Post-Quantum-Kryptografie (PQC) und ermöglicht schnelle Reaktion auf Algorithmus-Schwächen (z.B. SHA-1-Deprecation, MD5-Ablösung) ohne vollständige System-Neuentwicklung.

Cryptographic Agility ist kein neues Konzept - aber selten konsequent umgesetzt. Die SHA-1-Ablösung dauerte über ein Jahrzehnt weil Systeme SHA-1 hartcodiert hatten. Die MD5-Ablösung dauerte noch länger. Jetzt kommt die größte kryptografische Migration in der IT-Geschichte: Post-Quantum-Kryptografie. Systeme ohne kryptografische Agilität werden wieder Jahre brauchen. Agile Systeme wechseln Algorithmen in Wochen.

Warum Cryptographic Agility wichtig ist

Historische Algorithmus-Ablösungen (wie lange dauerte es?):

MD5 (1991 → unsicher seit 2004):
  2004: Kollisionsangriff publiziert (Wang/Yu)
  2008: Flame-Malware nutzt MD5-Schwäche für Code-Signing-Fälschung
  2012: BSI: MD5 für digitale Signaturen ungeeignet
  2024: MD5 noch in vielen Legacy-Systemen aktiv!
  → 20+ Jahre Migration, immer noch nicht abgeschlossen

SHA-1 (1995 → unsicher seit 2005):
  2005: Theoretischer Angriff publiziert (Wang)
  2011: NIST: SHA-1 für Signaturen nach 2013 nicht mehr erlaubt
  2017: SHAttered - Google zeigt erste SHA-1-Kollision praktisch
  2023: SHA-1 noch in Netzwerkgeräten, Legacy-Protokollen aktiv
  → 18 Jahre und immer noch in Betrieb

RSA 1024 bit:
  2010: NIST: RSA-1024 für Signaturen depreciert
  2015: Deadline abgelaufen
  2026: Noch in IoT-Geräten, eingebetteten Systemen verbreitet

Post-Quantum (2024 → Migration läuft):
  2024: NIST FIPS 203/204/205 verabschiedet (ML-KEM, ML-DSA, SLH-DSA)
  2030: Quantencomputer (relevante Größe) möglicherweise verfügbar
  2026-2030: Kritisches Zeitfenster für Migration
  → Systeme OHNE Kryptografische Agilität werden wieder 15+ Jahre brauchen!

Fazit: Kryptografische Agilität ist nicht optional - sie entscheidet
über die Überlebensfähigkeit eines Systems in der PQC-Ära.

Architekturmuster für Cryptographic Agility

Pattern 1: Algorithmus-Abstraktion (Code-Ebene)

  SCHLECHT - Algorithmus hartcodiert:
  # Python:
  import hashlib
  hash = hashlib.sha256(data).hexdigest()  # Was wenn SHA-256 unsicher wird?

  BESSER - Abstraktion mit Austauschbarkeit:
  # Python:
  HASH_ALGORITHM = os.getenv("HASH_ALGORITHM", "sha256")

  def hash_data(data: bytes, algorithm: str = HASH_ALGORITHM) -> str:
      h = hashlib.new(algorithm)
      h.update(data)
      return h.hexdigest()

  # Wechsel zu SHA-3: ENV-Variable ändern → keine Code-Änderung!
  HASH_ALGORITHM=sha3_256 → Sofort aktiv

Pattern 2: Cryptographic Provider Interface

  # Java - Provider-Muster:
  public interface CryptoProvider {
      byte[] encrypt(byte[] plaintext, byte[] key);
      byte[] decrypt(byte[] ciphertext, byte[] key);
      String getAlgorithmId();
  }

  public class AES256GCMProvider implements CryptoProvider {
      @Override public byte[] encrypt(byte[] plaintext, byte[] key) { ... }
      @Override public String getAlgorithmId() { return "AES-256-GCM"; }
  }

  public class ML_KEMProvider implements CryptoProvider {
      @Override public byte[] encrypt(byte[] plaintext, byte[] key) { ... }
      @Override public String getAlgorithmId() { return "ML-KEM-768"; }
  }

  // Wechsel: CryptoProvider provider = new ML_KEMProvider();
  // Rest des Codes unverändert!

Pattern 3: Algorithm Negotiation (TLS-Stil)

  Client → Server: "Ich unterstütze: AES-256-GCM, ChaCha20-Poly1305, ML-KEM"
  Server: "Ich unterstütze: AES-256-GCM, ML-KEM"
  Einigung: "ML-KEM" (beste gemeinsame Unterstützung)

  → TLS 1.3: genau dieses Prinzip!
  → TLS Ciphersuites: server-side konfigurierbar ohne Clientänderung

Pattern 4: Key Versioning

  # Schlüssel und Algorithmus immer gemeinsam versionen:
  {
    "key_id": "k2026-03",
    "algorithm": "ML-KEM-768",
    "created": "2026-03-01",
    "expires": "2027-03-01",
    "key_material": "<encrypted-key>"
  }

  # Alte verschlüsselte Daten: mit altem Key + altem Algorithmus entschlüsseln
  # Neue Daten: mit neuem Key + neuem Algorithmus verschlüsseln
  # Kein Big Bang Migration nötig!

TLS-Konfiguration für Cryptographic Agility

Nginx - zukunftssichere TLS-Konfiguration:

ssl_protocols TLSv1.2 TLSv1.3;
# TLS 1.3 priorisieren - sicherer, schneller

ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384;
# TLS 1.3 Ciphers zuerst, dann TLS 1.2 Fallback

ssl_prefer_server_ciphers on;
# Server entscheidet (wichtig für Agility!)

# Post-Quantum TLS (experimentell, OpenSSL 3.5+):
# ssl_ciphers X25519Kyber768Draft00:TLS_AES_256_GCM_SHA384;
# → Hybrid: klassisch + PQ kombiniert

OpenSSL 3.x Provider-System:
  # Algorithmen als loadbare Provider:
  openssl list -providers
  # Default Provider (klassisch) + FIPS Provider + OQS Provider (Post-Quantum)

  # OQS (Open Quantum Safe) Provider laden:
  openssl speed -provider oqsprovider ml-kem-768
  # Testet ML-KEM-768 Performance

Crypto Policy in RHEL/Fedora:
  # System-weite Kryptografie-Policy:
  update-crypto-policies --set FIPS
  update-crypto-policies --set FUTURE  # Strengere Algorithmen
  # Ändert TLS-Defaults für alle Anwendungen systemweit
  # Keine App-by-App-Anpassung nötig!

Java Security Properties (JVM-weit):
  # $JAVA_HOME/conf/security/java.security
  jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, ...
  jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1, DSA, ...
  # Systemweit für alle Java-Anwendungen - ein Ort, alle Apps

Hybrid Cryptography für PQC-Migration

Hybrid-Ansatz: Klassisch + Post-Quantum parallel (Empfehlung während Übergangszeit):

Warum Hybrid?
  → PQC-Algorithmen sind neu: Implementierungsfehler möglich
  → Klassische Kryptografie: bewährt, aber Quantum-gefährdet
  → Hybrid: beide sicher = Kombination sicher
  → BSI-Empfehlung: Hybrid bis PQC reif genug

TLS 1.3 Hybrid Key Exchange:
  # RFC 9370: Multiple Key Shares in TLS
  # OpenSSL 3.5+ (experimentell):
  Client Hello: key_share = [X25519 || ML-KEM-768]
  Server Hello: key_share = [X25519 || ML-KEM-768]
  # Session Key = SHA256(X25519_shared_secret || ML-KEM_shared_secret)
  # Quantencomputer muss BEIDES brechen → sicher!

SSH Hybrid (OpenSSH 9.0+):
  # /etc/ssh/sshd_config
  KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256
  # sntrup761 (PQ) + x25519 (klassisch) hybrid

Signal Protocol (Messenger):
  → PQXDH: Post-Quantum Extended Diffie-Hellman
  → Ersetzt X3DH durch Hybrid (ML-KEM + X25519)
  → Implementiert seit Signal 2024

Signaturschemen:
  # Hybride Zertifikate (RFC in Entwicklung):
  # 1 Zertifikat mit 2 Schlüsselpaaren: RSA-4096 + ML-DSA-87
  # Signature: RSA_sign(ML-DSA_sign(message))
  # Beide müssen brechen - weder RSA noch ML-DSA allein reicht

Migration-Roadmap für Cryptographic Agility:

  2024-2025: Inventarisierung
    □ Crypto-Inventur: wo wird welcher Algorithmus genutzt?
    □ Alle APIs, Protokolle, Zertifikate, Key-Stores erfassen
    □ "Crypto Bill of Materials" erstellen

  2025-2027: Hybrid-Deployment
    □ TLS: Hybrid Key Exchange aktivieren (wo unterstützt)
    □ Code-Refactoring: Algorithmen abstrahieren
    □ Key Management: Versionierung einführen

  2027-2030: PQC-Migration
    □ Zertifikate: schrittweise zu ML-DSA wechseln
    □ Key Exchange: vollständig PQC (nach Hybrid-Phase)
    □ Long-lived Daten: Re-Encryption mit PQC-Schlüsseln

  2030+: Klassische Kryptografie deprecieren
    □ RSA, ECC für kritische Systeme abschalten
    □ AES-256/ChaCha20 bleiben (symmetrisch Quantum-sicher mit 128+ bit!)

Cookielose Analyse via Matomo (selbst gehostet, kein Tracking-Cookie). Datenschutzerklärung