elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: kub0x)
| | | |-+  criptografia RSA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: criptografia RSA  (Leído 20,094 veces)
electronik_0

Desconectado Desconectado

Mensajes: 40


Ver Perfil
criptografia RSA
« en: 29 Diciembre 2009, 20:36 pm »

Dejo aqui un manual de criptografia que me ha ayudado mucho :P sobre el tema

MANUAL....

http://master.informatik.googlepages.com/criptografia.rar



El RSA es un sistema de encriptacion muy usado en los sistema informatico :xD: consisten en el cifrado de informacion atravez de llaves publicas y privada.

Para eso existe un canal de comunicacion en donde los 2 usuario sea A y B.

A: genera 2 clave 1 publica y 1 privada.
B: genera 2 clave 1 publica y 1 privada.

La funciones de encriptacion y desenciptacion en RSA funciona de la siguiente manera :D

1.Escoger dos grandes números primos, p y q (secretos), y calcular el numero n (publico) correspondiente a su producto,
                  n = p*q.

2. Se calcula fi: Φ (n)=(p-1)*(q-1)

3. Se calcula un número natural e de manera que MCD(e,fi(n))=1, es decir e debe ser primo relativo de fi(n).
Calcular el entero e (publico) tal que 1=<e<=Φ(n).

4.- Mediante el algoritmo extendido de Euclides se calcula d:
E*d mod fi(n)=1

También puede calcularse con:    d=((Y*fi(n))+1)/e Para todo Y=1,2,3,... hasta encontrar un d entero que satisfaga la ecuacion :D.

5.- El par de números (e,n) son la clave pública.

6.- El par de números (d,n) son la clave privada.


EJEMPLO Explicado...

1. Si alguien quiere mandar un mensaje m a algún usuario, entonces la clave pública n y e del receptor para generar el cifrado C.
                    C = m^e MOD n

           n y e = son las claves publicas :D

2. Entonces el mensaje C puede viajar sin problema por cualquier canal inseguro.

3. Cuando la información cifrada llega a su destino el receptor procede a descifrar el mensaje con la siguiente fórmula.

                        m = C^d MOD n

4. Se puede mostrar que estas formulas son inversas y por lo tanto dan el resultado deseado. m y e son públicos y se pueden considerar como la clave pública, la clave privada es la pareja (p y q) o equivalentemente el número d.


Ejemplo con numeros asi se entiende mas facil :D


Código
  1. Ejemplo
  2. 1.- p=3 y q=11.  //numeros primos
  3. 2.- n = 3 * 11 = 33.
  4. 3.- fi(n) = (3-1) * (11-1) = 20.
  5. 4.- Buscamos e=3, tal que MCD(e,fi(n))=1
  6. 5.- d = ((Y * fi(n)) + 1) / e = ( Y * 20 + 1) / 3 = 21 / 3 = 7
  7. 6.- e=3 y n=33 son la clave pública.
  8. 7.- d=7 y n=33 son la clave privada.
  9. Cifrado: Mensaje = 5,
  10. C = M^e mod n => 5^3 mod 33 = 26
  11. Descifrado: C = 26
  12. M = C^d mod n = 26^7 mod 33 => 8031810176 mod 33 = 5
  13.  
  14.  

Cualquier duda consulten :D

y agradescan igual ¬¬

xD






saludos aqui dejo un codigo en java que cifra y decifra con RSA :D


Aqui dejo un codigo en java para usar RSA :D, permite pasarle como parametro el tamaño de los numeros primero que se generan para cifrar :D

Main.java
Código
  1. import java.io.*;
  2. import java.math.BigInteger;
  3.  
  4. public class Main {
  5.  
  6. /**
  7. * @param argumentos de la linea de comandos
  8. */
  9. public static void main(String[] args) throws IOException {
  10. if(args.length != 1) {
  11. System.out.println("Sintaxis: java RSA [tamaño de los primos]");
  12. System.out.println("por ejemplo: java RSA 512");
  13. args = new String[1];
  14. args[0]="1024";
  15. }
  16. int tamPrimo = Integer.parseInt(args[0]);
  17. RSA rsa = new RSA(tamPrimo);
  18.  
  19. System.out.println("Texto a cifrar: ");
  20. String textoPlano = (new BufferedReader(new InputStreamReader(System.in))).readLine();
  21.  
  22. BigInteger[] textoCifrado = rsa.cifra(textoPlano);
  23.  
  24. System.out.println("\nTexto cifrado: [");
  25. for(int i=0; i<textoCifrado.length; i++) {
  26. System.out.print(textoCifrado[i].toString(16).toUpperCase());
  27. if(i != textoCifrado.length-1)
  28. System.out.println("");
  29. }
  30. System.out.println("]\n");
  31.  
  32. String recuperarTextoPlano = rsa.descifra(textoCifrado);
  33. System.out.println("Texto desencritado: ["+ recuperarTextoPlano +"]");
  34. }
  35.  
  36. }
  37.  

RSA.java
Código
  1. /*
  2.  * RSA.java
  3.  *
  4.  *
  5.  */
  6. import java.math.BigInteger;
  7. import java.util.*;
  8.  
  9. /**
  10.  *
  11.  * @author
  12.  */
  13. public class RSA {
  14.  
  15. int tamPrimo;
  16. BigInteger n, q, p;
  17. BigInteger totient;
  18. BigInteger e, d;
  19.  
  20. /** Constructor de la clase RSA */
  21. public RSA(int tamPrimo) {
  22. this.tamPrimo = tamPrimo;
  23. generaPrimos(); //Genera p y q
  24. generaClaves(); //Genera e y d
  25. }
  26.  
  27. public void generaPrimos()
  28. {
  29. p = new BigInteger(tamPrimo, 10, new Random());
  30. do q = new BigInteger(tamPrimo, 10, new Random());
  31. while(q.compareTo(p)==0);
  32. }
  33.  
  34. public void generaClaves()
  35. {
  36. // n = p * q
  37. n = p.multiply(q);
  38. // toltient = (p-1)*(q-1)
  39. totient = p.subtract(BigInteger.valueOf(1));
  40. totient = totient.multiply(q.subtract(BigInteger.valueOf(1)));
  41. // Elegimos un e coprimo de y menor que n
  42. do e = new BigInteger(2 * tamPrimo, new Random());
  43. while((e.compareTo(totient) != -1) || (e.gcd(totient).compareTo(BigInteger.valueOf(1)) != 0));
  44. // d = e^1 mod totient
  45. d = e.modInverse(totient);
  46. }
  47.  
  48. /**
  49. * cifra el texto usando la clave publica
  50. *
  51. * @param   mensaje Ristra que contiene el mensaje a cifrar
  52. * @return   El mensaje cifrado como un vector de BigIntegers
  53. */
  54. public BigInteger[] cifra(String mensaje)
  55. {
  56. int i;
  57. byte[] temp = new byte[1];
  58. byte[] digitos = mensaje.getBytes();
  59. BigInteger[] bigdigitos = new BigInteger[digitos.length];
  60.  
  61. for(i=0; i<bigdigitos.length;i++){
  62. temp[0] = digitos[i];
  63. bigdigitos[i] = new BigInteger(temp);
  64. }
  65.  
  66. BigInteger[] cifrado = new BigInteger[bigdigitos.length];
  67.  
  68. for(i=0; i<bigdigitos.length; i++)
  69. cifrado[i] = bigdigitos[i].modPow(e,n);
  70.  
  71. return(cifrado);
  72. }
  73.  
  74. /**
  75. * descifra el texto cifrado usando la clave privada
  76. *
  77. * @param   cifrado   Array de objetos BigInteger que contiene el texto cifrado que seraoct descifrado
  78. * @return  The decrypted plaintext
  79. */
  80. public String descifra(BigInteger[] cifrado) {
  81. BigInteger[] descifrado = new BigInteger[cifrado.length];
  82.  
  83. for(int i=0; i<descifrado.length; i++)
  84. descifrado[i] = cifrado[i].modPow(d,n);
  85.  
  86. char[] charArray = new char[descifrado.length];
  87.  
  88. for(int i=0; i<charArray.length; i++)
  89. charArray[i] = (char) (descifrado[i].intValue());
  90.  
  91. return(new String(charArray));
  92. }
  93.  
  94. public BigInteger damep() {return(p);}
  95. public BigInteger dameq() {return(q);}
  96. public BigInteger dametotient() {return(totient);}
  97. public BigInteger damen() {return(n);}
  98. public BigInteger damee() {return(e);}
  99. public BigInteger damed() {return(d);}
  100. }
  101.  

aqui las cap :D






En línea

APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: criptografia RSA
« Respuesta #1 en: 1 Enero 2010, 00:09 am »

Buena onda, gracias por eso, lo voy a ver. Ah una cosa "cifrar y descifrar" no está bien dicho. Se dice "cifrar y descifrar".


En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
cearje@hotmail.com

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: criptografia RSA
« Respuesta #2 en: 11 Enero 2012, 14:30 pm »

mira me han pedido esto no se si me puedes orientar donde encontrar esto
pruebas y valores de test que permitan verificar que una implementación concreta es correcta.

implementación óptima nos referimos a elegir algún aspecto como su velocidad, el tamaño del ejecutable, su portabilidad, el paralelismo interno, su optimización en ensamblador, etc., en la que el alumno mejora sustancialmente a las versiones de demostración o de definición que se pueden encontrar en Internet.
En cuanto al posible criptoanálisis, aquí se incluye lo que el alumno pueda proponer y probar, así como todas aquellas informaciones, artículos o herramientas que se encuentren en Internet y que permitan “romper” o debilitar del algún modo las características del algoritmo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Latices en Criptografia
Programación C/C++
delirio 0 2,863 Último mensaje 27 Junio 2011, 04:26 am
por delirio
criptografia orden
WarZone
Yonquimanuel 5 4,008 Último mensaje 4 Noviembre 2012, 17:17 pm
por Galahad_125
Desactivar criptografía
Seguridad
asbu 0 1,727 Último mensaje 16 Marzo 2014, 16:28 pm
por asbu
Criptografia
Criptografía
GREEDY 8 6,905 Último mensaje 5 Septiembre 2016, 18:07 pm
por kub0x
Criptografia DEDede/CBC/PKCS5Padding
Java
cholin89 1 2,124 Último mensaje 8 Septiembre 2016, 14:02 pm
por cholin89
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines