Día a día la posibilidad de un ataque informático a las grandes y pequeñas empresas crece de manera exponencial, mientras que el cifrado no es la solución ideal para hacer frente a una serie de amenazas a la seguridad, es evidente que el cifrado de datos sensibles de forma selectiva antes de su almacenamiento en la base de datos hace mejorar la seguridad y confiabilidad con sus clientes.

Ejemplos de tales datos podrían incluir:

  1. Números de tarjetas de crédito
  2. Números de identificación
  3. Usuarios de acceso
  4. Etc

Para hacer frente a estas necesidades, Oracle ofrece el paquete PL / SQL para cifrar y descifrar los datos almacenados. Este paquete es compatible con varios estándares de codificación y algoritmos hash, incluyendo el algoritmo de cifrado (AES).

El DBMS_CRYPTO es un paquete permite el cifrado y descifrado de los tipos comunes de datos de Oracle, incluyendo RAW y objetos grandes (LOB), como imágenes y sonido. En concreto, es compatible con BLOB y CLOB. Además, proporciona el soporte de globalización para la encriptación de datos a través de diferentes juegos de caracteres de la base de datos.

Los algoritmos compatibles en este paquete son:

  1. Data Encryption Standard (DES), Triple DES (3DES, 2-key)
  2. Estándar de Encriptación Avanzado (AES)
  3. Hash SHA-1 criptográfico
  4. SHA-1 Mensaje Código de autenticación (MAC)

A continuación se listaremos una serie de librerías/paquetes útiles relacionadas a DBMS_CRYPTO, el cual permitirá comprender mejor las estructuras de los diferentes paquetes/funciones y/o implementación, las cuales son:

  • RAW: Son cadenas binarias de ancho variable de hasta 2000 bytes y 2 GB respectivamente. Oracle recomienda convertirlas en BLOB.
  • NOCOPY: Es una sugerencia de Oracle para mejorar el rendimiento de los parametros IN/OUT en el código PL/SQL, el uso de la palabra NOCOPY le dice al compilador que utilice el paso del argumento por referencia, por lo que no se necesita un buffer temporal y no es necesario copiar de nuevo las operaciones ocurren. En lugar de ello, cualquier modificación de los valores de los parámetros se escriben directamente en la variable de parámetro (parámetro real).
  • CHARACTER SET ANY_CS:  Permite que la variable contenga datos de cualquier juego de caracteres, con el significado práctico principal de habilitar para almacenar caracteres de un solo byte o caracteres de doble byte.
  • PLS_INTEGER: Se define en el paquete STANDARD como un subtipo (o más bien un sinónimo) de BINARY_INTEGER. Las variables declaradas como PLS_INTEGER pueden tener valores entre -2 ** 31 a 2 ** 31-1 (-2.147.483.648 a 2.147.483.647).

Ahora si, una vez comprendido lo anterior, entraremos en materia mencionando las características principales de  DBMS_CRYPTO, es importante aclarar  que este paquete cuenta con una serie de funciones y procedimientos los cuales pueden ser invocados en un bloque PL/SQL como un procedimiento almacenado(Store Procedure), en este Blog nos enfocaremos en las funciones, las cuales son:

  • DECRYPT: Esta función descifra los datos RAW utilizando un cifrado de flujo o bloque con una clave suministrada por el usuario y opcional IV (vector de inicialización).
  • ENCRYPT: Esta función cifra datos RAW utilizando un cifrado de flujo o bloque con una clave proporcionada por el usuario y opcional IV (vector de inicialización).
  • HASH: Esta función cifra datos RAW  de manera unidireccional, el cual genera  un identificador único (como una huella digital) de los datos de entrada. Puede utilizar el valor de hash para verificar si los datos se han modificado o no.
  • MAC: Esta función cifra datos RAW  a diferencia de la anterior esta permite cifrar valores con una clave(key) especifica.
  • RANDOMBYTES: Esta función devuelve un valor RAW que contiene una secuencia pseudo-aleatoria criptográficamente segura de bytes, que se puede utilizar para generar material aleatorio para claves de cifrado.
  • RANDOMINTEGER: Esta función devuelve un entero en el rango completo disponible para el tipo de datos Oracle BINARY_INTEGER(Asignación de valores entre -2**31 to 2**31-1 (-2,147,483,648 a 2,147,483,647).)
  • RANDOMNUMBER: Esta función devuelve un entero en el tipo de datos Oracle NUMBER en el rango de [0..2 ** 128-1].

Como se puede observar Oracle brinda una serie de herramientas las cuales nos permiten mejorar la seguridad en los datos almacenados y aplicaciones, en el siguiente Blog podremos ver una demostración detallada de cada una de las funciones mencionadas anteriormente.

Si te intereso este post, te podría interesar interesar:

DBMS_CRYPTO Hashing y capacidades de cifrado(Parte 2 -Demostración)

 

Links Referencias

https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_crypto.htm#i1004271https://oracle-base.com/articles/misc/nocopy-hint-to-improve-performance-of-parameters-in-plsqlhttp://psoug.org/reference/string_func.html

No vemos en la próxima!!