Version 6.7
ENCRYPT BLOB (ZuVerschlüsseln; SendePrivKey{; EmpfPubKey})
Parameter | Typ | Beschreibung | |
ZuVerschlüsseln | BLOB | Daten zum Verschlüsseln | |
Verschlüsselte Daten | |||
SendePrivKey | BLOB | Privater Schlüssel des Senders | |
EmpfPubKey | BLOB | Öffentlicher Schlüssel des Empfängers |
Beschreibung
Der Befehl ENCRYPT BLOB verschlüsselt den Inhalt des BLOB mit dem Parameter ZuVerschlüsseln mit dem privaten Schlüssel SendePrivKey des Senders sowie optional auch den öffentlichen Schlüssel EmpfPubKey des Empfängers. Eine Verschlüsselung (öffentliche und private Schlüssel) erhalten Sie über den Befehl GENERATE ENCRYPTION KEYPAIR unter dem Thema "Gesichertes Protokoll".
Hinweis: Dieser Befehl verwendet Algorithmus und Verschlüsselungsfunktionen des SSL Protokolls. Achten Sie deshalb darauf, dass alle dafür notwendigen Komponenten korrekt auf Ihrem Rechner installiert sind selbst wenn Sie SSL nicht für 4D Web Server Verbindungen einsetzen. Ausführliche Informationen dazu finden Sie im Abschnitt "Sichere Verbindungen".
Wird nur ein Schlüssel (der private Schlüssel des Senders) für die Verschlüsselung verwendet, können Personen, denen der öffentliche Schlüssel bekannt ist, die Information lesen. Dieses System garantiert nur, dass der Sender selbst die Information verschlüsselt hat.
Der simultane Gebrauch des privaten Schlüssels vom Sender und des öffentlichen Schlüssels vom Empfänger garantiert, dass nur der Empfänger die Information lesen kann.
Das BLOB mit den Schlüsseln hat ein internes PEM (Privacy Enhanced Mail) Format. Über dieses plattformunabhängige Format können Sie mühelos Schlüssel in einem E-Mail oder in einer Textdatei per Kopieren/Einsetzen austauschen bzw. verwalten.
Sobald der Befehl läuft, enthält das BLOB mit dem Parameter ZuVerschlüsseln die verschlüsselten Daten. Sie lassen sich nur über den Befehl DECRYPT BLOB entschlüsseln, mit dem öffentlichen Schlüssel des Senders als Parameter.
Wurde darüberhinaus zum Verschlüsseln der Information der optionale öffentliche Schlüssel des Empfängers verwendet, ist zum Entschlüsseln auch der private Schlüssel des Empfängers notwendig.
Verschlüsselter Nachrichtenaustausch zwischen den Personen "Anne" und "Peter":
Hinweis: Der Befehl verwendet eine Prüfsumme, um jegliche Anderung (bewusst oder unbewusst) des BLOB Inhalts zu verhindern. Von daher sollten Sie ein verschlüsseltes BLOB nicht verändern, es könnte dann möglicherweise nicht entschlüsselbar sein.
Verschlüsselungsbefehle optimieren
Eine Verschlüsselung der Daten verlangsamt die Ausführung Ihrer Anwendungen, insbesondere wenn ein Schlüsselpaar verwendet wird. Es gibt jedoch bestimmte Maßnahmen zum Optimieren:
Der Befehl wird, je nach dem aktuell verfügbaren Speicher, synchron oder asynchron ausgeführt.
Der asynchrone Modus ist schneller, da er die anderen Prozesse nicht einfriert. Dieser Modus wird automatisch verwendet, wenn der verfügbare Speicherplatz mindestens doppelt so hoch ist wie die zu verschlüsselnden Daten.
Sonst wird zur Sicherheit der synchrone Modus verwendet. Er ist langsamer, da der die anderen Prozesse einfriert.
Bei umfangreichen BLOBs können Sie nur einen kleinen strategisch wichtigen Teil des BLOB verschlüsseln. Das verringert die Prozesszeit und die Größe der zu bearbeitenden Daten.
Beispiele
Einen Schlüssel verwenden
ine Firma möchte die Daten in einer 4D Datenbank firmenintern halten. Sie muss diese Information über Dateien regelmäßig via Internet an die Niederlassungen senden. Die Niederlassungen wiederum müssen sicher sein, dass die Informationen wirklich von der Mutterfirma stammen.
1. Die Mutterfirma kann mit dem Befehl GENERATE ENCRYPTION KEYPAIR ein Schlüsselpaar generieren:
`Methode GENERATE_KEYS_TXT C_BLOB($BPublicKey; $BPrivateKey) GENERATE ENCRYPTION KEYPAIR($BPrivateKey; $BPublicKey) BLOB TO DOCUMENT("PublicKey.txt"; $BPublicKey) BLOB TO DOCUMENT("PrivateKey.txt"; $BPrivateKey)
2. Die Mutterfirma behält den privaten Schlüssel und sendet an jede Niederlassung eine Kopie des Dokuments mit dem öffentlichen Schlüssel. Zur maximalen Sicherheit sollte der Schlüssel auf Diskette kopiert werden, die den Niederlassungen persönlich übergeben wird.
3. Dann kopiert die Firma die firmeninterne Information (die z.B. in einem Textfeld gespeichert ist) in BLOBs, die mit dem privaten Schlüssel verschlüsselt werden:
`Methode ENCRYPT_INFO C_BLOB($vbEncrypted;$vbPrivateKey) C_TEXT($vtEncrypted) $vtEncrypted:=[Private]Info VARIABLE TO BLOB ($vtEncrypted;$vbEncrypted) DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey) If(OK=1) ENCRYPT BLOB ($vbEncrypted; $vbPrivateKey BLOB TO DOCUMENT ("Update.txt";$vbEncrypted) End if
4. Die Update-Dateien können dann über einen ungesicherten Kanal wie z.B. Internet an die Niederlassungen gesandt werden.
5. Jede Niederlassung kann das Dokument mit dem öffentlichen Schlüssel entschlüsseln:
`Methode DECRYPT_INFO C_BLOB($vbEncrypted;$vbPublicKey) C_TEXT($vtDecrytped) C_TIME ($vtDocRef) ALERT ("Bitte das verschlüsselte Dokument wählen.") $vtDocRef:=Open document("") `Wähle Update.txt If (OK=1) CLOSE DOCUMENT($vtDocRef) DOCUMENT TO BLOB(Document;$vbEncrypted) DOCUMENT TO BLOB("PublicKey.txt"; $vbPublicKey) If (OK=1) DECRYPT BLOB ($vbEncrypted; $vbPublicKey) BLOB TO VARIABLE($vbEncrypted; $vtDecrypted) CREATE RECORD ([Private]) [Private]Info:=$vtDecrypted SAVE RECORD([Private]) End if End if
Wenn die Daten von einer anderen Quelle stammen (die den privaten Schlüssel nicht kennen kann), gibt es eine Fehlermeldung, da der öffetliche Schlüssel nicht paßt.
Ein Schlüsselpaar verwenden
Eine Firma möchte Informationen via Internet austauschen. Jede Niederlassung empfängt firmeninterne Information und sendet Information an die Mutterfirma. Es gibt also zwei Anforderungen:
- Der berechtigte Empfänger soll die Meldung nur lesen können,
- Der Empfänger muss einen Beweis erhalten, dass der Sender selbst die Meldung gesendet hat.
1. Die Mutterfirma und jede Niederlassung generieren über die Methode GENERATE_KEYS_TXT ihre eigenen Schlüsselpaare.
2. Der private Schlüssel wird von beiden Seiten geheimgehalten. Die Mutterfirma und jede Niederlassung senden sich gegenseitig jeweils die öffentlichen Schüssel. Sie müssen nicht über einen gesicherten Kanal gesendet werden, da der öffentliche Schlüssel nicht zum Entschlüsseln ausreicht.
3) Um eine zu sendende Information zu verschlüsseln, führt die Niederlassung bzw. Mutterfirma die Methode ENCRYPT_INFO_2 aus. Diese verwendet zum Verschlüsseln den privaten Schlüssel des Senders und den öffentlichen Schlüssel des Empfängers:
`Methode ENCRYPT_INFO_2 C_BLOB($vbEncrypted;$vbPrivateKey;$vbPublicKey) C_TEXT($vtEncrypt) C_TIME ($vtDocRef) $vtEncrypt:= [Private]Info VARIABLE TO BLOB ($vtEncrypt;$vbEncrypted) ` Ihr eigener privater Schlüssel wird geladen... DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey) If (OK=1) ` ...ebenso der öffentliche Schlüssel des Empfängers ALERT ("Bitte den öffentlichen Schlüssel des Empfängers wählen.") $vhDocRef:=Open document("") `Zu ladender öffentlicher Schlüssel If (OK=1) CLOSE DOCUMENT($vtDocRef) DOCUMENT TO BLOB(Document;$vbPublicKey) `BLOB Verschlüsselung mit dem beiden Schlüsseln als Parameter ENCRYPT BLOB ($vbEncrypted; $vbPrivateKey; $vbPublicKey) BLOB TO DOCUMENT ("Update.txt";$vbEncrypted) End if End if
4. Die verschlüsselte Datei kann nun via Internet an den Empfänger gesendet werden. Eine dritte Person kann die verschlüsselte Meldung nicht entschlüsseln, selbst wenn sie die öffentlichen Schlüssel des Absenders kennt. Zum Entschlüsseln ist nämlich auch der private Schlüssel des Empfängers notwendig.
5. Jeder Empfänger kann das Dokument mit dem eigenen privaten und dem öffentlichen Schlüssel des Senders entschlüsseln:
`Methode DECRYPT_INFO_2 C_BLOB($vbEncrypted;$vbPublicKey;$vbPrivateKey) C_TEXT($vtDecrypted) C_TIME ($vhDocRef) ALERT ("Bitte das verschlüsselte Dokument wählen.") $vhDocRef:=Open document("") `Wähle die Datei Update.txt If (OK=1) CLOSE DOCUMENT($vhDocRef) DOCUMENT TO BLOB(Document;$vbEncrypted) `Ihr eigener privater Schlüssel wird geladen DOCUMENT TO BLOB("PrivateKey.txt"; $vbPrivateKey) If (OK=1) ` ...ebenso der öffentliche Schlüssel des Senders ALERT ("Bitte öffentlichen Schlüssel des Senders wählen") $vhDocRef:=Open document("") `Zu ladender öffentlicher Schlüssel If (OK=1) CLOSE DOCUMENT($vhDocRef) DOCUMENT TO BLOB(Document;$vbPublicKey) `Das BLOB mit den beiden Schlüsseln als Parameter entschlüsseln DECRYPT BLOB ($vbEncrypted; $vbPublicKey;$vbPrivateKey) BLOB TO VARIABLE($vbEncrypted; $vtDecrypted) CREATE RECORD ([Private]) [Private]Info:=$vtDecrypted SAVE RECORD([Private]) End if End if End if
Referenz
DECRYPT BLOB, GENERATE ENCRYPTION KEYPAIR.