Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: xv0 en 9 Diciembre 2013, 03:34 am



Título: Duda con MixColumns
Publicado por: xv0 en 9 Diciembre 2013, 03:34 am
Hola

La tengo casi lista, pero tengo un problema. Como sabran la funcion MixColumns se trata de unas multiplicaciones en GF 2(8) y una reduccion modular por 0x11b, en algunos casos se multiplica por 2 y en otros por 3, el 1 no hace falta claro, bien resulta que en algunos bytes cuando los multiplicas por 2 o por 3 es igual el que sea, se pasan de 0xff, lo que los convierte en un word, a esos si hay que hacerles una reduccion modular.

Ejemplo:

Código:
0xbf << 1 = 0x17e xor 0x11b = 0x65

Pero por ejemplo 0x56 no hace falta.

Código:
0x56 << 1 = 0xac 

Bien tengo el siguiente codigo, imaginaos que todo el registro esta lleno de 0xbf.

Código
  1. .section .data
  2.  
  3. sb:
  4. .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f
  5. rm:
  6. .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b
  7.  
  8. .section .text
  9. .globl _start
  10.  
  11. _start:
  12.  
  13. pand sb, %xmm0
  14. pslld $1, %xmm0
  15. pxor rm, %xmm0

Bien el and, es para evitar que se convierta en word, ocuparia el otro dword y no puede ser, se quedaria en 0x7e, no en 0x17e, y luego se multiplica por 2 y luego el xor es la reduccion modular, todo bien.

Bueno esta es la duda, si tengo un 0x56 y 0xbf en el registro barregados 0x56 no requiere ninguna reduccion modular pero 0xbf si, el resultado seria erroneo, como podria solucionar este problema, alguien me echa un cable?

Un saludo.