it-swarm.com.de

Wo soll ein serverseitiger Verschlüsselungsschlüssel gespeichert werden?

Ich habe einige Daten, die symmetrisch mit einem einzelnen Schlüssel in meiner Datenbank verschlüsselt sind. Anstatt es hart in meinen Code zu codieren, suche ich nach einer sichereren Möglichkeit, den Verschlüsselungsschlüssel zu speichern. Wo kann ich es sicher aufbewahren?

129
Radek

Hier sind Ihre Möglichkeiten, ungefähr in absteigender Reihenfolge der Raffinesse.

  1. Verwenden Sie ein externes Hardware-Sicherheitsmodul. Es gibt eine gesamte Produktbranche , die zum Auslagern sicherheitsrelevanter Produkte entwickelt wurde Operationen an externe Geräte. Dies löst das Problem nicht so sehr wie relocate es, aber es verschiebt es auf ein Gerät, das weitaus sicherer ist, also Insgesamt ist es ein Sicherheitsgewinn. Wenn Sie etwas mit hohen Einsätzen tun, wird dies mit ziemlicher Sicherheit in Ihre Lösung einfließen.

  2. Binden Sie die Verschlüsselung an Ihre Hardware. Theoretisch tun HSMs genau dies, nur erwarten wir von einem HSM tendenziell etwas mehr Raffinesse als nur hardwaregestützte Krypto . Es stehen jedoch günstigere Optionen zur Verfügung, wenn Sie nicht den Durchsatz und die Konformität benötigen, die ein echtes HSM bietet. TPM-Chips wurden teilweise zu diesem Zweck erfunden, und es gibt viele Beispiele, die zeigen, wie man sie integriert. Darüber hinaus ist dedizierte Krypto-Hardware relativ kostengünstig geworden, und die Verwendung von Geräten wie Open-Source-U2F-Schlüsseln ist einfacher als es sich anhört.

  3. Binden Sie den Verschlüsselungsschlüssel an Ihr Administrator-Login (z. B. verschlüsseln Sie den Verschlüsselungsschlüssel mit Ihrem Administrator-Login). Dies ist nur am Rande nützlich, da Sie angemeldet sein müssen, um etwas zu verschlüsseln/entschlüsseln. Aber auf der positiven Seite kann niemand etwas verschlüsseln/entschlüsseln, es sei denn, Sie sind angemeldet (d. H. Mehr Kontrolle). Ein Großteil des sicheren Speichers in Windows funktioniert so.

  4. Geben Sie den Verschlüsselungsschlüssel beim Start ein und speichern Sie ihn im Speicher. Dies schützt vor Offline-Angriffen (es sei denn, sie erfassen den Schlüssel aus dem RAM) schwieriger zu tun). Ähnlich wie oben, aber auch anders. Der Server startet jedoch in einem unbrauchbaren Zustand, sodass Sie den Schlüssel manuell eingeben müssen, bevor die Arbeit ausgeführt werden kann.

  5. Speichern Sie den Schlüssel auf einem anderen Server. ZB. Legen Sie den Schlüssel auf den Webserver und die verschlüsselten Daten auf den Datenbankserver. Dies schützt Sie bis zu einem gewissen Grad, da jemand wissen müsste, um sowohl den Schlüssel als auch die Datenbank abzurufen, und er auch Zugriff auf beide Server haben müsste. Nicht erstaunlich sicher, aber dennoch eine äußerst beliebte Option. Die meisten Leute, die denken, dass sie es tun richtig machen es so. Wenn Sie dies in Betracht ziehen, sollten Sie auch eine der beiden oben genannten Optionen in Betracht ziehen.

  6. Speichern Sie den Schlüssel an einer anderen Stelle auf demselben Server. Fügt marginale Sicherheit hinzu, aber nicht viel. Die meisten kleineren Betriebe tun dies - sie sollten es nicht, aber sie tun es. In der Regel, weil sie nur einen Server haben und dieser irgendwo in einer Cloud ausgeführt wird. Dies ist so, als würde man einen Schlüssel an die Tür kleben, anstatt ihn im Schloss zu lassen. garantiert, um die inkompetentesten Angreifer zu stoppen.

  7. Speichern Sie den Schlüssel in der Datenbank. Jetzt versuchen Sie es nicht einmal. Trotzdem eine bedrückend beliebte Option.

Viele Cloud-basierte KMS-Lösungen (z. B.: [~ # ~] aws [~ # ~] , [~ # ~] gcp [~ # ~ ] , Azure ) bindet Ihre Verschlüsselung bei effektiver Verwendung an Ihre Cloud-VMs oder -Umgebung. Die eindeutige Identität Ihres VM ist für den Hypervisor leicht zu ermitteln und zu bestätigen, und das KMS verwendet die Kombination dieser Identität und der von Ihnen zugewiesenen Berechtigungen, um den Zugriff auf ein von HSM verwaltetes zu ermöglichen Verschlüsselungsschlüssel. Dies ähnelt einer Kombination der Optionen 1 und 2, die moduliert wurden, um die Vergänglichkeit von Cloud-VMs zu berücksichtigen. Diese KMS-Lösungen sind im Allgemeinen auch mit den anderen Identitätsmechanismen der Plattform kompatibel und binden Verschlüsselungsschlüssel effektiv an Anmeldeschlüssel Option 3.

145
tylerl

Mir ist klar, dass dies vor einiger Zeit beantwortet wurde, aber um ein paar Beispiele für Tylers gute Antwort zu geben:

  • Ich habe vor, sein # zu verwenden, um ein Passwort an ein Dienstkonto zu binden und es mit einem Powershell-Cmdlet abzurufen. Auf diese Weise müssen die Skripte nicht so stark modifiziert werden. Das Kennwort des Dienstkontos befindet sich in Active Directory und muss zuerst kompromittiert werden. Dies funktioniert bei mir, da ich es auf zwei Servern verwendet habe.

  • Für seine # 5 konnten wir einen Schlüssel im Klartext auf einem anderen Server mit externem Speicher speichern, da dieser Speicher selbst verschlüsselt und der Zugriff darauf eingeschränkt war. Wie Tyler erwähnt, scheint letzteres nicht so sicher zu sein, aber es war selbst für einen harten Gutachter gut genug.

5
Mike

Sie können eine zweischichtige Architektur für die Schlüsselverwaltung erstellen.

  1. Ein Schlüssel zum Verschlüsseln Ihrer Daten in Ruhe, der die Tabellenbereiche verschlüsselt oder spaltenbasiert.
  2. Hauptschlüssel zum Entsperren 1.

verwenden Sie für Ihre Hauptschlüssel eine der etablierten Schlüsselverwaltungslösungen wie:

  • Amazon AWS KMS
  • Oracle Vault
  • Microsoft MKS.
  • oder Open Source.

Denken Sie daran, dass Ihr Schlüsselmanager die gleiche oder eine höhere Verfügbarkeit unterstützen muss als Ihre Infrastruktur, in der der verwaltete Schlüssel verwendet wird.

2
Hugo R