Encriptar y Decriptar en ABAP

La encriptación es un proceso mediante el cual la información o datos se transforman de su forma original (texto claro) a una forma ilegible o cifrada, utilizando un algoritmo y una clave. El propósito principal de la encriptación es proteger la confidencialidad y la seguridad de la información durante su transmisión o almacenamiento, de modo que solo las personas autorizadas puedan acceder a los datos en su forma original utilizando la clave adecuada para descifrarlos.

Veamos algunos detalles sobre los algoritmos de encriptación y decriptación (o descifrado para hablar en un contexto español).

Algoritmos de Encriptación

  1. Cifrado César: Uno de los métodos más antiguos, consiste en desplazar cada letra un número fijo de posiciones en el alfabeto. Es fácil de entender pero no es seguro para la mayoría de las aplicaciones modernas.
  2. Cifrado de Vigenère: Similar al Cifrado César pero utiliza una palabra clave para determinar el desplazamiento de cada letra, lo que lo hace un poco más seguro.
  3. AES (Advanced Encryption Standard): Un estándar de encriptación simétrica que utiliza bloques de datos y claves de diferentes tamaños (128, 192 o 256 bits). Es ampliamente utilizado en todo tipo de aplicaciones debido a su seguridad y eficiencia.
  4. RSA: Un algoritmo de encriptación asimétrica que utiliza un par de claves: una pública y una privada. Es especialmente útil para la autenticación y el intercambio seguro de claves en sistemas de comunicación.
  5. ElGamal: Otro algoritmo de encriptación asimétrica que se basa en la dificultad del problema del logaritmo discreto. Se utiliza principalmente en aplicaciones de seguridad informática y criptografía.

Algoritmos de Decriptación

  1. Descifrado César: Es el proceso inverso al cifrado César, donde se desplaza cada letra hacia atrás en el alfabeto según el número fijo de posiciones.
  2. Descifrado de Vigenère: Similar al cifrado, pero se utiliza la palabra clave para determinar el desplazamiento inverso de cada letra.
  3. Descifrado AES: Para descifrar un mensaje encriptado con AES, se utiliza la misma clave y el mismo algoritmo pero en orden inverso.
  4. Descifrado RSA: Utiliza la clave privada correspondiente a la clave pública con la que se encriptó el mensaje para descifrarlo. Es un proceso matemáticamente complejo que garantiza la seguridad del mensaje.
  5. Descifrado ElGamal: Al igual que con RSA, el descifrado en ElGamal utiliza la clave privada correspondiente a la clave pública con la que se encriptó el mensaje original.

Es importante mencionar que la seguridad de un sistema de encriptación depende tanto del algoritmo utilizado como de la longitud y la complejidad de las claves. Los avances tecnológicos y matemáticos constantes requieren que los algoritmos de encriptación y decriptación se actualicen y fortalezcan regularmente para proteger la información en un mundo digital cada vez más interconectado y vulnerable a amenazas de seguridad.

A continuación, en en el lenguaje ABAP iremos a implementar un código que nos ayudará a encriptar y descifrar la información que la consideramos sensible.

Definimos una clase ABAP que se encargará a llamar a los componentes estándar que nos ayudan a realizar este proceso. En el método constructor de instancia definimos un parámetro de tipo STRING que se usará para recibir la información que se desea encriptar. En la sección privada definimos un atributo de tipo XSTRING para guardar la información convertida de STRING a XSTRING.

En la implementación del método constructor iremos a usar la clase estándar CL_ABAP_CONV_CODE_PAGE, precisamente la instancia que devuelve el método CREATE_OUT, para convertir el parámetro STRING a XSTRING.

Continuamos con el método que se encarga de encriptar la información. Tenemos que considerar que la encriptación se hará usando una clave y un algoritmo de encriptación- Para este ejemplo usamos como algoritmo AES256. La clase estándar CL_SEC_SXML_WRITER nos ayudará con esta tarea. En la misma encapsulación pública definimos el método que recibe la clave como STRING, ya que la información a encriptar se había recibido por el método constructor, y devuelve la información encriptada de tipo XSTRING por un parámetro returning. También gestionamos la propagación de la excepción que puede levantar el código de la clase estándar.

En la implementación observamos que el algoritmo lo pasamos a través de las constantes disponibles en la clase estándar.

Se pueden obtener más detalles sobre los diferentes tipos de algoritmos que maneja la misma clase estándar si observamos la declaración de las constantes de la clase estándar CL_SEC_SXML_WRITER.

Continuamos con la lógica que se encarga de descifrar el contenido encriptado en base a la clave y al algoritmo. El parámetro del algoritmo lo dejamos como opcional. Si no se informa en la llamada le asignamos por defecto el tipo AES256.

En la implementación usamos el método DECRYPT de la misma clase estándar CL_SEC_SXML_WRITER.

Toca probar la implementación. Crearemos una clase de test que implementa la interfaz IF_OO_ADT_CLASSRUN que nos permite escribir en la consola implementando el método MAIN. En la lógica del método instanciamos la anterior clase a la que le pasamos una cadena de caracteres a encriptar, junto con la clave.

Al ejecutar con F9, observamos en la consola la información encriptada y también la misma información descifrada.

Conclusión

La encriptación es esencial en el mundo digital actual para proteger la seguridad de la información. A través del uso del lenguaje ABAP, hemos explorado cómo implementar soluciones de encriptación robustas y efectivas, desde cifrados simétricos hasta algoritmos asimétricos como RSA. ABAP ofrece herramientas flexibles para adaptarse a diversas necesidades de seguridad. Sin embargo, la encriptación es solo una parte de un enfoque integral de seguridad que incluye políticas sólidas y prácticas de desarrollo seguras. En definitiva, la encriptación fortalece la confianza en nuestros sistemas y avanza hacia un futuro digital más seguro.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *