Algoritmos de clave publica

                            



cuando hablamos de algoritmos de clave publica nos referimos a algoritmos que utilizan criptografía asimétrica, para su cifrado utilizan un par de claves: una clave publica y otra clave privada. Entré los algoritmos de clave publica mas conocidos se tienen:

1 RSA(Rivest-shamir-Adleman): es un algoritmos que se desarrollo en 1977  siendo uno de los algoritmos de clave publica mas antiguos y utilizado , esta basado en descomponer  grandes números en sus factores primos.

2 Curvas elípticas : este tipo de algoritmo esta fundamentado en operaciones matemáticas con curvas elípticas sobre campos finitos para generar claves y el respectivo cifrado. Se utilizan mucho en dispositivos móviles por su buena eficiencia y seguridad.

3 DSA(Digital Signature Algorithm): es un algoritmo utilizado en la firma digital, se base en logaritmo discreto, fue desarrollado por el gobierno de estados unidos y es ampliamente utilizando en la actualidad.

4 ELGAMAL: esta algoritmo también se encuentra basado en el problema de logaritmo discreto y es ampliamente utilizado en cifrado y firma digital  ya que proporciona confidencialidad y autenticación.

5 NTRUEncrypt : es un algoritmo de clave publica que se basa principalmente en en teoría de retículas  se puede usar también en el cifrado y en la firma digital y es considerado resistente a ataques cuánticos.



Ejemplo de algoritmo RSA para java.

public class main {
    
    public static void main(String[] args) throws Exception {
        
        
        //Definimos un texto a cifrar
        String str = "Este es el texto a cifrar";
        
        System.out.println("\nTexto a cifrar:");
        System.out.println(str);
        
        //Instanciamos la clase
        RSA rsa = new RSA();
        
        //Generamos un par de claves
        //Admite claves de 512, 1024, 2048 y 4096 bits
        rsa.genKeyPair(512);
        
        
        String file_private = "/tmp/rsa.pri";
        String file_public = "/tmp/rsa.pub";
        
        //Las guardamos asi podemos usarlas despues
        //a lo largo del tiempo
        rsa.saveToDiskPrivateKey("/tmp/rsa.pri");
        rsa.saveToDiskPublicKey("/tmp/rsa.pub");
        
        //Ciframos y e imprimimos, el texto cifrado
        //es devuelto en la variable secure
        String secure = rsa.Encrypt(str);
        
        System.out.println("\nCifrado:");
        System.out.println(secure);
        
                
        
        //A modo de ejemplo creamos otra clase rsa
        RSA rsa2 = new RSA();
        
        //A diferencia de la anterior aca no creamos
        //un nuevo par de claves, sino que cargamos
        //el juego de claves que habiamos guadado
        rsa2.openFromDiskPrivateKey("/tmp/rsa.pri");    
        rsa2.openFromDiskPublicKey("/tmp/rsa.pub");
        
        //Le pasamos el texto cifrado (secure) y nos 
        //es devuelto el texto ya descifrado (unsecure) 
        String unsecure = rsa2.Decrypt(secure);
        
        //Imprimimos
        System.out.println("\nDescifrado:");
        System.out.println(unsecure);   
        

        
    }
    
    

}
Bibliografia

·        Escobar Benet, M. (2015). Criptografía en clave pública y privada. RSA.

·        Velasquez Arando, R. (2010). Seguridad criptográfica hibrida de clave pública y privada aplicada a la mensajeria SMS (Doctoral dissertation).




Comentarios