Encriptar
Introducción
Nos interesa la seguridad de los datos de un sistema informático. Es un problema amplio, difícil y con múltiples aspectos. Aquí, estudiamos y ponemos en práctica de una manera simplificada algunos de estos aspectos.
La segunda sección estudia cómo asegurar la integridad de los datos. Se trata de verificar que los datos implementados no han experimentado modificaciones. La sección siguiente aborda las técnicas que aseguran la confidencialidad de los datos. También queremos permitir el acceso a los datos para un número restringido de entidades usuarias bien definidas. Luego, deberíamos interesarnos por los métodos para identificar, autenticar y autorizar a las entidades que acceden a los datos, pero este libro no trata estos aspectos del problema.
Integridad
1. Presentación
Los datos que nos interesan «contienen» una cierta «información». Cualquier perturbación de los datos modificará esta información.
Las perturbaciones pueden ser de distinta naturaleza. Así, por ejemplo, en el momento de escribir o leer hacia o desde un disco, el entorno electromagnético del sistema puede modificar los datos de una manera imprevisible durante su transferencia. Igualmente, durante un intercambio de datos a través de una red, un usuario puede interceptar y modificar los mensajes de una manera ilegítima o inesperada. Una aplicación puede corromper los datos con los que trabaja, como consecuencia de un incidente de funcionamiento, por ejemplo.
Los métodos habituales que nos interesan en esta sección permiten asegurarse de que los datos conservan «la información que contienen». Así, queremos convencernos de que los datos no han sufrido modificaciones. Entonces se trata de garantizar la integridad de los datos utilizados. El principio general de este tipo de método se ilustra mediante la figura siguiente.
Un algoritmo calcula un condensado o huella (hash) del mensaje. Sea cual sea el tamaño del mensaje, el condensado tendrá una longitud fija, por ejemplo, de 32 bytes (256 bits). Así, toda la información contenida dentro del mensaje estará comprimida, «condensada» en 32 bytes.
Para asegurarnos de que los datos no han sufrido perturbaciones, se recalcula, con el mismo algoritmo, el condensado del mensaje que se ha de verificar y se compara con el condensado original. A continuación se detallan las operaciones:
-
recalcular el condensado nuevo;
-
comparar el condensado nuevo con el condensado original;
-
si son distintos, los datos o el condensado original han sufrido modificaciones.
Este método se ilustra mediante la siguiente figura.
En esta figura, el condensado original es el condensado enviado por el emisor y recibido por su destinatario con el mensaje. El condensado nuevo es la huella calculada por el receptor del mensaje. Aseguramos que el mensaje no ha sufrido modificaciones cuando el condensado nuevo calculado es idéntico al condensado recibido. Sin embargo, está claro que la cantidad de huellas distintas es finita, exactamente 2256 para una huella de 32 bytes, mientras que la cantidad de mensajes...
Confidencialidad
Esta vez, buscamos garantizar que las únicas entidades que podrán conocer datos son las programadas. El principio consiste en ocultar los datos para que ya no sean comprensibles por otra entidad distinta de la entidad destinataria. Entonces hablamos de encriptado de los datos.
1. Principios matemáticos de la confidencialidad
Sean M el conjunto de los mensajes sin codificar, C el conjunto de los mensajes encriptados y K el conjunto de las claves de cifrado. La operación de cifrado es una función S de M x K en C:
El descifrado es una función D de C x K en M :
Las claves de cifrado/descifrado son ks y kd, respectivamente. Las dos funciones verifican: Dkd(Sks(m)) = m. Esta fórmula expresa que el cifrado es reversible. Estas operaciones se pueden representar como en el dibujo de la figura que aparece a continuación.
Los algoritmos de cifrado usan distintas relaciones recíprocas entre ks y kd.
2. Criptografía con clave secreta
Cuando existe un medio sencillo de obtener kd a partir de ks, se habla de cifrado simétrico o también de cifrado con clave secreta. En este caso, las dos extremidades comparten un secreto común. Este puede ser, por ejemplo, el mismo valor de clave k = ks = kd. Entonces, toda entidad que conoce k puede descifrar el mensaje c para obtener el mensaje m.
En teoría, sabemos garantizar una confidencialidad perfecta con este tipo de encriptado, donde las entidades que se comunican comparten un secreto común. Sin embargo, esta confidencialidad perfecta solo se obtiene pagando el precio de condiciones previas irrealizables. El algoritmo de Vernam es especialmente sencillo y garantiza el secreto perfecto des los intercambios en estas condiciones. Vamos a verlo.
Conclusión
La seguridad de los datos debe garantizar su integridad, la confidencialidad de los intercambios y la identificación/autenticación de las entidades que realizan estos intercambios. Este capítulo ha expuesto algunas ideas sencillas para verificar la integridad o para garantizar la confidencialidad de los intercambios. Los principios se han presentado a partir de métodos elementales que no se pueden utilizar en la situación actual, pero que dan una idea precisa de la realidad. Sin embargo, el campo es mucho más amplio y difícil de lo que se puede apreciar en esta presentación, que tiene el único objetivo de proporcionar un contexto para estudiar algunos algoritmos.