¿Implementar AES en Java?

Iniciado por Nasty35, 11 Julio 2014, 16:30 PM

0 Miembros y 1 Visitante están viendo este tema.

MinusFour

Cita de: engel lex en 11 Julio 2014, 23:11 PM
estoy seguro que eso no es... imprimo el binario y me da algo como esto

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://en.wikipedia.org/wiki/AES_s-box

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

cpu2

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.

http://www.samiam.org/s-box.html

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

Citarb(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.

MinusFour

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:


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?

cpu2

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.

Citarm(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.

MinusFour

Puedo resolver las multiplicaciones, restas y adiciones sin ningun problema. Lo que no puedo hacer es sacar la inversa del campo de galois.

cpu2

#16
Lo siento, como no dijiste nada pensaba que no sabias, bueno entonces sabras que el ejemplo que te copie del NIST, es este:

Citara(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.

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.

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:

Citara(x) • b(x) mod m(x)

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

MinusFour

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.