CryptoKey: Crittografa, decrittografa, firma e verifica!

Tradotto automaticamente da Deepl

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.

HDI Firma e verifica

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.

blank

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!

David Azancot
- Product Owner di 4D per iOS -David Azancot è entrato a far parte del team 4D Product come Product Owner nel 2017. Si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo comprende anche la garanzia che le implementazioni delle funzionalità soddisfino le esigenze dei clienti.David si è laureato con un MBA in Marketing, Internet e Mobilità presso l'Istituto Leonard De Vinci e ha iniziato la sua carriera nel 2011 con una start-up mobile, successivamente acquisita da Madvertise (un gruppo di marketing mobile). Appassionato di interfacce mobili, nel 2015 è stato la scelta naturale per sviluppare formati pubblicitari interattivi per dispositivi mobili per il gruppo. Parallelamente, dal 2012 David sviluppa le proprie applicazioni per iOS e Android.