Encriptar campos con información sensible en Mirth Connect
El sistema de cifrado simétrico es aquel que utiliza una misma clave para cifrar y descifrar, mientras que, en la encriptación de datos asimétrica se usan diferentes claves: una clave pública para cifrar y una de carácter privado para descifrar, de forma que sea imposible deducir la contraseña privada a través de la pública.
En el Hospital X se está instalando un nuevo analizador semántico para la codificación automática en CIE-10. El sistema recibirá los informes de alta de los pacientes, narrativa sin codificar, y tras analizarlos generará una codificación automática. Para ello se decide enviar estos informes como mensajes HL7 v2.5 de tipo MDM, donde el informe irá codificado en Base64 y encriptado en un segmento OBX.
En el segmento PID irán los datos del paciente.
El sistema analizador semántico está en una red externa del Hospital. Por cumplir un mínimo de seguridad se requiere que los datos del paciente sensibles a la LOPD estén encriptados.
Para ello, se utilizará el algoritmo AES con 128 bits para cada cadena, con una clave compartida y conocida, que permita desencriptar en el destino.
1. Crear nuestro jar externo
Vamos a empezar creándonos nuestro jar, con una clase Crypt que permita a través de dos métodos encriptar y desencriptar una cadena de texto. Para los propósitos ilustrativos lo haremos de la forma mas sencilla y directa.
AES (Advanced Encryption Standard) es un algoritmo de cifrado por bloques, cifrado de clave simétrica que opera sobre bloques de bits de tamaño fijo, con una transformación invariante. No vamos a profundizar mas en este algoritmo, porque no es el objeto del artículo. Solo decir que, para que funcione necesitamos pasarle un vector de inicialización, y una semilla.
Para el desarrollo de esta clase Crypt necesitaremos descargarnos las librerías la librería Apache Commons Codec.
Utilizaremos la class Cipher para encriptar/desencriptar en Java, con el AES/CBC/PKCS5Padding.
Nuestra clase será muy simple, expondrá dos métodos que encapsulan el cifrado:
encrypt
Utilizaremos este método para encriptar un texto. Recibirá tres parámetros:
- String llave: La semilla o llave.
- String iv: El vector de inicialización.
- String texto: El texto que queremos encriptar.
Y devolverá un valor String con el texto encriptado. Este método puede devolver las siguientes excepciones: NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException.
decrypt
Este otro método servirá para desencriptar un texto previamente encriptado con AES 128. Aunque en este ejemplo no lo vamos a usar, porque la integración será en un sentido, ya lo tenemos para posteriores usos. No cuesta nada.
Igualmente recibirá tres parámetros:
- String llave: La semilla o llave.
- String iv: El vector de inicialización.
- String encrypted: El texto que queremos desencriptar.
Y devolverá un valor String con el texto desencriptado. Este método también puede devolver las siguientes excepciones: NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException.
Ya lo tenemos, y el código queda así de simple:
Para mas información, consultar la documentación de javax.cryptor.Cipher
Empaquetamos la clase en el paquete crypt y exportamos a un jar que podamos utilizar en Mirth Connect.
2. Cargar el recurso externo
Una vez tenemos nuestro jar empaquetado, únicamente necesitamos cargar el nuevo recurso externo en Mirth. Para ello, copiamos el jar en la ruta custom-lib de donde hayamos desplegado Mirth Connect, por ejemplo:
C:\Program Files\Mirth Connect\custom-lib
También tenemos la opción de crear nuevas subcarpetas en dicha ruta para organizar nuestros recursos externos, o especificar otra, pero por simplicidad suelo utilizar la misma.
Nos vamos al menú Settings, y a la pestaña Resources. Aquí veremos los recursos externos cargados en Mirth Connect. Pulsaremos el botón Reload Resource en el submenú Resources Tasks de la izquierda. Esto volverá a cargar los recursos externos que se encuentren en las rutas especificadas, y aparecerá nuestra librería crypt.
Referencias
https://www.disrupciontecnologica.com/como-utilizar-una-libreria-externa-en-mirth-connect/
https://forums.mirthproject.io/forum/mirth-connect/support/16140-import-java-libraries
https://hl7latam.blogspot.com/2021/06/como-crear-codigo-java-en-mirth-connect.html
Comentarios
Publicar un comentario