CryptoKey: Verschlüsseln, entschlüsseln, unterschreiben und verifizieren!

4D Lösungen waren schon immer sicher und stabil. Das liegt daran, dass 4D viel in die Entwicklung und Aktualisierung von Sicherheitsfunktionen investiert. 4D setzt diesen Fokus in 4D v18 R4 mit einer neuen Funktion fort, die das Sicherheitstoolkit weiter verbessert. Eine neue Klasse mit einer Reihe von Methoden zur Durchführung gängiger kryptographischer Operationen ist jetzt verfügbar: CryptoKey class.

HDI Signieren und Verifizieren

Kryptographie-Funktionen

Kryptografiefunktionen können verwendet werden, um Sicherheitsmerkmale wie Datenschutz und Authentifizierung zu implementieren. Die Klasse CryptoKey bietet die folgenden Kryptografiefunktionen:

  • sign() und verify(): Erstellen und Überprüfen digitaler Signaturen
  • encrypt() und decrypt(): Verschlüsseln und Entschlüsseln von Daten

Zusätzlich zu diesen Operationen können Sie mit der Klasse CryptoKey auch neue RSA- oder ECDSA-Schlüssel erzeugen oder ein vorhandenes Schlüsselpaar aus einer PEM-Definition laden.

Signieren und Verifizieren

Mit den Funktionen sign() und verify() können Sie Nachrichtensignaturen signieren und verifizieren. Damit können Sie einen Echtheitsnachweis für digitale Nachrichten oder elektronische Dokumente erbringen.

Digitale Signaturen bieten:

  • Nachrichtenauthentifizierung: Nachweis, dass ein bekannter Absender die Nachricht erstellt und signiert hat
  • Integrität der Nachricht: Nachweis, dass die Nachricht nach dem Signieren nicht verändert wurde
  • Unleugbarkeit: Der Unterzeichner kann die Unterzeichnung eines Dokuments nicht mehr leugnen, sobald die Signatur erstellt wurde.

Eine Nachricht wird mit einem privaten Schlüssel signiert, und die Signatur wird mit dem entsprechenden öffentlichen Schlüssel überprüft:

Beispiel

Der folgende Codeausschnitt zeigt, wie Sie eine Nachricht mit Hilfe der Methoden der neuen 4D Klasse CryptoKey signieren und verifizieren können:

Bobs Seite

// Create the message
$message:="hello world"
Folder(fk desktop folder).file("message.txt").setText($message)

// Create a key
$type:=New object("type";"RSA")
$key:=4D.CryptoKey.new($type)

// Get the public key and save it
Folder(fk desktop folder).file("public.pem").setText($key.getPublicKey())

// Get signature as base64 and save it
Folder(fk desktop folder).file("signature").setText($key.sign($message;$type))


/*Bob sent the message, the public key and the signature to Alice*/

Alices Seite

// Get message, public key & signature
$message:=Folder(fk desktop folder).file("message.txt").getText()
$publicKey:=Folder(fk desktop folder).file("public.pem").getText()
$signature:=Folder(fk desktop folder).file("signature").getText()

// Create a key
$type:=New object("type";"PEM";"pem";$publicKey)
$key:=4D.CryptoKey.new($type)

// Verify signature
If ($key.verify($message;$signature;$type).success)

// The signature is valid

End if 

ENCRYPT und DECRYPT

Die Ver- und Entschlüsselung erfolgt mit Hilfe von Schlüsselpaaren. Bei der Verschlüsselung werden die ursprünglichen Informationen in eine nicht erkennbare Form umgewandelt, während bei der Entschlüsselung die verschlüsselten Daten in eine Form gebracht werden, die von einem Menschen oder einem Computer gelesen und verstanden werden kann.

Wirksame Sicherheit erfordert:

  • Private Schlüssel bleiben privat
  • Öffentliche Schlüssel können offen verteilt werden, ohne die Sicherheit zu gefährden.

blank

Beispiel

Nehmen wir an, ich möchte „Hallo Welt“ verschlüsseln. So wird es gemacht:

$encrypted:=$key.encrypt("hello world")

Und für die Entschlüsselung:

$status:=$key.decrypt($encrypted)

Für weitere Informationen lesen Sie bitte die Dokumentation!

In einem der nächsten Blogeinträge werden wir Ihnen zeigen, wie weit Sie mit dieser Klasse gehen können und welche Möglichkeiten sie für die Entwicklung anspruchsvoller Anwendungen bietet. In der Zwischenzeit können Sie Ihre Erfahrungen mit Kryptowährungen gerne im 4D Forum teilen!

David Azancot
4D for iOS Product Owner - David Azancot kam 2017 als Product Owner zum 4D Produktteam. Er ist verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Zu seinen Aufgaben gehört es auch, dafür zu sorgen, dass die Implementierungen der Funktionen den Bedürfnissen der Kunden entsprechen. David hat einen MBA-Abschluss in Marketing, Internet und Mobilität vom Leonard De Vinci Institute und begann seine Karriere 2011 bei einem mobilen Start-up-Unternehmen, das später von Madvertise (einer mobilen Marketinggruppe) übernommen wurde. Da er sich leidenschaftlich für mobile Schnittstellen interessiert, war er die erste Wahl, um 2015 interaktive mobile Werbeformate für die Gruppe zu entwickeln. Parallel dazu entwickelt David seit 2012 seine eigenen iOS- und Android-Applikationen.