4 Stimmen

Entwicklung einer Webanwendung, die automatisch die Verschlüsselungsschlüssel zur Verschlüsselung der in einer Datenbank gespeicherten Daten rotiert

Angenommen, ich habe eine ASP.NET MVC 3 Anwendung, die in einer Webfarm läuft, in der jeder Webserver zu einer Arbeitsgruppe gehört (im Gegensatz zu einer Domäne mit gemeinsamen Konten). Die Webfarm ist außerdem automatisch skalierbar, was bedeutet, dass die Anzahl der Instanzen von der Last abhängt. Sensible Daten werden verschlüsselt und entschlüsselt, wenn sie in der Datenbank gespeichert oder von dort abgerufen werden. Die symmetrischen und asymmetrischen Schlüssel werden auf jeder Maschine gespeichert, mit ACL geschützt und mit DAPI verschlüsselt (unter Verwendung des Maschinenschlüssels).

Aus Gründen der Einhaltung von Vorschriften und der Sicherheit ist es erforderlich, dass die Schlüssel in regelmäßigen Abständen gewechselt werden. Wie würden Sie das System so gestalten/ändern, dass die Schlüssel automatisch in regelmäßigen Abständen gewechselt werden, ohne dass das System offline geht? Angenommen, es gibt eine beliebige Anzahl von Tabellen mit einer beliebigen Anzahl von Spalten, die mit den Schlüsseln verschlüsselt werden.

Viele Fragen und Antworten beziehen sich darauf, welche Algorithmen zu verwenden sind und wie die Schlüssel zu sichern sind, aber nur wenige befassen sich damit, wie eine Anwendung zu entwerfen und zu implementieren ist, die eine Rotation dieser Schlüssel ermöglicht, insbesondere in einer dynamischen Umgebung (Autoskalierungsumgebung), die eine Datenbank gemeinsam nutzt.

3voto

mensi Punkte 9500

Mehrere Schlüssel in Ihrem System haben

Bei mehreren Kodierungen (oder Verschlüsselungsschemata, Schlüsseln) möchte man in der Regel zuerst eine Art Versionsschema einführen, da man wissen muss, welcher Schlüssel für diesen bestimmten Teil der Daten verwendet wurde. Hierfür haben Sie mehrere Möglichkeiten:

  • Zeitstempel: Speichern Sie den Zeitstempel, mit dem die Daten verschlüsselt wurden, zusammen mit den Daten. Unterteilen Sie die Zeit dann in Intervalle von bestimmter Länge, in denen derselbe Schlüssel verwendet wird.
  • Versionsnummern: Sie können auch einfach steigende Versionsnummern vergeben.
  • Schlüssel-Fingerabdruck: Speichern Sie den Fingerabdruck des Schlüssels zusammen mit den Daten

In jedem Fall müssen Sie alle derzeit verwendeten Schlüssel speichern, um die Daten entschlüsseln zu können. Beim Lesen von Daten suchen Sie einfach nach dem Schlüssel, der Ihrer Versionskennung entspricht, und entschlüsseln ihn. Beim Schreiben verwenden Sie den derzeit aktiven Schlüssel und speichern die verschlüsselten Daten + Ihre Versionskennung. Sie können einen Schlüssel löschen, wenn Sie sicher sind, dass sich keine mit diesem Schlüssel verschlüsselten Daten in Ihrer Datenbank befinden.

Einsetzen neuer Schlüssel

Jedes Mal, wenn Sie zu einem neuen Schlüssel wechseln, muss dieser Schlüssel generiert und bereitgestellt werden. Sie können dies zentral tun oder ein verteiltes Schlüsselvereinbarungsprotokoll verwenden.

Daten neu verschlüsseln

Wenn Sie Daten erneut verschlüsseln müssen, können Sie dies auf zwei Arten tun:

  • Hintergrundprozess: Ein Hintergrundprozess, der einfach N Datenelemente mit einer alten Versionskennung abruft, sie entschlüsselt und wieder verschlüsselt und das Ergebnis speichert. Legen Sie zwischen den Durchläufen eine kurze Ruhepause ein, um Ihr System nicht zu überlasten.
  • Update zum Zugang: Immer wenn Sie Daten lesen und feststellen, dass sie eine alte Versionskennung haben, verschlüsseln Sie sie erneut mit dem aktuellen Schlüssel und speichern das Ergebnis. Abhängig von Ihrem Datenzugriffsmuster wird dabei möglicherweise nicht alles neu verschlüsselt, so dass ein zusätzlicher Hintergrundprozess erforderlich sein könnte.

Asymmetrische Krypto

Bei asymmetrischer Verschlüsselung (z. B. für die Speicherung von Kreditkartennummern, wobei der Webserver nur den öffentlichen Schlüssel zum Verschlüsseln und der Zahlungsabwickler den privaten Schlüssel zum Entschlüsseln hat) wird es etwas kompliziert, da nur die Rechner mit den privaten Schlüsseln die Daten wieder verschlüsseln können. Alle anderen Aspekte sind die gleichen.

0voto

ixe013 Punkte 8941

Googles Keyczar bietet einen solchen Rahmen, aber es gibt keine .Net-Version.

Vielleicht könnten Sie die C++-Version in einen .Net-Wrapper verpacken?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X