|
41
|
Seguridad Informática / Criptografía / Re: GCM tablas M
|
en: 15 Mayo 2020, 08:55 am
|
Realmente lo que estás haciendo es díficil, ya que entender un proyecto entero, por fases y algoritmos lleva semanas, pues tienes que entender bien cada parte. No te fustres, sigue el camino. Las dudas estarían bien acumularlas y cuando no puedas avanzar más, estudiar y responder tus propias preguntas. Te puedo decir que hace un año me inicié en una rama de la crypto de la cual no tenía ni idea, y a día de hoy, me veo con un nivel fuertísimo y leyendo lo que los expertos suben sin problema. Si lo tienes por hobby y te gusta, en poco tiempo veras grandes resultados.
Tengo que hacer lo que me acabas de decir, una recopilacion de todos los problemas que veo, y de hay sacar una conclusion, ya que no he avanzado mucho desde mi anterior mensaje, he buscado mas informacion tampoco es que haya mucha... https://crypto.stackexchange.com/questions/57785/gcm-cipher-m0-tables-semantic-questions-on-how-to-implement-gcm?rq=1https://crypto.stackexchange.com/questions/67642/gcm-optimisation-using-m-0-and-r-tables-calculation-of-r?rq=1Ya veo que no soy el unico con problemas xD. Si, todo lo que ago es por hobby pero con un proposito, tengo mas cosas por hacer, cosas que ni siquiera he planteado, y ahora mismo lo que siento es una perdida de tiempo, ya que no puedo estar profundizando tanto en las cosas, cuando te topas con este tipo de problemas te das cuenta de que no sabes nada... En mi rutina utilizo Sage y Wolfram Mathematica. Traen métodos para reducir modulo f(x) y un sinfín más. Si no en C++ utilizo NTL que es una librería que es un All in 1. Trae lo básico de number theory y aritmética en GL(n,p), GL(n,p^e), GF(p), GF(p^n), creo que es incluso mejor utilizar éstas que rollear tus propios métodos aritméticos para la crypto.
Si, depende de como se mire estoy inventando la rueda de nuevo, seria mucho mas facil usar la libreria de openssl o cualquier otra, y hacer llamadas, pero no me gusta programar de esa forma me gusta crear mis propias funciones (no me gusta que mis programas solo haya call call call call xD), todos sabemos pasar parametros a funciones y llamarlas (no quiero ofender a nadie) a parte para el proposito que tengo es mejor asi. Ahora mismo tengo esta rutina para hacer las multiplicaciones: section .data _R: .quad 0x0000000000000000,0xe100000000000000 section .text globl _mulbl _mulbl: pushq %rax movdqa $-127, %rax ; rax == i pxor %xmm0, %xmm0 ; xmm0 == Z _C.0: andq $1, 127(%rax,%r10) ; %r10 == x jz _C.1 pxor (%r11), %xmm0 ; %r11 == V _C.1: movdqa (%r11), %xmm1 andq $1, 127(%r11) jz _C.2 psrldq $1, %xmm1 pxor _R, %xmm1 movdqa %xmm1, (%r11) jmp _C.3 _C.2: psrldq $1, %xmm1 movdqa %xmm1, (%r11) _C.3: incq %rax js _C.0 popq %rax retq
Bueno haciendo mis calculos a base de los del paper, sale mas o menos a unos 80-90 OPS por byte, sin tablas. En la pag 12 del documento sale la tabla, 119 OPS en la implementacion del paper. Si miramos la tabla, con el metodo Shoup’s, mejora notablemente el rendimiento, comparando mi funcion con el Shoup’s de 4-bit, hay mas o menos un 30% de rendimiento superior a la mia. Pero dudo que mi funcion cause overhead no? Lo dicho dicho, voy a leer un pelin mas. Saludos.
|
|
|
42
|
Seguridad Informática / Criptografía / Re: GCM tablas M
|
en: 11 Mayo 2020, 19:03 pm
|
Hola
El de metodos generales, me recuerdo que ya lo lei en su dia, por el tema de AES. Voy a leer con calma los dos restantes.
Creo que ya cada vez lo tengo mas claro, tambien me preocupa mucho el peso de 64K que tienen las tablas, y cada vez que quiera cambiar el codigo volver a calcular y el espacio en memoria, pero eso ya es otra historia.
He visto que se pueden hacer tablas de 4-bit, y ocuparia unos 8,192 bytes, y solo consumiria un pelin mas de recursos, pero el espacio baja mucho.
Pero ya tengo bastante lio de momento, gracias por el apoyo.
Saludos.
|
|
|
43
|
Seguridad Informática / Criptografía / GCM tablas M
|
en: 11 Mayo 2020, 03:23 am
|
Hola La duda que tengo esta en este paper, punto 4.1 Software: https://luca-giuzzi.unibs.it/corsi/Support/papers-cryptography/gcm-spec.pdfSegun lo que puedo entender la variable P es una representacion de un elemento primitivo en gf(2), el modulo f es la variable R. La x es un byte, tiene unas 256 conbinaciones, las tablas M son de 256 elementos. Mas o menos todo esto lo llevo bien, si vamos a la pag 9, en (3) se puede observar la variable P que es el polinomio α. En la pag 14 tenemos el algoritmo numero 3, con este podriamos computar las tablas M, los 65,535 bytes/key si no me equivoco. Doy por sentado de que con el algortimo 3, ya podria crear todas las tablas, cifrando la cadena de de 128 bits de 0s con el codigo. Pero no acabo de entender del todo la variable P del algritmo 3. Perdon si no se me entiende bien, estoy algo liado. Saludos.
|
|
|
48
|
Seguridad Informática / Criptografía / Re: Multiplicacion por bloques GCM
|
en: 3 Mayo 2020, 23:22 pm
|
Hola
Estado mirando el tema de la optimizacion, lo que tenia pensado no tiene mucho sentido ahora que lo pienso, por lo que he visto la mejor forma es haciendo tablas ya precomputadas, lo malo es el espacio que estas generan.
La informacion esta en el pdf gcm-spec.pfd apartado 4, lo he estado mirando voy a profundizarlo mejor, seguro que saldran preguntas.
Saludos.
|
|
|
49
|
Seguridad Informática / Criptografía / Re: Multiplicacion por bloques GCM
|
en: 30 Abril 2020, 00:38 am
|
Una diferencia notable es que en el primero utiliza el bit i-esimo del poly Y y en la segunda descripcion utiliza el i-esimo bit del poly X.
Si, de hay tambien me surgieron las dudas, de que el nist pudiera a ver modificado la funcion y demas. De hay me salio la confusion de la i tambien. Resumiendo, en la primera descripción se abstienen de utilizar esos subindices para cada iteracción en las tuplas/polinomios/bloques Z y V y prefieren dejarlo de una manera general. En la segunda, prefieren incluir dichos subíndices. Muchas veces se hace así (personalmente lo hago), para más tarde introducir elementos como el Z_i, Z_i+1, Z_j, Z_k y demás.
De esta forma, al lector le cuesta menos asociar, incluso a nosotros mismos.
Un saludo.
Vale, entonces como me temia solo era otro tipo de anotacion, ya decia yo, no es la primera vez que tengo problemas con sintaxis, desde mi punto de vista es mas comoda la primera, ya que no soy matematico, he visto formulas en otros sitios que ni entendia y verlas al programadas las he entendido a la primera. Entiendo que los desarolladores de dichos algoritmos sean criptografos y matematicos con mucha experiencia, pero estaria mejor adaptar algunas formulas, para que sean mas entendible a un publico mas "informatico" por asi decirlo. Pero bueno esos ya son lloriqueos A ver cuando me pongo manos a la obra, con esto, lo bonito va ser optimizar la funcion ya que es muy tediosa de la forma que esta anotada, creo que ya tengo alguna idea, haciendo mascaras de bits y grupos, como hice con el AES en su dia. Pero tengo que verlo. Con esto de la cuarentana me tiene desanimado . Gracias, saludos.
|
|
|
50
|
Seguridad Informática / Criptografía / Multiplicacion por bloques GCM
|
en: 29 Abril 2020, 21:56 pm
|
Hola, estado tiempo fuera haciendo otras cosas, y quiero retomar un viejo proyecto, y tengo unas dudas que pueden resultar hasta basicas, pero es lo que tiene abandonar las cosas y luego querer retomarlas. Voy al grano. Tengo una duda con la funcion de multiplicacion de GCM, mas bien con su sintaxis, aqui pongo una captura del pdf gcm. Es una funcion simple, la variable Z pasa a ser un bloque de 128 bits de ceros, la variable X obtiene el valo de la variable VA partir de hay empieza un for de 128 ciclos, depende del valor de los bit de V, en caso de ser 1, se hace un XOR entre las variables Z y V y el valor es reescrito a la variable Z. El ciclo sigue se comprueba el ultimo bit de la variable V, en caso de ser 0 se elimina un bit a la derecha y el valor es reescrito a la variable V, en caso de ser 1 se elimina un bit a la derecha y se hace un XOR al bloque V con la variable R, escrita mas arriba de la funcion lo siento no se puede observar en la captura, (( Se supone que el shift tiene preferencia sobre el XOR y se ejecuta antes, supongo.)) al finalizar se reescribe la variable V, se completaria el ciclo for y tendriamos el resultado final en la variable Z. Parece que lo entiendo todo bien, esta funcion la he sacado de este paper: https://luca-giuzzi.unibs.it/corsi/Support/papers-cryptography/gcm-spec.pdfBien el problema lo tengo cuando leo la misma funcion pero en el paper del NIST, aqui la captura: Bien aqui el problema que le veo es la sintaxis, no entiendo por que en las variables Z, V, tienen la variable i que esta hace de contador para los bits, se hace las operaciones a nivel de bits? En el paper de gcm se hacen a nivel de bloque, no se si me explico. A lo mejor es igual, solo que me esta liando la sintaxis., por otra parte sobre la duda del shift y el xor a la variable R, queda resuelta ya que se puede observar que tiene preferencia el shift. Bueno esa es mi duda, la maldita variable i, simplemente sintaxis? Aqui documento: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdfUn saludo. P.D: Las capturas me han quedado algo grandes y no he ajustado el tamaño, lo siento.
|
|
|
|
|
|
|