As soluções 4D têm sido sempre seguras e estáveis. Isto porque a 4D investe fortemente no desenvolvimento e actualização de características de segurança. 4D continua este enfoque em 4D v18 R4 com uma nova funcionalidade para melhorar ainda mais o seu kit de ferramentas de segurança. Uma nova classe que fornece um conjunto de métodos para realizar operações criptográficas comuns está agora disponível: Classe CryptoKey.
Funções criptográficas
As funções de criptografia podem ser utilizadas para implementar características de segurança, tais como privacidade e autenticação. A classe CryptoKey fornece as seguintes funções de criptografia:
- assinar() e verificar(): criar e verificar assinaturas digitais
- encriptar() e decifrar(): encriptar e decifrar dados
Para além destas operações, a classe CryptoKey também permite gerar novas chaves RSA ou ECDSA, ou carregar um par de chaves já existente a partir de uma definição PEM.
Assinar e verificar
As funções sign() e verify( ) permitem-lhe assinar e verificar as assinaturas das mensagens. Isto permite-lhe fornecer prova de autenticidade para mensagens digitais ou documentos electrónicos.
As assinaturas digitais fornecem:
- Autenticação da mensagem: prova de que um remetente conhecido criou e assinou a mensagem
- Integridade da mensagem: prova de que a mensagem não foi alterada após ter sido assinada
- Não repúdio: o signatário não pode negar a assinatura de um documento uma vez que a assinatura tenha sido criada
Uma mensagem é assinada por uma chave privada e a assinatura é verificada pela chave pública correspondente:
Exemplo
Aqui está um trecho de código mostrando como se pode assinar e verificar uma assinatura de mensagem graças aos métodos da nova classe CryptoKey da 4D:
Lado do 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*/
O lado de 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
ENCRYPT e DECRYPT
A encriptação e desencriptação são realizadas utilizando pares de chaves. O processo de encriptação transforma a informação original numa forma irreconhecível, enquanto o processo de desencriptação converte os dados encriptados numa forma que pode ser lida e compreendida por um humano ou um computador.
Uma segurança eficaz requer:
- As chaves privadas permanecem privadas
- As chaves públicas podem ser distribuídas abertamente sem comprometer a segurança
Exemplo
Digamos que eu quero encriptar “olá mundo”. Eis como o fazer:
$encrypted:=$key.encrypt("hello world")
E para decifrar:
$status:=$key.decrypt($encrypted)
Para informações mais detalhadas, sinta-se à vontade para verificar a documentação!
Num próximo post no blogue, vamos mostrar-lhe até onde pode ir com esta classe e as possibilidades que ela oferece para a construção de aplicações sofisticadas. Entretanto, sinta-se à vontade para partilhar as suas experiências criptográficas no fórum 4D!