lunes, 24 de julio de 2023

RECOMENDACIONES PARA IMPLEMENTAR EL CRIPTOSISTEMA

¡IMPORTANTE!

Implementar un criptosistema de manera segura y efectiva requiere tener en cuenta diversas consideraciones y seguir buenas prácticas. Aquí te presento algunas observaciones y recomendaciones para implementar un criptosistema de manera adecuada:

1. Utilizar bibliotecas criptográficas confiables: En lugar de implementar tus propios algoritmos criptográficos, utiliza bibliotecas criptográficas bien establecidas y probadas, como las proporcionadas por el lenguaje de programación o marcos de desarrollo.

2. Usar tamaños de clave adecuados: Utiliza tamaños de clave lo suficientemente grandes para garantizar la seguridad. Para RSA, se recomienda usar tamaños de clave de 2048 bits o más. Para algoritmos simétricos, como AES, un tamaño de clave de 128 bits o más es adecuado.

3. Proteger adecuadamente las claves privadas: Las claves privadas son críticas para la seguridad del criptosistema. Asegúrate de almacenarlas en un lugar seguro, como un almacén de claves seguro o un módulo de seguridad de hardware (HSM).

4. Gestión segura de claves: Implementa un sistema seguro para la gestión de claves, que incluya la generación, almacenamiento, rotación y destrucción adecuada de las claves.

5. Uso de cifrado autenticado: Siempre que sea posible, utiliza modos de cifrado autenticados (por ejemplo, GCM o CCM) para garantizar la autenticidad e integridad de los datos cifrados.

6. Validación de entrada: Asegúrate de validar todas las entradas de datos de los usuarios y de los recursos externos para evitar ataques de inyección o manipulación de datos.

7. Protección contra ataques de tiempo: Asegúrate de que el tiempo que tarda el programa en realizar operaciones criptográficas no revele información sobre las claves o los datos cifrados.

8. Manejo seguro de errores: Controla adecuadamente las excepciones y errores para evitar fugas de información sensible o datos cifrados en los registros o mensajes de error.

9. Pruebas exhaustivas: Realiza pruebas de seguridad y pruebas de estrés para garantizar que el criptosistema funcione correctamente en diferentes situaciones y resistente a ataques.

10. Actualizaciones y revisión periódica: Mantén el criptosistema actualizado con las últimas versiones y parches de seguridad. También es recomendable someter el código a revisiones de seguridad periódicas para identificar posibles vulnerabilidades.

11. Documentación y buenas prácticas: Documenta el diseño e implementación del criptosistema y fomenta el uso de buenas prácticas de seguridad en todo el equipo de desarrollo.

CASO PRACTICO

      ALGORITMO RSA

Ejemplo básico de código en Java para implementar el algoritmo RSA utilizando la biblioteca de criptografía de Java (javax.crypto y java.security):

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;

public class RSAExample {

    public static void main(String[] args) throws Exception {
        // Mensaje original que queremos cifrar
        String mensajeOriginal = "Hola, este es un mensaje secreto";

        // Generar el par de claves pública y privada
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // Tamaño de clave de 2048 bits
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey clavePublica = keyPair.getPublic();
        PrivateKey clavePrivada = keyPair.getPrivate();

        // Cifrar el mensaje con la clave pública

        Cipher cifrador = Cipher.getInstance("RSA");
        cifrador.init(Cipher.ENCRYPT_MODE, clavePublica);
        byte[] mensajeCifrado = cifrador.doFinal(mensajeOriginal.getBytes());

        // Descifrar el mensaje con la clave privada

        cifrador.init(Cipher.DECRYPT_MODE, clavePrivada);
        byte[] mensajeDescifrado = cifrador.doFinal(mensajeCifrado);

        // Imprimir resultados
        System.out.println("Mensaje original: " + mensajeOriginal);
        System.out.println("Mensaje cifrado: " + new String(mensajeCifrado));
        System.out.println("Mensaje descifrado: " + new String(mensajeDescifrado));
    }
}

Este es solo un ejemplo básico y se deben considerar consideraciones adicionales en aplicaciones reales, como la gestión segura de claves, el manejo de excepciones y el almacenamiento seguro de claves privadas. También se debe de tener cuenta que para operaciones criptográficas más grandes o aplicaciones reales, se recomienda utilizar bibliotecas de criptografía más robustas y probadas en lugar de implementar algoritmos por tu cuenta.

Además, el tamaño de clave de 2048 bits utilizado en el ejemplo es suficiente para fines de demostración, pero para aplicaciones de producción, es recomendable utilizar tamaños de clave más grandes para una mayor seguridad.

Dónde usarlo: En este caso, el algoritmo RSA se utiliza en el cifrado de claves de sesión utilizadas para proteger las comunicaciones entre un cliente (navegador web) y un servidor web, generalmente a través del protocolo TLS/SSL.

Cómo usarlo:

  1. Generación de claves: El servidor web genera un par de claves matemáticamente relacionadas: una clave pública y una clave privada. La clave pública se guarda en el certificado SSL del servidor y se envía al navegador cuando se establece una conexión segura.


  2. Solicitud de conexión segura: Cuando un usuario intenta acceder a una página protegida, el servidor envía su certificado SSL, que contiene la clave pública del servidor.


  3. Cifrado de claves de sesión: El navegador del cliente (por ejemplo, Google Chrome) utiliza la clave pública del servidor para cifrar una clave de sesión única que se utilizará para cifrar y descifrar datos durante la conexión segura. Esta clave de sesión se envía de regreso al servidor.


  4. Descifrado en el servidor: El servidor web utiliza su clave privada para descifrar la clave de sesión enviada por el cliente.


  5. Comunicación segura: A partir de este punto, la conexión entre el cliente y el servidor se realiza utilizando una clave de sesión cifrada simétricamente, lo que garantiza la seguridad y confidencialidad de los datos transmitidos durante la sesión.


VENTAJAS, DESVENTAJAS Y DFERENCIAS CON EL CRIPTOSISTEMA SIMETRICO

 

Ventajas de los criptosistemas de clave pública:

  • Mayor seguridad: La clave privada se mantiene en secreto y no se comparte, lo que proporciona una mayor seguridad en comparación con los criptosistemas simétricos, donde una única clave se comparte entre emisor y receptor.
  • Facilita la distribución de claves: Con los criptosistemas de clave pública, la clave pública se puede compartir abiertamente, lo que simplifica la distribución de claves en sistemas grandes y permite una comunicación segura con múltiples participantes.
  • Firma digital y autenticación: Los criptosistemas de clave pública permiten la generación de firmas digitales para verificar la autenticidad de los mensajes y la identidad del remitente.
  • Capacidad para cifrar datos sin compartir clave: Cualquier persona puede cifrar datos utilizando la clave pública del receptor sin requerir una comunicación previa para compartir una clave secreta.

 

Desventajas de los criptosistemas de clave pública:

  • Mayor costo computacional: Los criptosistemas de clave pública suelen ser más lentos y requieren más recursos computacionales en comparación con los criptosistemas simétricos. Esto puede afectar el rendimiento en aplicaciones que manejan grandes volúmenes de datos.
  • Longitud de claves más larga: Las claves públicas y privadas tienden a ser más largas que las claves simétricas, lo que puede requerir más espacio de almacenamiento y aumentar la complejidad de manejar claves largas.
  • Vulnerabilidad a ataques cuánticos: Algunos algoritmos de clave pública, como RSA, pueden ser vulnerables a futuros avances en computación cuántica, que podrían afectar su seguridad.

Diferencias con el criptosistema simétrico:

  • Cantidad de claves: Los criptosistemas de clave pública utilizan un par de claves (pública y privada), mientras que los criptosistemas simétricos utilizan una sola clave compartida.
  • Comunicación segura sin compartir claves: Los criptosistemas de clave pública permiten a cualquier persona cifrar datos utilizando la clave pública del receptor, lo que facilita la comunicación segura sin necesidad de compartir una clave previamente.
  • Seguridad asimétrica: Los criptosistemas de clave pública son más seguros en términos de distribución de claves, ya que solo la clave pública se comparte abiertamente, mientras que la clave privada se mantiene en secreto.
  • Velocidad y rendimiento: Los criptosistemas simétricos tienden a ser más rápidos y eficientes en cuanto a recursos computacionales, lo que los hace más adecuados para aplicaciones que requieren un alto rendimiento.


COMO FUNCIONA LA CRIPTOGRAFIA ASIMETRICA

 ¿COMO FUNCIONA?


El funcionamiento de un criptosistema de clave pública se basa en la utilización de un par de claves matemáticamente relacionadas: una clave pública y una clave privada. Estas claves están vinculadas por propiedades matemáticas que permiten realizar operaciones criptográficas específicas.

El proceso de cifrado y descifrado en el criptosistema de clave pública funciona de la siguiente manera:

Cifrado: Cuando alguien quiere enviar un mensaje cifrado a otro usuario, utilizará la clave pública del destinatario para cifrar el mensaje. Una vez cifrado con la clave pública, el mensaje solo puede descifrarse con la clave privada correspondiente que posee el destinatario.
Descifrado: El destinatario del mensaje cifrado utiliza su clave privada para descifrar el contenido y recuperar el mensaje original.

Algoritmos representativos:

RSA (Rivest-Shamir-Adleman): Es uno de los algoritmos de criptografía asimétrica más utilizados. Se basa en la dificultad de factorizar grandes números enteros para derivar claves seguras. RSA se emplea para cifrar, descifrar y realizar firmas digitales.

El criptosistema RSA, llamado así en honor a los tres inves- tigadores que lo propusieron (Rivest et al., 1978), Ronald Rivest (1947-), Adi Shamir (1952-) y Leonard Adleman (1945-), es uno de los sistemas de cifrado asimétrico más uti- lizado en la actualidad y consta, como es habitual en la clave asimétrica, de tres procedimientos: generación de las claves, cifrado y descifrado (Durán et al., 2005; Fúster et al., 2012, cap. 7). 

Diffie-Hellman: Aunque no es un algoritmo de cifrado en sí mismo, es un protocolo que permite a dos partes establecer una clave compartida de forma segura a través de un canal inseguro.

Este protocolo recibe el nombre de sus auto- res, esto es, Protocolo de acuerdo (o intercambio) de clave de Diffie-Hellman o DHKA (D:ffie-Hellman Key Agreement). Debe tenerse en cuenta que este protocolo no es un cripto- sistema en sí mismo, puesto que no se lleva a cabo ningún tipo de cifrado de información; lo que permite es que, al final del mismo, ambas partes puedan utilizar la información que acaban compartiendo como si fuera una semilla que luego les permite acordar una clave.


ElGamal: Es otro algoritmo de cifrado basado en la dificultad de calcular logaritmos discretos en campos finitos. Se utiliza principalmente para cifrar datos.

El  criptosistema de ElGamal fue publicado por Taher ElGamal (1955-) (ElGamal, 1985) y, además de ser otro de los criptosistemas de clave asimétrica más extendidos, es el que ha dado lugar a los criptosistemas con mayor futuro, los basados en curvas elípticas, que veremos posteriormente.

DSA (Digital Signature Algorithm): Este algoritmo se utiliza exclusivamente para firmas digitales y es parte del conjunto de estándares de criptografía del gobierno de los Estados Unidos.

ECC (Elliptic Curve Cryptography): Es un algoritmo basado en propiedades matemáticas de las curvas elípticas. Aunque es más eficiente que RSA para la misma seguridad, también es menos vulnerable ante ataques cuánticos, lo que lo hace atractivo para aplicaciones futuras.

Estos algoritmos representativos forman la base de los criptosistemas de clave pública y se utilizan en diversas aplicaciones para garantizar la confidencialidad, autenticidad e integridad de la información en entornos seguros. Es importante destacar que, aunque estos algoritmos son ampliamente utilizados y considerados seguros, la criptografía es un campo en constante evolución, y se siguen investigando y desarrollando nuevos métodos y técnicas para abordar los desafíos emergentes de seguridad.


REFERENCIA

Hernández Encinas, L. (2016). La criptografía. Madrid, Spain: Editorial CSIC Consejo Superior de Investigaciones Científicas. Recuperado de https://elibro.net/es/ereader/uniminuto/41843?page=98.

Hernández Encinas, L. (2016). La criptografía. Madrid, Spain: Editorial CSIC Consejo Superior de Investigaciones Científicas. Recuperado de https://elibro.net/es/ereader/uniminuto/41843?page=95.

Hernández Encinas, L. (2016). La criptografía. Madrid, Spain: Editorial CSIC Consejo Superior de Investigaciones Científicas. Recuperado de https://elibro.net/es/ereader/uniminuto/41843?page=104.


domingo, 23 de julio de 2023

CRIPTOSISTEMA DE CLAVE PUBLICA

¿QUE ES UN CRIPTOSISTEMA DE CLAVE PUBLICA ?

Un criptosistema de clave pública, también conocido como criptografía asimétrica, es un sistema de cifrado que utiliza un par de claves matemáticamente relacionadas para llevar a cabo operaciones criptográficas. Estas claves se denominan clave pública y clave privada.

“La criptografía de clave pública no se basa tanto en operaciones lógicas como lo hacen los cifradores en flujo y en bloque, sino que lo hace en operaciones matemáticas que están relacionadas con determinados problemas, supuestamente difíciles de resolver."Hernández Encinas, L. (2016)

La clave pública se utiliza para cifrar datos y se puede compartir con cualquier persona que desee enviar información segura. Mientras que la clave privada se mantiene en secreto y solo el propietario de la clave la conoce. Esta clave privada se utiliza para descifrar los datos que han sido cifrados con la clave pública correspondiente.

La principal característica de los criptosistemas de clave pública es que la clave pública no puede utilizarse para deducir la clave privada, lo que brinda un alto nivel de seguridad. Además, cualquier persona puede cifrar datos utilizando la clave pública, pero solo el propietario de la clave privada puede descifrarlos.

Los criptosistemas de clave pública se utilizan ampliamente para proporcionar seguridad en las comunicaciones y proteger la integridad y privacidad de los datos en entornos como el comercio electrónico, la autenticación de usuarios, la firma digital y la encriptación de correos electrónicos. Ejemplos conocidos de criptosistemas de clave pública incluyen RSA (Rivest-Shamir-Adleman) y ECC (Elliptic Curve Cryptography).

Como conclusión podemos decir que este sistema es especialmente útil en aplicaciones como el intercambio seguro de información en línea, la autenticación, la firma digital y otros protocolos de seguridad. Además, proporciona una forma segura de comunicarse y compartir información sin necesidad de que las partes involucradas compartan una clave secreta previamente acordada, lo que simplifica la administración de claves y aumenta la seguridad en la transmisión de datos.


REFERENCIA

Hernández Encinas, L. (2016). La criptografía. Madrid, Spain: Editorial CSIC Consejo Superior de Investigaciones Científicas. Recuperado de https://elibro.net/es/ereader/uniminuto/41843?page=94.

RECOMENDACIONES PARA IMPLEMENTAR EL CRIPTOSISTEMA

¡IMPORTANTE! Implementar un criptosistema de manera segura y efectiva requiere tener en cuenta diversas consideraciones y seguir buenas prác...