Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können konsistente Verschlüsselungsschlüssel bei der Verschlüsselung auf Feldebene des MongoDB-Clients aufrechterhalten werden?

Wie können konsistente Verschlüsselungsschlüssel bei der Verschlüsselung auf Feldebene des MongoDB-Clients aufrechterhalten werden?

王林
王林nach vorne
2024-02-06 09:00:13494Durchsuche

Wie können konsistente Verschlüsselungsschlüssel bei der Verschlüsselung auf Feldebene des MongoDB-Clients aufrechterhalten werden?

Frageninhalt

Ich verwende die clientseitige MongoDB-Verschlüsselung auf Feldebene, um Daten zu verschlüsseln und zu entschlüsseln. Allerdings ist mir aufgefallen, dass sich bei jeder Ausführung des Programms der ursprüngliche Binärschlüssel ändert. Dies macht es für mich schwierig, zuvor verschlüsselte Daten abzurufen, da ich sie mit dem neuen Schlüssel nicht entschlüsseln kann.

Gibt es eine Möglichkeit, konsistente Verschlüsselungsschlüssel für die clientseitige Verschlüsselung auf Feldebene in MongoDB beizubehalten? Wenn ja, wie kann ich das machen?

https://www.mongodb.com/docs/manual/core/csfle/fundamentals/manual-encryption/#std-label-csfle-fundamentals-manual-encryption

https://go.dev/play/p/6W8e0OiPV2L

Ich versuche, eine clientseitige Verschlüsselung auf Feldebene in einem MongoDB-Community-Projekt zu implementieren, sodass bestimmte Felder in einem Dokument vor dem Speichern in der Datenbank verschlüsselt und dann beim Abrufen aus der Datenbank entschlüsselt werden.

Ich habe die MongoDB-Dokumentation befolgt und konnte Daten erfolgreich ver- und entschlüsseln, als ich das Programm zum ersten Mal ausführte. Allerdings ist mir aufgefallen, dass sich der Schlüssel jedes Mal ändert, wenn ich das Programm erneut ausführe, und ich möchte den Schlüssel beibehalten.


Richtige Antwort


Diese Zeilen sollten gelöscht werden:

// drop the key vault collection in case you created this collection
// in a previous run of this application.
if err = client.database(keyvaultdb).collection(keyvaultcoll).drop(context.todo()); err != nil {
    log.fatalf("collection.drop error: %v", err)
}

Die folgende Zeile ist nur erforderlich, wenn der Schlüssel noch nicht vorhanden ist:

dataKeyID, err := clientEnc.CreateDataKey(context.TODO(), provider, dataKeyOpts)
if err != nil {
    log.Fatalf("CreateDataKey error: %v", err)
}

Vielleicht rufen Sie clientenc.getkeybyaltname zuerst an, um zu prüfen, ob der Schlüssel vorhanden ist.

Mit „der ursprüngliche Binärschlüssel ändert sich“ meine ich wohl, dass sich der Datenverschlüsselungsschlüssel (dek) ändert. Dies wird dadurch verursacht, dass die Sammlung, in der dek gespeichert ist, gelöscht wird.

Siehe Schlüssel und Schlüsseltresore:

Der Kundenhauptschlüssel (cmk) ist der Schlüssel, den Sie zum Verschlüsseln Ihres Datenverschlüsselungsschlüssels (dek) verwenden....

Datenverschlüsselungsschlüssel (dek) ist der Schlüssel, der zum Verschlüsseln von Feldern in Mongodb-Dokumenten verwendet wird. Sie speichern Ihre Datenverschlüsselungsschlüssel in einer Schlüsseltresorsammlung, die mit cmk...

verschlüsselt ist

Wenn Sie einen Datenverschlüsselungsschlüssel (Dek) löschen, werden alle mit diesem Dek verschlüsselten Felder dauerhaft unlesbar.

Wenn Sie einen cmk entfernen, werden alle von dek mit diesem cmk verschlüsselten Felder dauerhaft unlesbar.

Das obige ist der detaillierte Inhalt vonWie können konsistente Verschlüsselungsschlüssel bei der Verschlüsselung auf Feldebene des MongoDB-Clients aufrechterhalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen