Criptografía: Fundamentos, Técnicas y Aplicaciones en la Seguridad Informática

Criptografía: Fundamentos, Técnicas y Aplicaciones

La criptografía consiste en escribir con una clave secreta para proteger datos. Permite enviar mensajes en clave secreta a través de la red.

Cifrado

Cifrar: Proteger datos modificándolos usando una clave. Aplicaciones:

  • Identificación (identificar a una persona) y autenticación (validar el acceso al servidor).
  • Certificación: Esquema con el que agentes conocidos validan la identidad de agentes desconocidos.
  • Seguridad de las comunicaciones: Para establecer canales seguros para aplicaciones que operan en redes no seguras.
  • Comercio electrónico: Usar canales seguros y mecanismos de identificación asegura que las operaciones de los usuarios y empresas no se modificarán o espiarán.

Características de los Servicios de Seguridad

  • Confidencialidad: Asegurar que solo los usuarios autorizados puedan ver la comunicación y entender los mensajes.
  • Integridad: Asegurar que el mensaje no se modifique por terceros durante la comunicación.
  • Autenticación: Asegurar el origen, la autoría y propiedad de los datos.
  • No repudio: Asegurar que el emisor no pueda negar haber enviado el mensaje.

Estructura de un Sistema Secreto

Clave: Parámetro que especifica una transformación con la función de cifrado/descifrado.

Una función de cifrado se debe desarrollar en base a:

  • Confusión: Distribuir las propiedades de los elementos del mensaje en el texto cifrado.
  • Difusión: Usar algoritmos de cifrado para complicar el descifrado del mensaje.

Características que debería tener una función de cifrado:

  • Las claves deben ser simples y fáciles de crear.
  • La longitud del texto cifrado no debe ser mayor que la del texto descifrado.
  • Los errores de transmisión no deben provocar ambigüedad.
  • El análisis estadístico del texto cifrado debe ser costoso para que no sea rentable realizarlo.
  • Una vez conocida la clave de un sistema secreto, debe ser simple y se debe destruir la estructura del mensaje para complicar el análisis estadístico.

La seguridad depende del algoritmo de cifrado y de lo secreta que sea la clave. Si se pierde una clave o es fácil de adivinar, el sistema está en peligro. Hay que saber elegir una clave y establecer métodos para protegerla.

Tipos de Claves

  • Simétrica (modelo de clave privada): La clave de cifrado y descifrado son la misma.
  • Asimétrica (modelo de clave pública): La clave de cifrado y descifrado no son la misma y están relacionadas.

Programación de Cifrado

Java ofrece herramientas para controlar claves y mecanismos de cifrado. Elementos para el cifrado:

  • Interfaz Key: Representa claves para cifrar y descifrar. Se debe implementar en las clases que representen claves, y debe tener una forma codificada (representa la clave), el formato (cómo está codificada la clave) y un algoritmo (función de cifrado o descifrado).
  • Interfaz KeySpec: Representa claves con acceso a sus elementos, para distribuirlas. Implementa claves que se guardan sin acceso a sus elementos.
  • Interfaz Cipher: Los objetos de la clase Cipher representan funciones de cifrado o descifrado. Se crean definiendo el algoritmo a usar. Se pueden configurar para realizar operaciones de cifrado y descifrado, definiendo la clave necesaria.
  • Generadores de claves: Para crear claves nuevas.
  • Factorías de claves: Para obtener claves transparentes a partir de claves opacas y viceversa.

Modelo de Clave Privada

Emisor y receptor reciben y usan la misma clave.

Ventaja:

Ofrece buen rendimiento.

Desventajas:

  • Se deben usar claves diferentes para comunicarse con cada receptor.
  • Cuantos más mensajes se cifren con la clave, más expuesta estará a un análisis estadístico.

Algoritmos de Cifrado Simétrico

  • DES: Estándar para comunicaciones que cifra texto de longitud fija como texto cifrado de la misma longitud. Tiene una clave para modificar las transformaciones. Fases:
    • Permutación inicial para dar confusión y difusión al algoritmo.
    • Sustitución con cajas-S que comprimen, permutan y sustituyen los datos.
    • Permutación final inversa a la inicial.
  • AES (sustituye a DES): Estándar de cifrado rápido y fácil de implementar, que se desarrolló de forma pública, con un sistema de cifrado por bloques. Gestiona la longitud de claves y bloques variables.

Programación de Cifrado Simétrico

  • Clase KeyGenerator: Para generar claves simétricas.
  • Interfaz SecretKey: Representa claves simétricas opacas e implementa la interfaz Key.
  • Clase SecretKeySpec: Representa claves simétricas de forma transparente e implementa la interfaz KeySpec.
  • Clase SecretKeyFactory: Clase de factoría de claves basadas en la interfaz SecretKey.

Funciones Hash

Algoritmos que resumen un mensaje en una cantidad de datos fija y menor. Permite ofrecer pruebas de integridad de la transferencia de datos (MAC). Requisitos:

  • Cálculo rápido.
  • La clave debe ser difícil de adivinar.
  • El resumen debe tener una longitud fija.
  • La descripción de la función de descifrado debe ser pública.
  • Resistente a colisiones: No habrá solo un valor cifrado de un mensaje.
  • Función de un solo sentido: No se debe poder producir un documento con sentido que lleve al hash a partir de los valores cifrados.

Se usan para identificar archivos independientemente de su nombre o ubicación. Por eso se aplican a los datos y estos se guardan en la posición definida por la función, permitiendo aplicarlas otra vez a los datos y acceder a la posición indicada.

También permiten comprobar si un archivo se ha descargado correctamente de internet, con su función MD5 (resumen del archivo origen calculado por quien lo publicó).

Programación con la Función Hash

En Java se usa la clase MessageDigest. Para generar un hash:

  • Obtener una instancia de la clase MessageDigest.
  • Introducir los datos en la instancia.
  • Computar el resumen.

Modelo de Clave Pública

Se usa para evitar el problema de la distribución de claves entre emisor y receptor. Se basa en conocer las claves públicas de los usuarios. Hay dos claves diferentes:

  • Privada: Solo la sabe el usuario.
  • Pública: Publicada para todos.

Están relacionadas por una función de sentido único.

Debe ser difícil calcular una clave a partir de la otra.

Es un sistema asimétrico, ya que se usan claves diferentes para cifrar y descifrar:

  • Para enviar un mensaje, se busca la clave pública del receptor y se cifra con la clave.
  • Solo se puede desencriptar con la clave privada del receptor.

Algoritmo RSA

Algoritmo asimétrico de cifrado por bloques que usa:

  • Una clave pública, publicada para todos.
  • Una clave privada, solo la sabe el propietario.
  • La relación entre estas se basa en el producto de dos números grandes aleatorios.

Programación de Cifrado Asimétrico

  • Interfaz PublicKey: Implementa la interfaz Key y permite representar claves públicas.
  • Interfaz PrivateKey: Implementa la interfaz Key y permite representar claves privadas.
  • Clase KeyPairGenerator: Permite generar pares de claves.
  • Clase KeyPair: Sus objetos permiten guardar pares de claves.
  • Clase KeyFactory: Factoría de claves.

Modelo Híbrido

Los sistemas de clave pública son más costosos que los de clave privada, por eso se unen:

  • Los mensajes se codifican con algoritmos simétrico y una clave simétrica (el emisor la crea aleatoriamente), para mejorar la velocidad al transmitir datos.
  • Se usan sistemas de clave pública para codificar y enviar la clave simétrica.
  • Los mensajes enviados y recibidos durante la sesión se cifran con la clave simétrica.

Firma Digital

Asocia la identidad del emisor al mensaje a enviar a la vez que se comprueba su integridad, aplicando una función hash y usando un sistema de clave pública para codificar y firmar el resumen obtenido al autenticar el mensaje.

Programación de Firma Digital

La biblioteca Java tiene la clase Signature para firmar digitalmente:

  • Se necesita un par de claves.
  • Permite verificar firmas digitales.
  • Se usa de forma parecida al cálculo de funciones hash.

Certificado Digital

Documento firmado digitalmente, que confirma la identidad, vinculando la clave pública. Permite:

  • Cifrar datos para que solo el receptor pueda acceder al contenido.
  • Firmar digitalmente.
  • A usuarios y servidores identificarse, autenticados por una autoridad de certificación.

Autoridades de Certificación

Entidad de confianza, que emite o anula certificados digitales en la criptografía de clave pública. Su firma asegura:

  • Que el certificado viene de la autoridad de certificación.
  • Que el nombre corresponde a quién dice ser.
  • La relación de obligación entre nombre y clave pública.

Servicios Seguros en Red

  • Si al acceder a una página la URL empieza por HTTPS, significa que se usa un protocolo de criptografía para acceder a su contenido de forma confidencial.
  • Son seguros, ya que usan un modelo de clave mixta (clave simétrica para establecer sesión y cifrado simétrico para las comunicaciones.
  • Estas comunicaciones usan protocolos SSL o TSL en Internet.

SSL y TLS

Ofrecen una interfaz de programación basada en sockets stream y añaden estos aspectos de seguridad:

  • Uso de criptografía asimétrica para intercambiar claves de sesión.
  • Uso de criptografía simétrica para asegurar la confidencialidad de la sesión.
  • Uso de códigos de autenticación de mensajes para asegurar la integridad.

Aseguran el establecimiento y mantenimiento de una sesión segura:

  • La identidad del servidor está asegurada (autenticación) con un certificado de servidor y el cifrado simétrico.
  • La privacidad de las comunicaciones está asegurada (confidencialidad) con una clave de sesión simétrica.
  • Los mensajes no se pueden alterar (integridad), ya que se realiza un cálculo de resumen.

Programación con Sockets Seguros

  • SSLSocketFactory: Clase que genera objetos SSLSocket.
  • SSLServerSocketFactory: Clase que genera objetos SSLServerSocket.
  • SSLSocket: Clase parecida a Socket, pero con SSL. Permite representar sockets stream cliente seguros.
  • SSLServerSocket: Clase parecida a ServerSocket, pero con SSL. Permite representar sockets stream servidor seguros.

Se debe asegurar la seguridad de los recursos externos a los que accede una aplicación.

Control de Acceso

Conjunto de mecanismos que gestionan estos aspectos de seguridad. Se basa en la autenticación de usuarios y sus políticas de seguridad. Es responsabilidad del SO. Aspectos que se gestionan con el control de acceso:

  • Operaciones sobre archivos y directorios.
  • Acceso a dispositivos hardware.
  • Operaciones de administración del sistema (crear usuarios, instalar programa…).
  • Servicios del Sistema (comunicaciones en red, almacenamiento de datos…).

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.