Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: sheponion am 05.02.11 - 14:03:33
-
Bei der Verschlüsselung mit einem geheimen Verschlüsselungsschlüssel wird zusätzlich der öffentliche Schlüssel des aktuellen Benuzters verwendet.
Das bedeutet, das Dokument kann entschlüsselt und alle Felder eingesehen werden, von ...
... jedem Benutzer, der den verwendeten Geheimschlüssel besitzt, und
... dem Benutzer, der die Verschlüsselung ausgeführt hat, auch wenn dieser nicht (mehr) den Geheimschlüssel besitzt.
Zweiteres ist in meinem Fall nicht erwünscht. Der öffentliche Schlüssel soll nicht verwendet werden.
Dieses Problem (oder Feature) besteht in allen Notes-Versionen, ob mit LotusScript oder C-API.
Es gibt zwei Möglichkeiten das Problem nachzustellen:
1. Geheimschlüssel erstellen, Dokument mit Geheimschlüssel verschlüsseln, Geheimschlüssel entfernen, Dokument öffnen
2. Kopie der ID-Datei des Benutzers anlegen, Geheimschlüssel in der Original-Datei anlegen, Dokument verschlüsseln, Mit der kopierten ID-Datei anmelden, Dokument öffnen
Das Dokument lässt sich in beiden Fällen entschlüsselt öffnen.
Weiterhin ist ersichtlich, dass zwei Verschlüsselungssiegel verwendet werden: $Seal und $Seal2
Wahrscheinlich ein Siegel für den öffentlichen und ein Siegel für den geheimen Schlüssel.
Ist das Verhalten der Verschlüsselung so gewünscht oder handelt es sich hierbei um einen Fehler/Bug?
Kennt jemand eine Möglichkeit Dokumente einzig mit dem geheimen Schlüssel zu verschlüsseln oder einen Weg, den öffentlichen Schlüssel zu entfernen?
-
Das habe ich auch schon beobachtet: Wenn verschlüsselt wird, wird immer der öffentliche Schlüssel des aktuellen Benutzers mitverschlüsselt (sonst könnte man sich so aus einem Dokument "aussperren")
Gruß
Roland
-
So ganz verstehe ich Dein Problem nicht. Ein User, der ein Dokument erstellt und verschlüsselt hat, darf es später nicht mehr entschlüsseln dürfen? Die Information in dem Dokument ist ihm doch bekannt, wozu also? Du kannst ja auch nicht verhindern, dass er sich den Inhalt merkt oder ausdruckt (was gefährlicher wäre, da der Ausdruch unverschlüsselt irgendwo herumfliegt).
Hast Du mal ausprobiert, was passiert, wenn Du eines der Felder löschst?
Call doc.RemoveItem ("$Seal")
-
Du hast schon recht, Peter. So habe ich das noch nicht gesehen.
Trotzdem verstehe ich nicht, wieso Notes das tut.
Mit den "$Seal"-Feldern habe ich schon herumgespielt. Es sieht so aus, als ob im ersten Feld wichtige Informationen enthalten sind, die auch für weitere Felder gelten. Mit dem Löschen des ersten Feldes ist die Verschlüsselung nicht mehr lesbar.
Sicherer wird es wohl sein, den Inhalt ggf. zu verändern, was in meinem Fall kein Problem ist, und dann nochmals über eine andere Person oder ID zu verschlüsseln.
-
Also die Hilfe ("Encrypting documents and fields") meint:
Using the SecretEncryptionKeys field.
The SecretEncryptionKeys field can contain either the name of a key, which is automatically used to encrypt documents, or the field can be blank, allowing users to assign the encryption key. To encrypt a field with a secret key using either method, users must have it stored in their ID file.
Nimmt er da trotzdem auch den public key des akt. users?
-
Also es gibt ja zwei Felder:
SecretEncryptionKeys - vom Typ Text, hier stehen die geheimen Schlüssel drin
PublicEncryptionKeys - vom Typ Names (Text sollte auch gehen) hier stehen die Namen drin
Wenn ein Dokument verschlüsselt wird, egal wie, wird (soweit ich das durch probieren heraus gefunden habe) immer der PublicKey des aktuellen Users mit dazu verschlüsselt. (Der Wert der in PublicEncryptionKeys kann also von den tatsächlich verwendeten Schlüsseln abweichen, das Feld lässt sich sogar nachträglich ändern/entfernen ohne dass die Verschlüsselung "kaputt" geht)
In Notes 7 ist aber ein blöder Bug, bevor wer in die Falle tappt:
Steht ein Name in PublicEncryptionKeys und das Feld SecretEncryptionKeys existiert NICHT so wird NUR für den aktuellen User verschlüsselt, der Inhalt von PublicEncryptionKeys wird nicht beachtet (in 8.5 ist dieses Verhalten definitiv anders)
Ein Setzen von SecretEncryptionKeys = "", falls es nicht existiert löst das Problem
Beim Verschlüsseln wird EIN "Zwischen"-Schlüssel erzeugt, mit welchem die Felder in das Feld $sealData verschlüsselt werden.
Der Zwischenschlüssel wird mit ALLEN verwendeten Schlüsseln nochmals verschlüsselt in $seal abgelegt.
Sobald man auf das Dokument zugreift, verschwinden diese $Seal* Felder (und die darin verschlüsselten erscheinen) wenn man entschlüsseln kann.
Gruß
Roland