feat: KeyRotationService — Re-Verschlüsselung von Ciphertexten mit neuem Schlüssel #3

Open
opened 2026-07-26 19:19:54 +02:00 by claudeCode · 0 comments
Member

Motivation

In produktiven Systemen müssen Schlüssel regelmäßig rotiert werden (Compliance, Sicherheitsvorfall). KeyRotationService ermöglicht das atomare Re-Verschlüsseln eines Ciphertexts: decrypt mit altem Schlüssel → encrypt mit neuem Schlüssel.

API

$rotation = new KeyRotationService(
    oldService: new AesEncryptionService($oldHexKey),
    newService: new AesEncryptionService($newHexKey),
);

$newCiphertext = $rotation->rotate($oldCiphertext);

// Batch-Variante für DB-Migration:
$rotated = $rotation->rotateAll([$cipher1, $cipher2, $cipher3]);

Implementierungsdetails

  • Konstruktor nimmt zwei AesEncryptionService-Instanzen (alt + neu)
  • rotate(string $encoded): string — decrypt + re-encrypt in einem Schritt
  • rotateAll(array $encoded): array — Batch-Verarbeitung, bei Fehler Exception mit Index
  • Alte und neue Cipher-Variante dürfen unterschiedlich sein (z.B. AES-128 → AES-256)
  • Namespace: Tez\Utils\Crypto\Symmetric

Aufgaben

  • src/Symmetric/KeyRotationService.php implementieren
  • Unit-Tests in tests/Symmetric/KeyRotationServiceTest.php
    • Erfolgreiche Rotation: alter Ciphertext → neuer Ciphertext → gleicher Plaintext
    • Rotation zwischen verschiedenen Cipher-Varianten
    • rotateAll mit gemischten Einträgen
    • Fehlerfall: tampered input wirft Exception
  • README-Abschnitt ergänzen

Abhängigkeiten

  • Blockiert von #1 (Namespace-Reorganisation)
  • Setzt #2 (KeyGenerator) für Tests voraus
## Motivation In produktiven Systemen müssen Schlüssel regelmäßig rotiert werden (Compliance, Sicherheitsvorfall). `KeyRotationService` ermöglicht das atomare Re-Verschlüsseln eines Ciphertexts: decrypt mit altem Schlüssel → encrypt mit neuem Schlüssel. ## API ```php $rotation = new KeyRotationService( oldService: new AesEncryptionService($oldHexKey), newService: new AesEncryptionService($newHexKey), ); $newCiphertext = $rotation->rotate($oldCiphertext); // Batch-Variante für DB-Migration: $rotated = $rotation->rotateAll([$cipher1, $cipher2, $cipher3]); ``` ## Implementierungsdetails - Konstruktor nimmt zwei `AesEncryptionService`-Instanzen (alt + neu) - `rotate(string $encoded): string` — decrypt + re-encrypt in einem Schritt - `rotateAll(array $encoded): array` — Batch-Verarbeitung, bei Fehler Exception mit Index - Alte und neue Cipher-Variante dürfen unterschiedlich sein (z.B. AES-128 → AES-256) - Namespace: `Tez\Utils\Crypto\Symmetric` ## Aufgaben - [ ] `src/Symmetric/KeyRotationService.php` implementieren - [ ] Unit-Tests in `tests/Symmetric/KeyRotationServiceTest.php` - Erfolgreiche Rotation: alter Ciphertext → neuer Ciphertext → gleicher Plaintext - Rotation zwischen verschiedenen Cipher-Varianten - `rotateAll` mit gemischten Einträgen - Fehlerfall: tampered input wirft Exception - [ ] README-Abschnitt ergänzen ## Abhängigkeiten - Blockiert von #1 (Namespace-Reorganisation) - Setzt #2 (KeyGenerator) für Tests voraus
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tez/tez-utils-crypto#3