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
Publicar un comentario