CryptoKey: Encriptar, Decriptar, Assinar, e Verificar!

Tradução automática de Deepl

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.

HDI Assinar e verificar

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

blank

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!

David Azancot
• Proprietário do produto 4D for iOS - David Azancot uniu-se ao time 4D Product como Proprietário do Produto em 2017. Está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação de funcionalidades satisfaçam às necessidades do cliente. David se formou com um MBA em Marketing, Internet e mobilidade no Instituto Leonard da Vinci e começou sua carreira em 2011 com uma empresa móvel de nova criação, posteriormente adquirida por Madvertise (um grupo de marketing móvel). Apaixonado pelas interfaces móveis, foi a escolha natural para desenvolver formatos de anúncios móveis interativos para o grupo em 2015. Paralelamente, David desenvolve suas próprias aplicações para iOS e Android desde 2012.