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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: kub0x)
| | | |-+  GCM tablas M
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: GCM tablas M  (Leído 12,321 veces)
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: GCM tablas M
« Respuesta #10 en: 21 Julio 2021, 22:42 pm »

Hola

Cuanto tiempo ha pasado ya, disculpas por abandonar el tema pero he tenido que ocuparme de otras cosas.

Aqui dejo el codigo, lo he testeado a mano siguiendo el algoritmo del PDF del NIST el 1. Testeado con 1 byte.

Se que se puede mejorar, pero no he encontrado un TEST VECTOR para este algoritmo, como los que hay en el PDF de AES al final de todo.

He pensado en contruir todo el PAPER del NIST y luego retomar esto de las las tablas, no se o ire tirando.

Código
  1. .section .text
  2. .globl _start
  3. .align 16
  4.  
  5. _start:
  6.  
  7. pxor %xmm0, %xmm0                        # xmm0 | Z
  8. movdqu %xmm1, (%rsp)                     # rsp  | x
  9. movdqu %xmm1, -16(%rsp)                  # rsp  | V
  10.  
  11. _l02:
  12.  
  13. movq $-16, %rax                           # contador byte
  14.  
  15. _l01:
  16.  
  17. xorq %r8, %r8                          # contador bit
  18. movq $-8, %r9
  19.  
  20. _l0:
  21.  
  22. btq %r8, 16(%rsp, %rax)                 # compruebo el bit  de el primer byte
  23. jnc _l1                                  # si el bit es 0,  paso a LSB
  24.  
  25. movdqu -16(%rsp), %xmm3
  26. pxor %xmm3, %xmm0                        # si el bit es 1, Z xor V, paso a LSB
  27.  
  28. _l1:
  29.  
  30. btq $63, -8(%rsp)                        # compruebo el ultimo bit 127 LSB 1 (V)
  31. jc _l2
  32.  
  33. movq -8(%rsp), %rbx
  34. shlq $63, %rbx
  35. shrq $1, -8(%rsp)
  36. shrq $1, -16(%rsp)                       # LSB(V)=0
  37. orq %rbx, -16(%rsp)
  38.  
  39. jmp _l3
  40.  
  41. _l2:
  42.  
  43. movq -8(%rsp), %rbx
  44. shlq $63, %rbx
  45. shrq $1, -8(%rsp)                        #LSB(V)=1
  46. shrq $1, -16(%rsp)
  47. orq %rbx, -16(%rsp)
  48. xorq $0x00000000000000e1, -16(%rsp)
  49.  
  50. _l3:
  51.  
  52. incq %r8
  53. incq %r9
  54. js _l0
  55.  
  56. incq %rax
  57. js _l01

El codigo en realidad no es muy bueno, comparandolo con las tablas GCM, y ni hablar del paso de parametros. Y todas las operaciones las realizo en memoria.

Me gustaria encontrar un test vector de este algoritmo, si alguien sabe algo por favor que me lo diga, o que me confirme que el codigo opera bien.

Saludos.


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: GCM tablas M
« Respuesta #11 en: 7 Febrero 2022, 00:59 am »

Hola, cuanto tiempo ha pasado, deje de lado el problema por otros asuntos pero ya lo tengo resuelto, y de vez en cuando leo el foro y me acorde de este problema que publique. Y no me gusta dejar las cosas colgadas.

Bien, el ultimo codigo que comparti esta mal, interprete erroneamente el algoritmo y la multiplicacion de galois de GCM.

Lo que sucede es que GCM toma los bytes en little-endian y los bits en big-endian, hay estaba el problema a parte de algunas tonterias mas.

Por ejemplo el polinomio f = 1 + α + α2 + α7 = 0x87(10000111) pero en realidad es  0xe1 (11100001) ya que como dije anteriormente los bit son representados en big-endian.

Pues podemos aplicar todo eso al algoritmo de multiplicacion, que sucede que el bit menos significativo 0 es realidad es 127, si por ejemplo 0x80, se representa como 0x01. Aqui el codigo donde se puede ver todo lo que digo:

Código
  1. .section .data
  2.  
  3. R: .quad 0xb32b6656a05b40b6,0x952b2a56a5604ac0
  4. S: .quad 0xffcaff95f830f061,0xdfa6bf4ded81db03
  5.  
  6. .section .text
  7. .globl _start
  8. .align 16
  9.  
  10. _start:
  11.  
  12. pxor %xmm0, %xmm0                        # xmm0 | Z
  13. movdqu R, %xmm1
  14. movdqu S, %xmm2
  15. movdqu %xmm1, (%rsp)                     # rsp  | Y
  16. movdqu %xmm2, -16(%rsp)                  # rsp-16  | V
  17.  
  18. _l02:
  19.  
  20. movq $15, %rax                           # byte position
  21.  
  22. _l01:
  23.  
  24. movq $7, %r8
  25.  
  26. _l0:
  27.  
  28. btq %r8, (%rsp, %rax)                 # check the bit posotion 0 - 7
  29. jnc _l1                                 # bit equal to 0,  jump to _l1
  30.  
  31. movdqu -16(%rsp), %xmm3
  32. pxor %xmm3, %xmm0                        # bit equal to 1, Z xor V
  33.  
  34. _l1:
  35.  
  36. btq $0, -16(%rsp)                        # check V[127] equal to 1 V = rightshift(V) xor R
  37. jc _l2                                   # equal to 0, V = rightshift(V)
  38.  
  39.  
  40. movq -8(%rsp), %rbx
  41. shlq $63,%rbx
  42. shrq $1, -8(%rsp)
  43. shrq $1, -16(%rsp)                       #Rightshift V in memory
  44. orq %rbx, -16(%rsp)
  45.  
  46. jmp _l3
  47.  
  48. _l2:
  49.  
  50. movq -8(%rsp), %rbx
  51. shlq $63, %rbx
  52. shrq $1, -8(%rsp)
  53. shrq $1, -16(%rsp)                       #Rightshift V in memory and xored by R
  54. orq %rbx, -16(%rsp)
  55. xorb $0xe1, -1(%rsp)
  56.  
  57. _l3:
  58.  
  59. decq %r8                                   #next bit position
  60. jns _l0                                     #r9 equal to 0, jump to next byte
  61.  
  62. decq %rax                                  #byte addition, rax equal to 0, block finished
  63. jns _l01
  64.  
  65.  
  66. //RET Z IN XMM0

R Y S son los valores a multiplicar sacados de un Test vector. Bueno lo dejo aqui. Seguramente que tenga las tablas para algun dia... voy haciendo cuando puedo.

Saludos.

P.D:Cualquier pregunta ya saben.


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PHP, Tablas y CSS
PHP
jamarchi 6 4,838 Último mensaje 25 Julio 2007, 16:32 pm
por Azielito
Tablas en VB?
Programación Visual Basic
leucocito 1 2,025 Último mensaje 15 Abril 2009, 04:24 am
por seba123neo
Tablas en C...
Programación C/C++
soser 3 7,656 Último mensaje 25 Septiembre 2010, 02:31 am
por .:BlackCoder:.
Tablas y PHP
PHP
zepjau 7 6,716 Último mensaje 14 Diciembre 2011, 08:46 am
por Z31C0S
tablas de sql con php
Desarrollo Web
basickdagger 3 2,590 Último mensaje 14 Febrero 2013, 06:42 am
por basickdagger
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines