¿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
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/)
Cita de: Nasty35 en 11 Julio 2014, 16:30 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.
me imagino que pedía el codigo D: como dice que sin librerias nativas, asumí que era la implementacion en crudo
Cita de: 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
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.
Ya que estamos aqui... alguien sabe en que ae basanlos bits de inicializacipon de aes?
Cita de: engel lex en 11 Julio 2014, 21:32 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.
Cita de: cpu2 en 11 Julio 2014, 21:38 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++
static const unsigned char FSb[256] =
{
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
};
Es una multiplicacion inversa en campo GF2 ^ 8.
Esta es la matriz.
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.
Cita de: cpu2 en 11 Julio 2014, 21:56 PM
Es una multiplicacion inversa en campo GF2 ^ 8.
Esta es la matriz.
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
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
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://developer.amd.com/wordpress/media/2013/01/AES_Fig_2.jpg)
http://en.wikipedia.org/wiki/AES_s-box
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
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.
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?
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.
Puedo resolver las multiplicaciones, restas y adiciones sin ningun problema. Lo que no puedo hacer es sacar la inversa del campo de galois.
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.
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.