CryptoKey: ¡Cifrar, Descifrar, Firmar y Verificar!

Traducido automáticamente de Deepl

Las soluciones 4D siempre han sido seguras y estables. Esto se debe a que 4D invierte mucho en el desarrollo y la actualización de las características de seguridad. 4D continúa este enfoque en 4D v18 R4 con una nueva característica para mejorar aún más su conjunto de herramientas de seguridad. Una nueva clase que proporciona un conjunto de métodos para realizar operaciones criptográficas comunes está ahora disponible: Clase CryptoKey.

HDI Sign and verify

Funciones criptográficas

Las funciones criptográficas pueden utilizarse para implementar características de seguridad como la privacidad y la autenticación. La clase CryptoKey proporciona las siguientes funciones criptográficas

  • sign() y verify(): crean y verifican firmas digitales
  • encrypt() y decrypt (): cifrar y descifrar datos

Además de estas operaciones, la clase CryptoKey también permite generar nuevas claves RSA o ECDSA, o cargar un par de claves existente desde una definición PEM.

Firmar y verificar

Las funciones sign() y verify() permiten firmar y verificar las firmas de los mensajes. Esto le permite proporcionar una prueba de autenticidad para los mensajes digitales o documentos electrónicos.

Las firmas digitales proporcionan:

  • Autenticación del mensaje: prueba de que un remitente conocido ha creado y firmado el mensaje
  • Integridad del mensaje: prueba de que el mensaje no ha sido alterado después de ser firmado
  • No repudio: el firmante no puede negar la firma de un documento una vez creada la firma

Un mensaje es firmado por una clave privada y la firma es verificada por la clave pública correspondiente:

Ejemplo

He aquí un fragmento de código que muestra cómo se puede firmar y verificar la firma de un mensaje gracias a los métodos de la nueva clase CryptoKey de 4D:

Lado de 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*/

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 y DECRYPT

El cifrado y descifrado se realiza mediante pares de claves. El proceso de encriptación transforma la información original en una forma irreconocible, mientras que el proceso de desencriptación convierte los datos encriptados en una forma que puede ser leída y entendida por un humano o un ordenador.

La seguridad efectiva requiere:

  • Las claves privadas sigan siendo privadas
  • Las claves públicas puedan distribuirse abiertamente sin comprometer la seguridad

blank

Ejemplo

Supongamos que quiero encriptar «hola mundo». He aquí cómo hacerlo:

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

Y para descifrar:

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

Para obtener información más detallada, no dudes en consultar la documentación.

En una próxima entrada del blog, te mostraremos hasta dónde puedes llegar con esta clase y las posibilidades que ofrece para construir aplicaciones sofisticadas. Mientras tanto, no dudes en compartir tus experiencias criptográficas en el foro de 4D.

David Azancot
• Propietario de Producto 4D for iOS - David Azancot se unió al equipo de Producto 4D como Propietario de Producto en 2017. Está a cargo de escribir las historias de usuario y traducirlas en especificaciones funcionales. Su papel también incluye asegurarse de que las implementaciones de funcionalidades satisfagan las necesidades de los clientes. David se graduó con un MBA en Mercadeo, Internet y Movilidad en el Instituto Leonard De Vinci y comenzó su carrera en 2011 con una empresa móvil de nueva creación, posteriormente adquirida por Madvertise (un grupo de mercadeo móvil). Apasionado de las interfaces móviles, fue la elección natural para desarrollar formatos de anuncios móviles interactivos para el grupo en 2015. Paralelamente, David desarrolla sus propias aplicaciones para iOS y Android desde 2012.