Le soluzioni 4D sono sempre state sicure e stabili. Questo perché 4D investe molto nello sviluppo e nell’aggiornamento delle funzioni di sicurezza. In 4D v18 R4, 4D continua a concentrarsi su questo aspetto con una nuova funzionalità che migliora ulteriormente il suo toolkit di sicurezza. È ora disponibile una nuova classe che fornisce una serie di metodi per eseguire le operazioni crittografiche più comuni: Classe CryptoKey.
Funzioni di crittografia
Le funzioni di crittografia possono essere utilizzate per implementare funzioni di sicurezza come la privacy e l’autenticazione. La classe CryptoKey fornisce le seguenti funzioni di crittografia:
- sign() e verify(): creano e verificano le firme digitali
- encrypt() e decrypt(): cifrano edecifrano i dati.
Oltre a queste operazioni, la classe CryptoKey consente anche di generare nuove chiavi RSA o ECDSA o di caricare una coppia di chiavi esistente da una definizione PEM.
Firma e verifica
Le funzioni sign() e verify() consentono di firmare e verificare le firme dei messaggi. In questo modo è possibile fornire una prova di autenticità per i messaggi digitali o i documenti elettronici.
Le firme digitali forniscono:
- Autenticazione del messaggio: prova che un mittente noto ha creato e firmato il messaggio.
- integrità del messaggio: prova che il messaggio non è stato alterato dopo essere stato firmato
- Non ripudio: il firmatario non può negare la firma di un documento una volta che la firma è stata creata.
Un messaggio è firmato da una chiave privata e la firma è verificata dalla corrispondente chiave pubblica:
Esempio
Ecco un frammento di codice che mostra come è possibile firmare e verificare la firma di un messaggio grazie ai metodi della nuova classe CryptoKey di 4D:
Lato Bob
// 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*/
Lato Alice
// 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
crittografia e decrittografia
La crittografia e la decrittografia vengono eseguite utilizzando coppie di chiavi. Il processo di crittografia trasforma le informazioni originali in una forma irriconoscibile, mentre il processo di decrittografia converte i dati crittografati in una forma che può essere letta e compresa da un essere umano o da un computer.
Una sicurezza efficace richiede che:
- Le chiavi private rimangano private
- Le chiavi pubbliche possono essere distribuite apertamente senza compromettere la sicurezza.
Esempio
Supponiamo di voler criptare “hello world”. Ecco come fare:
$encrypted:=$key.encrypt("hello world")
E per la decrittazione:
$status:=$key.decrypt($encrypted)
Per informazioni più approfondite, date un’occhiata alla documentazione!
In un prossimo post del blog, vi mostreremo fino a che punto è possibile spingersi con questa classe e le possibilità che offre per costruire applicazioni sofisticate. Nel frattempo, sentitevi liberi di condividere le vostre esperienze di crittografia sul forum 4D!