Appearance
Unidad 4: Seguridad de la información
Sabemos que los programas, básicamente, manipulan datos para obtener un resultado (gráfico, numérico, de texto, o incluso el movimiento de piezas físicas a través de la electrónica). Sabemos también que los datos son los activos más importantes de toda empresa moderna y de cada persona, como así también su privacidad. Es por eso que las aplicaciones deben garantizar la seguridad de los datos que manipulan y, por supuesto, es nuestra tarea hacerlo, respetando siempre la privacidad del usuario.
Aunque no existen sistemas 100% seguros, se deben tomar ciertas medidas que garanticen un nivel de seguridad razonable a los usuarios.
La seguridad de la información es toda medida que se toma para resguardar y proteger la información. Básicamente toda aplicación debe garantizar tres principios fundamentales, conocidos como la Triada CID (o CIA Triad en inglés): Confidencialidad, Integridad, Disponibilidad.
- Confidencialidad (Confidentiality): La información debe ser accesible únicamente por las personas autorizadas.
- Integridad (Integrity): La información debe mantenerse completa (íntegra) y libre de adulteraciones, de manera que siempre se pueda confiar en ella.
- Disponibilidad (Availability): La información debe ser accesible siempre que se la necesite, durante el tiempo que sea necesario.
Además, en un mundo inmerso en la tecnología en el que cada vez más se realizan transacciones digitales con grandes impactos en nuestras vidas, el No repudio garantizará o refutará indiscutiblemente la ocurrencia de un hecho.
Confidencialidad
El objetivo de la confidencialidad consiste en garantizar que los datos solamente puedan ser accedidos e interpretados por sus legítimos destinatarios.
El cifrado es la técnica generalmente utilizada para brindar confidencialidad de los datos y consiste en un proceso de transformación de los datos con un algoritmo de cifrado y una o dos claves (claves de cifrado). De manera que, para obtener el contenido original es necesario contar ya sea con la misma clave con la que se cifró (criptografía simétrica), o con una diferente (criptografía asimétrica).
Por ejemplo, supongamos que la contraseña de nuestro usuario es 123456. Éste es un dato sensible que no quisiéramos que otras personas lo sepan, al menos durante un determinado tiempo, durante el cual el usuario habrá ido cambiándola periódicamente según lo que se recomienda. Digamos cada tres meses.
De manera que, en vez de almacenar la cadena “123456” en la base de datos, se la transforma con un algoritmo de cifrado y almacenamos el hash que resulta de esta transformación.
En EsJS/JavaScript podemos utilizar la librería bcryptjs para cifrar cadenas de texto.
En este caso, la contraseña del Usuario es 123456, y se cifró con el algoritmo bcrypt con un nivel de complejidad 10, es decir, la cantidad de veces que se aplicará el algoritmo de cifrado. Cuanto mayor sea el número, más complejo será el algoritmo y más tiempo tomará cifrar y descifrar los datos. Por lo tanto, cuanto mayor sea el número, más segura será la contraseña.
Si por alguna razón un intruso consigue acceso a la base de datos, sólo verá el valor cifrado, por ejemplo $2a$10$BjWVIsj/48x1dTjxF32couNHzZMI27YfgGwd9UwMDRg9OGdyueMS6. Por medio de distintas técnicas, como el Ataque de Fuerza Bruta, podría descifrar el valor original de la contraseña, aunque usualmente le llevará meses o años (dependiendo de la complejidad de la contraseña).
En definitiva, no existe ningún método completamente seguro para cifrar nuestros datos. Las distintas técnicas sólo nos garantizan que estarán seguros por un determinado tiempo. Nosotros debemos elegirlas según nuestras necesidades y tomar las precauciones que cada una implica.
Integridad
El objetivo de la integridad es garantizar que los datos no han sido alterados, permanecen completos y son fiables. Una alteración podría ocurrir por un ataque de un intruso, virus, puerta trasera o incluso por fallos en el software o errores humanos.
Una técnica bastante común para garantizar la integridad de los datos consiste en calcular hashes. El hash, o “síntesis del mensaje” es un código que se genera a partir de una cadena de texto mediante una función matemática de tal manera que es muy poco probable que otra cadena de texto produzca el mismo hash.
De esta manera, si un emisor A quiere enviarle un mensaje al receptor B, asegurando la integridad del mensaje, podría adjuntar también el hash producido mediante una función hash. Cuando el receptor B reciba el mensaje, podrá aplicar la misma función hash al mensaje recibido y debería producir el mismo hash que produzco el emisor A. Si algún intruso C hubiera alterado el mensaje, el hash que hubiese producido B hubiera sido distinto al de A, dejando en evidencia que el mensaje ha sido alterado. Es decir, de ninguna manera proteje al mensaje ante alteraciones. Sólo puede garantizar que el dato está íntegro. Es decir, que no ha sido alterado.
MD5 es una función hash ampliamente conocida y se utiliza comúnmente para garantizar la integridad de un archivo. Produce un hash de 32 caracteres y suele acompañar al enlace de descarga de un archivo, para que, una vez descargado, el usuario aplique la función MD5 sobre el archivo descargado y compare el hash obtenido con el indicado por la página oficial para asegurarse de haber descargado el archivo correcto, sin alteraciones.
Por ejemplo, en el siguiente enlace se encuentra un archivo que contiene un texto Archivo de prueba 1, que produce el hash f2e2b16d08dd04212215d36688058068. Para asegurarnos que ningun intruso haya alterado el archivo, podemos descargarlo y calcular el hash MD5 del archivo descargado, que debería coincidir con el previamente indicado.
En EsJS/JavaScript podemos utilizar la librería crypto-js para calcular hashes. En este caso, utilizaremos la función MD5.
- Enlace al archivo: https://desarrollo-aplicaciones.vercel.app/integridad/archivo1.txt
- Hash MD5:
f2e2b16d08dd04212215d36688058068
Disponibilidad
El objetivo de la disponibilidad consiste en garantizar que los datos permanecen accesibles sin interrupciones cuando y donde se los necesita. Esto implica que se implemente una serie de controles para mantener un nivel razonable de rendimiento, una gestión rápida y eficiente de las eventuales interrupciones, proporcionar redundancia en caso de fallos, mantener copias de seguridad en caso de fallos y evitar la pérdida o destrucción de los datos.
No Repudio
El objetivo del no repudio consiste en reunir, mantener, hacer disponible y validar una evidencia irrefutable en relación a un suceso o acción con el fin de resolver disputas acerca de la ocurrencia o no de dicho suceso o acción.
Existen dos tipos:
- No repudio de origen: Se utiliza para impedir la negación de un emisor de haber enviado los datos.
- No repudio de entrega: Se utiliza para impedir la negación de un destinatario de haber recibido los datos.
Por ejemplo, la firma digital es una tecnología que nos permite asegurar el origen de un documento o mensaje y verificar que su contenido no haya sido alterado, y actualmente posee la misma validez jurídica que un documento en papel firmado en puño y letra.
La firma digital utiliza la criptografía asimétrica, de manera que puede garantizar el No repudio de origen y el No repudio de entrega.
La criptografía asimétrica utiliza dos claves para una misma persona, una pública y una privada, utilizando métodos criptográficos para generarlas de manera que la combinación de ambas claves sólo puede ser generada una vez. Por lo tanto, es imposible que dos personas hayan obtenido casualmente el mismo par de claves.
Por ejemplo, para lograr la confidencialidad del mensaje:

- Ana redacta un mensaje.
- Ana cifra el mensaje utilizando la clave pública de David.
- Ana envía el mensaje.
- David recibe el mensaje y sólo el, con su clave privada, puede descifrarlo.
- David ya puede leer el mensaje original redactado por Ana.
También se puede utilizar la criptografía asimétrica para asegurar que un mensaje ha sido redactado por una determinada persona, por ejemplo:

- David redacta un mensaje.
- David firma digitalmente su mensaje con su clave privada.
- David envía el mensaje a Ana.
- Ana recibe el mensaje firmado digitalmente y comprueba su autenticidad utilizando la clave pública de David.
- Ana finalmente puede leer el mensaje sabiendo que David lo ha redactado.
Video explicativo sobre Firma Digital
En YouTube se encuentra un interesante video que explica brevemente cómo se utiliza la firma digital y que problemas puede resolver. Se recomienda su visita: https://www.youtube.com/watch?v=oYjx6J-Qbf8.
