Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: Nasty35 en 11 Julio 2014, 16:30 pm



Título: ¿Implementar AES en Java?
Publicado por: Nasty35 en 11 Julio 2014, 16:30 pm
¿Me podrían pasar algún documento o algo donde esté el algoritmo de AES?
Me gustaría tenerlo en Java.
Me refiero al algoritmo, no a clases de Java nativas que te permite usar AES y muchos más cifrados...

Gracias


Título: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 11 Julio 2014, 20:51 pm
me costó conseguirlo! XD

pero aqui está (creo)

http://www.devkb.org/java/50-AES-256-bits-encrypter-decrypter-Java-source-code (http://www.devkb.org/java/50-AES-256-bits-encrypter-decrypter-Java-source-code)

http://n3vrax.wordpress.com/2011/08/14/aesrijndael-java-implementation/ (http://n3vrax.wordpress.com/2011/08/14/aesrijndael-java-implementation/)


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 11 Julio 2014, 21:13 pm
¿Me podrían pasar algún documento o algo donde esté el algoritmo de AES?

La explicacion del algoritmo, o la implementacion de este en Java?

Un saludo.


Título: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 11 Julio 2014, 21:15 pm
me imagino que pedía el codigo D: como dice que sin librerias nativas, asumí que era la implementacion en crudo


Título: Re: ¿Implementar AES en Java?
Publicado por: Nasty35 en 11 Julio 2014, 21:23 pm
me imagino que pedía el codigo D: como dice que sin librerias nativas, asumí que era la implementacion en crudo
Muchísimas gracias, era eso lo que pedía :D
Que chungo el código, en comparación con RC4, pero claro... AES es mucho mejor.


Título: Re: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 11 Julio 2014, 21:32 pm
Ya que estamos aqui... alguien sabe en que ae basanlos bits de inicializacipon de aes?


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 11 Julio 2014, 21:38 pm
Ya que estamos aqui... alguien sabe en que ae basanlos bits de inicializacipon de aes?

Dios, reformula la pregunta y puede que te ayude.

Un saludo.


Título: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 11 Julio 2014, 21:40 pm
Dios, reformula la pregunta y puede que te ayude.

Un saludo.

sorry! el cel algunas veces escribe terrible XD

mi pregunta era... alguien sabe en que se basan los bits de inicializacion de aes

por ejemplo en c++
Código
  1. static const unsigned char FSb[256] =
  2. {
  3.    0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
  4.    0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
  5.    0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
  6.    0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
  7.    0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
  8.    0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
  9.    0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
  10.    0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
  11.    0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
  12.    0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
  13.    0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
  14.    0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
  15.    0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
  16.    0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
  17.    0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
  18.    0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
  19.    0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
  20.    0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
  21.    0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
  22.    0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
  23.    0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
  24.    0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
  25.    0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
  26.    0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
  27.    0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
  28.    0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
  29.    0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
  30.    0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
  31.    0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
  32.    0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
  33.    0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
  34.    0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
  35. };


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 11 Julio 2014, 21:56 pm
Es una multiplicacion inversa en campo GF2 ^ 8.

Esta es la matriz.

Código:
1 0 0 0 1 1 1 1     
1 1 0 0 0 1 1 1   
1 1 1 0 0 0 1 1   
1 1 1 1 0 0 0 1   
1 1 1 1 1 0 0 0   
0 1 1 1 1 1 0 0   
0 0 1 1 1 1 1 0   
0 0 0 1 1 1 1 1

Cualquier duda ya sabes.

Un saludo.


Título: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 11 Julio 2014, 23:11 pm
Es una multiplicacion inversa en campo GF2 ^ 8.

Esta es la matriz.

Código:
1 0 0 0 1 1 1 1     
1 1 0 0 0 1 1 1   
1 1 1 0 0 0 1 1   
1 1 1 1 0 0 0 1   
1 1 1 1 1 0 0 0   
0 1 1 1 1 1 0 0   
0 0 1 1 1 1 1 0   
0 0 0 1 1 1 1 1

Cualquier duda ya sabes.

Un saludo.

estoy seguro que eso no es... imprimo el binario y me da algo como esto

Código:
0 1 1 0 0 0 1 1 //0x63
0 1 1 1 1 1 0 0 //0x7c
0 1 1 1 0 1 1 1 //0x77
1 1 1 1 0 0 1 0 //0x7b
0 1 1 0 1 0 1 1 //0xf2
0 1 1 0 1 1 1 1 //0x6b
1 1 0 0 0 1 0 1 //0x6f


Título: Re: ¿Implementar AES en Java?
Publicado por: MinusFour en 12 Julio 2014, 01:15 am
estoy seguro que eso no es... imprimo el binario y me da algo como esto

Código:
0 1 1 0 0 0 1 1 //0x63
0 1 1 1 1 1 0 0 //0x7c
0 1 1 1 0 1 1 1 //0x77
1 1 1 1 0 0 1 0 //0x7b
0 1 1 0 1 0 1 1 //0xf2
0 1 1 0 1 1 1 1 //0x6b
1 1 0 0 0 1 0 1 //0x6f


quiso decir que de ahí se construye.

Lo que tienes ahí es el resultado, la caja de substitución de AES:

(http://developer.amd.com/wordpress/media/2013/01/AES_Fig_2.jpg)

http://en.wikipedia.org/wiki/AES_s-box


Título: Re: ¿Implementar AES en Java?
Publicado por: engel lex en 12 Julio 2014, 01:47 am
lo leeré luego sinceramente no lo entendí y hoy fue un dia terrible en el trabajo! gracias de todas formas por el link de la wiki


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 12 Julio 2014, 01:51 am
Como dijo el usuario @MinusFour, no me refiero a eso, tu preguntaste en que se basan los bits de inicio, esos son.

Cuando yo implemente el algotirmo en ASM me ayude de la documentacion del NIST, pero para la SBOX esta explicacion esta perfecta, te la paso porque es mejor que mis explicaciones de lejos.

Código:
http://www.samiam.org/s-box.html

Si no entiendes algo avisa, mejor ese link que no la formula del documento del NIST.

Citar
b(x)a(x) + m(x)c(x) = 1

Un saludo.

P.D: Mi algoritmo lo tienes mas abajo, solo es el encrypt, pero te dejara peor xD.


Título: Re: ¿Implementar AES en Java?
Publicado por: MinusFour en 12 Julio 2014, 03:55 am
La página está bien para sacar un algoritmo rápido sin preocuparte por las matemáticas que a mi parece interesante...

Nunca tuve una clase de algebra abstracta para los campos galois y nunca vi matrices de transformación pero creo que hasta ahorita les llevo entendido

Lo que no entiendo es como sacan el inverso del GF(2^8), en el documento del nist sacan esa formula de:

Código:
b(x)a(x) + m(x)c(x) = 1

¿Como despejas esa formula? ¿y que demonios es C(x)?

Tambien me imagino que la multiplicación de las matrices la hacen usando la multiplicación y suma tipo GF(2) no?


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 12 Julio 2014, 16:56 pm
Si, las formulas lo complican todo, si las multiplicaciones se hacen con GF(2).

Pero te recomendaria que si quieres entender todo esto, empieces por la basica.

Citar
m(x) = x^8 + x^4 + x ^3+ x +1

For example, {57} • {83} = {c1}, because

(x^6 + x^4 + x^2 + x +1) (x^7 + x +1) = x^13 + x^11 + x^9 + x^8 + x^7 +

x^7 + x^5 + x^3 + x^2 + x +

x^6 + x^4 + x^2 + x +1

= x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 +1  mod (x^8 + x^4 + x^3 + x +1) == m(x) = x^7 + x^6 +1

No hace falta que te diga cual es el a(x) y b(x), cuando sepas mas o menos de que va todo esto te recomiendo que empiezes por la inversa.

Puedes hacer las multiplicaciones con galois separando bits y con xors, si es como lo hice.

Un saludo.


Título: Re: ¿Implementar AES en Java?
Publicado por: MinusFour en 12 Julio 2014, 18:19 pm
Puedo resolver las multiplicaciones, restas y adiciones sin ningun problema. Lo que no puedo hacer es sacar la inversa del campo de galois.


Título: Re: ¿Implementar AES en Java?
Publicado por: xv0 en 12 Julio 2014, 19:18 pm
Lo siento, como no dijiste nada pensaba que no sabias, bueno entonces sabras que el ejemplo que te copie del NIST, es este:

Citar
a(x) • b(x) mod m(x)

Si es cierto de que la inversa es algo mas complicada o mas "liosa", este fue una de las explicaciones que me ayudaron, como dije anteriormente mejor que mis explicaciones.

Código:
http://mathforum.org/library/drmath/view/51675.html

Te recuerdo de que tambien te explican las inversa utilizando las tablas, en el link que le pase a @engel lex.

Código:
http://www.samiam.org/galois.html#inverse

Cualquier duda ya sabes.

Un saludo.

P.D: Quieres hacer una implementacion de AES? O solo quieres saber y nada mas?

Porque si solo quieres hacer una implementacion de AES sabiendo la formula:

Citar
a(x) • b(x) mod m(x)

Ya tienes suficiente para comprender MixColumns y InvMixcolumns, que son las funciones que mas problemas suelen dar.


Título: Re: ¿Implementar AES en Java?
Publicado por: MinusFour en 12 Julio 2014, 20:58 pm
No estoy buscando hacer una implementación de AES solo quiero entender las matemáticas detrás. Y creo que entiendo todo menos la inversa del campo galois.

Le entendí bien al documento justo hasta que llego a la inversa... entonces puso esto:
Citar
r(x)*a(x) + s(x)*f(x) = 1

Then reduce this equation modulo f(x):

     r(x)*a(x) = 1 (mod f(x))

a(x) will be the multiplicative inverse of r(x).

Example: Inverse of x^4 + 1.

     x^8 + x^6 + x^5 + x + 1 = (x^4+x^2+x+1)*(x^4+1) + (x^2)
     x^4 + 1 = (x^2)*(x^2) + 1

and, working backwards,

     1 = 1*(x^4+1) + (x^2)*(x^2)
       = 1*(x^4+1) + (x^2)*([x^4+x^2+x+1]*[x^4+1]+[x^8+x^6+x^5+x+1])
       = (x^6+x^4+x^3+x^2+1)*(x^4+1) + (x^2)*(x^8+x^6+x^5+x+1)

so, reducing modulo f(x),

     1 = (x^6+x^4+x^3+x^2+1)*(x^4+1) (mod f(x))

Thus the multiplicative inverse sought is x^6 + x^4 + x^3 + x^2 + 1.

Y ahí me perdi completamente.

Entiendo como funciona MixColumns, no le he dado un vistazo a la inversa pero me imagino que debe ser similar.