Dominando la clase %SYSTEM.Encryption
InterSystems IRIS tiene un excelente soporte en operaciones de encriptación, desencriptación y hacina. Dentro del manual de la clase %SYSTEM.Encryption existen métodos para el uso de los principales algoritmos del mercado.
Algoritmos y tipos de Encriptación/Desencriptación de IRIS
Como puedes comprobar, las operaciones están basadas en claves y incluyen 3 opciones:
- Symmetric Keys: Las partes que realizan operaciones de cifrado y descifrado comparten la misma clave secreta.
- Asymmetric Keys: Las partes que realizan operaciones de cifrado y descifrado comparten la misma clave secreta para el cifrado. Sin embargo, para el descifrado cada socio tiene una clave privada. Esta clave no se puede compartir ya que es una prueba de identidad.
- Hash: Se utiliza cuando no es necesario descifrar, sino solo cifrar. Es un enfoque común cuando se trata de almacenar contraseñas de usuario.
Diferencias entre Encriptación Simétrica y Asimétrica
- La encriptación simétrica utiliza una única clave que debe compartirse entre las personas que necesitan recibir el mensaje, mientras que la asimétrica utiliza un par de claves públicas y una clave privada para cifrar y descifrar mensajes durante la comunicación.
- La encriptación simétrica es una técnica antigua, mientras que la encriptación asimétrica es relativamente nueva.
- La encriptación asimétrica se introdujo para complementar el problema inherente de la necesidad dwe compartir la clave en un modelo de criptografía simétrica, eliminando la necesidad de compartir la clave mediante el uso de un par de claves pública y privada.
- La criptografía asimétrica requiere relativamente mas tiempo que la criptografía simétrica.
|
|
|
|
|
Tamaño de los datos |
|
|
|
|
|
|
|
Longitud de la clave |
|
|
|
|
|
|
|
|
|
|
|
Técnicas |
Es una técnica antigua |
Es una técnica moderna |
|
|
|
|
|
|
|
|
|
|
|
|
Fuente: https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences
Usando la clase %SYSTEM.Encryption para Encriptar, Desencriptar y Hash
Para realizar el ejercicio con IRIS para operaciones de encriptado, desencriptado y has visita https://github.com/yurimarx/cryptography-samples, sigue estos pasos:
1. Clona / git pull el repo en cualquier directorio local
$ git clone https://github.com/yurimarx/cryptography-samples.git
2. Abre un terminal de Docker en ese directorio y ejecuta:
$ docker-compose build
3. Levanta el container de IRIS:
$ docker-compose up -d
4. Abre un terminal de IRIS:
$ docker-compose exec iris iris session iris -U IRISAPP IRISAPP>
5. Para realizar una encriptación RSA asimétrica ejecuta este comando:
IRISAPP>Set ciphertext = ##class(dc.cryptosamples.Samples).DoRSAEncrypt("InterSystems")
IRISAPP>Write ciphertext
Ms/eR7pPmE39KBJu75EOYIxpFEd7qqoji61EfahJE1r9mGZX1NYuw5i2cPS5YwE3Aw6vPAeiEKXF
rYW++WtzMeRIRdCMbLG9PrCHD3iQHfZobBnuzx/JMXVc6a4TssbY9gk7qJ5BmlqRTU8zNJiiVmd8
pCFpJgwKzKkNrIgaQn48EgnwblmVkxSFnF2jwXpBt/naNudBguFUBthef2wfULl4uY00aZzHHNxA
bi15mzTdlSJu1vRtCQaEahng9ug7BZ6dyWCHOv74O/L5NEHI+jU+kHQeF2DJneE2yWNESzqhSECa
ZbRjjxNxiRn/HVAKyZdAjkGQVKUkyG8vjnc3Jw==6. Para realizar una desencriptación RSA asimétrica ejecuta este comando:
IRISAPP>Set plaintext = ##class(dc.cryptosamples.Samples).DoRSADecrypt(ciphertext) IRISAPP>Write plaintext InterSystems
7. Para realizar una encriptación AES CBC de manera sincronía ejecuta este comando:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoAESCBCEncrypt("InterSystems")
8sGVUikDZaJF+Z9UljFVAA==8. Para realizar una desencriptación AES CBC simétrica ejecuta este comando:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoAESCBCDecrypt("8sGVUikDZaJF+Z9UljFVAA==")
InterSystems9. Para realizar un has MD5 con un enfoque antiguo, ejecuta:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoHash("InterSystems")
rOs6HXfrnbEY5+JBdUJ8hw==10. Para realizar un has SHA con el enfoque recomendado, ejecuta:
IRISAPP>Do ##class(dc.cryptosamples.Samples).DoSHAHash("InterSystems")
+X0hDlyoViPlWOm/825KvN3rRKB5cTU5EQTDLvPWM+E=11. Para salir del terminal ejecuta una de las siguientes opciones:
Enter HALT or H (not case-sensitive)
Acerca del código fuente
1. Acerca de la clave simétrica:
El el fichero Dockerfile, existe una variable de entorno para usar en las operaciones simétricas.
2. Acerca de la clave asimétrica
|
# para usar con operaciones de encriptado y desencriptado asimetricas
RUNopensslreq -new-x509-sha256-configexample-com.conf-newkeyrsa:2048-nodes-keyout
example-com.key.pem -days365-outexample-com.cert.pem |
El el fichero Dockerfile, existe una variable de entorno para usar en las operaciones asimétricas.
3. Encriptación Simétrica
Se usa la operación AES CBC de encriptado para cifrar textos. La codificación Base64 devuelve los resultados como un texto bonito/legible para el usuario.
4. Desencriptación Simétrica
Se usa la operación AES CBC de desencriptado para descifrar textos. La decodificación Base64 devuelve los resultados en formato binario, para que pueda utilizarse en el proceso de descifrado.
5. Encriptación Asimétrica
Es necesario obtener el contenido del archivo de clave pública para cifrar con RSA. En la operación se utiliza encriptación RSA para cifrar textos.
6. Desencriptación Asimétrica
Es necesario obtener el contenido del archivo de clave privada para descifrar con RSA. En la operación se utiliza RSA Decrypt para descifrar textos.
7. Hashear texto utilizando MD5 (método antiguo)
La operación MD5 Hash cifra el texto no se es posible descifrarlo. El uso de MD5 para hashear no se recomienda en nuevos proyectos debido a que se considera inseguro. Es por eso que fue reemplazado por SHA. InterSystems IRIS admite SHA (lo veremos en el siguiente ejemplo).
8. Hashear texto usando SHA (enfoque recomendado)
En este ejemplo se usa el método de has SHA-3. Según la documentación de InterSystems, este método genera un has utilizando uno de los Algoritmos de Hash Seguro de los Estados Unidos - 3. (Consulta la publicación 202 de los estándares de procesamiento de información federal para obtener más información).
El método de SHA, admite establecer la longitud de bits utilizada en una operación de hash. Cuantos más bits, más difícil es descifrar el hash. Sin embargo, el proceso de hash también se ralentiza. En este ejemplo usamos 256 bits. Puedes elegir estas opciones para la longitud de bits:
- 224 (SHA-224)
- 256 (SHA-256)
- 384 (SHA-384)
- 512 (SHA-512)