Autor
|
Tema: AES 128 bits Encrypt [ASM Bit slice] (Leído 5,143 veces)
|
xv0
Desconectado
Mensajes: 1.027
|
Hola Bueno al principio no tenia ganas de compartir el code, ya que es para un proyecto personal, pero como algunos usuarios querian verlo, y este sub-foro esta casi muerto aqui les traigo esta implmentacion, a ver si alguien la sabe apreciar. El code esta copiado directamente de mi editor, funciona bien, pero no es ensamblar y funcionar tienes que modificar algunas cosas. Seria una ronda de cifrado, si quieres las 8 serian hacer loops, y las 2 ultimas que son con SubBytes, Shifrows y AddRounkey pues modificar algo. Tambien algunas funciones como AddRounkey y SubBytes no son bit slice, creo que asi ya estaban bien. Bueno si alguien lo copia espero que se respete el primer autor, yo. [code=asm].section .data sbx_: .quad 0xc56f6bf27b777c63,0x76abd7fe2b670130 .quad 0xf04759fa7dc982ca,0xc072a49cafa2d4ad .quad 0xccf73f362693fdb7,0x1531d871f1e5a534 .quad 0x9a059618c323c704,0x75b227ebe2801207 .quad 0xa05a6e1b1a2c8309,0x842fe329b3d63b52 .quad 0x5bb1fc20ed00d153,0xcf584c4a39becb6a .quad 0x85334d43fbaaefd0,0xa89f3c507f02f945 .quad 0xf5389d928f40a351,0xd2f3ff1021dab6bc .quad 0x1744975fec130ccd,0x73195d643d7ea7c4 .quad 0x88902a22dc4f8160,0xdb0b5ede14b8ee46 .quad 0x5c2406490a3a32e0,0x79e4959162acd3c2 .quad 0xa94ed58d6d37c8e7,0x08ae7a65eaf4566c .quad 0xc6b4a61c2e2578ba,0x8a8bbd4b1f74dde8 .quad 0x0ef6034866b53e70,0x9e1dc186b9573561 .quad 0x948ed9691198f8e1,0xdf2855cee9871e9b .quad 0x6842e6bf0d89a18c,0x16bb54b00f2d9941 sq0_: .quad 0x000000ff000000ff,0x000000ff000000ff sq1_: .quad 0x0000ff000000ff00,0x0000ff000000ff00 sq2_: .quad 0x00ff000000ff0000,0x00ff000000ff0000 sq3_: .quad 0xff000000ff000000,0xff000000ff000000 bts_: .quad 0x8080808080808080,0x8080808080808080 dlb_: .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f xrb_: .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b rcn_: .quad 0x0000000200000001,0x0000000800000004 .quad 0x0000002000000010,0x0000008000000040 .quad 0x000000360000001b .section .text .globl _start _start: pushq %r11 pushq %r12 pushq %r13 pushq %r14 pushq %r15 pushq %r8 pushq %r9 pushq %rax ###movq $key_, %r11 ###movq $inp_, %r10 movq $rcn_, %r12 prefetch sbx_ prefetch sq0_ movq $-160, %r13 movdqu (%r11), %xmm0 movdqu %xmm0, -16(%rsp, %r13, 1) movl 12(%r11), %r11d movnti %r11d, (%rsp, %r13, 1) _KeyExpansion: rorl $8, (%rsp, %r13, 1) movzx (%rsp, %r13, 1), %r14 movzx 1(%rsp, %r13, 1), %r15 movzx 2(%rsp, %r13, 1), %r8 movzx 3(%rsp, %r13, 1), %r9 movzx sbx_(, %r14, 1), %r14 movzx sbx_(, %r15, 1), %r15 movzx sbx_(, %r8, 1), %r8 movzx sbx_(, %r9, 1), %r9 movnti %r14d, (%rsp, %r13, 1) movnti %r15d, 1(%rsp, %r13, 1) movnti %r8d, 2(%rsp, %r13, 1) movnti %r9d, 3(%rsp, %r13, 1) movl (%rsp, %r13, 1), %eax xorl (%r12), %eax addq $4, %r12 xorl -16(%rsp, %r13, 1), %eax movnti %eax, (%rsp, %r13, 1) xorl -12(%rsp, %r13, 1), %eax movnti %eax, 4(%rsp, %r13, 1) xorl -8(%rsp, %r13, 1), %eax movnti %eax, 8(%rsp, %r13, 1) xorl -4(%rsp, %r13, 1), %eax movnti %eax, 12(%rsp, %r13, 1) movnti %eax, 16(%rsp, %r13, 1) addq $16, %r13 jnz _KeyExpansion _Cipher: movdqu (%r10), %xmm0 pxor -176(%rsp), %xmm0 movdqu %xmm0, -208(%rsp) movq $-16, %r13 _SubBytes: movzx -192(%rsp, %r13, 1), %r14 movzx -191(%rsp, %r13, 1), %r15 movzx -190(%rsp, %r13, 1), %r8 movzx -189(%rsp, %r13, 1), %r9 movzx sbx_(, %r14, 1), %r14 movzx sbx_(, %r15, 1), %r15 movzx sbx_(, %r8, 1), %r8 movzx sbx_(, %r9, 1), %r9 movnti %r14d, -224(%rsp, %r13, 1) movnti %r15d, -223(%rsp, %r13, 1) movnti %r8d, -222(%rsp, %r13, 1) movnti %r9d, -221(%rsp, %r13, 1) addq $4, %r13 jnz _SubBytes _Shiftows: movdqu -240(%rsp), %xmm0 pshufd $0x39, %xmm0, %xmm1 pshufd $0x4e, %xmm0, %xmm2 pshufd $0x93, %xmm0, %xmm3 pand sq1_, %xmm1 pand sq2_, %xmm2 pand sq3_, %xmm3 pand sq0_, %xmm0 pxor %xmm1, %xmm0 pxor %xmm2, %xmm0 pxor %xmm3, %xmm0 _Mixcolumns: movdqa %xmm0, %xmm1 movdqa %xmm1, %xmm2 movdqa %xmm2, %xmm3 movdqa %xmm3, %xmm4 pand bts_, %xmm0 pcmpeqb bts_, %xmm0 movdqa %xmm0, %xmm5 pand %xmm0, %xmm1 pandn %xmm2, %xmm0 pand dlb_, %xmm1 pslld $1, %xmm0 pslld $1, %xmm1 pxor xrb_, %xmm1 pand %xmm5, %xmm1 pxor %xmm1, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm6 psrld $8, %xmm2 pxor %xmm2, %xmm0 pslld $8, %xmm3 pxor %xmm3, %xmm0 pslld $8, %xmm3 pxor %xmm3, %xmm0 psrld $16, %xmm4 pxor %xmm4, %xmm0 psrld $8, %xmm4 pxor %xmm4, %xmm0 pslld $24, %xmm6 pxor %xmm6, %xmm0 _AddRoundkey: pxor -160(%rsp), %xmm0
[/code] Cualquier pregunta ya saben. Un saludo. P.D: La instruccion prefetch no se si esta bien puesta, la intencion es copiar las tablas "lookup table" en la cache L1 para asi minimizar las frecuencias, ya que SubBytes utiliza mucho las tablas. P.D.2: Si alguien entendido en el tema lee esto, me gustaria ver su critica. Edito:Corregido el error de Subbytes y el de Shiftrows.
|
|
« Última modificación: 19 Mayo 2014, 22:36 pm por cpu2 »
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Lo publicaste nomas! Te pasaste! Yo no entiendo la mayoría de esas instrucciones, y lo que vi del cifrado AES es poco, así que te imaginas que no entiendo nada de lo que veo ahí.. Pero te felicito nuevamente! Se que a veces no es fácil desprenderse de un code.. esperemos se respete el autor.
Pregunta.. cual seria el punto de entrada ahí? Como le indicarías que cifrar?
Saludos!! Felicidades!
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
El registro r10 seria el puntero a los datos a cifrar, r11 seria el puntero con el key.
Haria falta otro registro o puntero para determinar la longitud de r10, pero eso es muy simple de hacer.
Un saludo.
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Muy buen código a pesar de AT&T , gracias por compartir
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Aqui les dejo el code traducido a la sintaxis de intel, por el usuario @x64Core. El code es algo raro, ya que no tiene conversion de llamada ni nada por el estilo, no puede testearlo gracias a OpenBSD que siempre me da problemas con algunos offset's, pero tendria que funcionar. Lo que hacia para comprobar la salida es traceando el kernel. .data sbx_: dq 0c56f6bf27b777c63h,076abd7fe2b670130h dq 0f04759fa7dc982cah,0c072a49cafa2d4adh dq 0ccf73f362693fdb7h,01531d871f1e5a534h dq 09a059618c323c704h,075b227ebe2801207h dq 0a05a6e1b1a2c8309h,0842fe329b3d63b52h dq 05bb1fc20ed00d153h,0cf584c4a39becb6ah dq 085334d43fbaaefd0h,0a89f3c507f02f945h dq 0f5389d928f40a351h,0d2f3ff1021dab6bch dq 01744975fec130ccdh,073195d643d7ea7c4h dq 088902a22dc4f8160h,0db0b5ede14b8ee46h dq 05c2406490a3a32e0h,079e4959162acd3c2h dq 0a94ed58d6d37c8e7h,008ae7a65eaf4566ch dq 0c6b4a61c2e2578bah,08a8bbd4b1f74dde8h dq 00ef6034866b53e70h,09e1dc186b9573561h dq 0948ed9691198f8e1h,0df2855cee9871e9bh dq 06842e6bf0d89a18ch,016bb54b00f2d9941h sq0_: dq 0000000ff000000ffh,0000000ff000000ffh sq1_: dq 00000ff000000ff00h,00000ff000000ff00h sq2_: dq 000ff000000ff0000h,000ff000000ff0000h sq3_: dq 0ff000000ff000000h,0ff000000ff000000h bts_: dq 08080808080808080h,08080808080808080h dlb_: dq 07f7f7f7f7f7f7f7fh,07f7f7f7f7f7f7f7fh xrb_: dq 01b1b1b1b1b1b1b1bh,01b1b1b1b1b1b1b1bh rcn_: dq 01b1b1b1b1b1b1b1bh,01b1b1b1b1b1b1b1bh dq 00000002000000010h,00000008000000040h dq 0000000360000001bh ptr_: dq 00706050403020100h,00f0e0d0c0b0a0908h dq 07766554433221100h,0ffeeddccbbaa9988h .code _start: lea r11,ptr_ prefetch sbx_ prefetch [sbx_+40h] prefetch [sbx_+80h] prefetch [sbx_+0c0h] prefetch [sq0_] prefetch [sq0_+40h] prefetch [sq0_+80h] mov r13,0ffffffffffffff60h movdqu xmm0,xmmword [r11] movdqu xmmword[rsp+r13-10h],xmm0 mov r11d,dword [r11+0ch] movnti dword [rsp+r13],r11d lea r12,rcn_ lea r11,ptr_ _exk: ror dword [rsp+r13],08h movzx r14,byte [rsp+r13] movzx r15,byte [rsp+r13+1] movzx r8,byte [rsp+r13+2] movzx r9,byte [rsp+r13+3] movzx r14,byte [r14+sbx_] movzx r15,byte [r15+sbx_] movzx r8,byte [r8+sbx_] movzx r9,byte [r9+sbx_] movnti dword [rsp+r13],r14d movnti dword [rsp+r13+01h],r15d movnti dword [rsp+r13+02h],r8d movnti dword [rsp+r13+03h],r9d mov eax,[rsp+r13] xor eax,[r12] add r12,04h xor eax,[rsp+r13-10h] movnti dword [rsp+r13],eax xor eax,[rsp+r13-0ch] movnti dword [rsp+r13+04h],eax xor eax,[rsp+r13-08h] movnti dword [rsp+r13+08h],eax xor eax,[rsp+r13-04h] movnti dword [rsp+r13+0ch],eax movnti dword [rsp+r13+10h],eax add r13,10h jnz _exk _ak1: movdqu xmm0,dqword [r11+10h] pxor xmm0,dqword [rsp-0b0h] mov r11,0ffffffffffffff60h mov rbx,09h _x0: mov r13,0fffffffffffffff0h movdqu dqword [rsp-0d0h],xmm0 _sxm: movzx r14,byte [rsp+r13-0c0h] movzx r15,byte [rsp+r13-0bfh] movzx r8,byte [rsp+r13-0beh] movzx r9,byte [rsp+r13-0bdh] movzx r14,byte [r14+sbx_] movzx r15,byte [r15+sbx_] movzx r8,byte [r8+sbx_] movzx r9,byte [r9+sbx_] movnti dword [rsp+r13-0e0h],r14d movnti dword [rsp+r13-0dfh],r15d movnti dword [rsp+r13-0deh],r8d movnti dword [rsp+r13-0ddh],r9d add r13,04h jnz _sxm _shw: movdqu xmm0,dqword [rsp-0f0h] pshufd xmm1,dqword [rsp-0f0h],39h pshufd xmm2,dqword [rsp-0f0h],4eh pshufd xmm3,dqword [rsp-0f0h],93h pand xmm1,dqword [sq1_] pand xmm2,dqword [sq2_] pand xmm3,dqword [sq3_] pand xmm0,dqword [sq0_] pxor xmm0,xmm1 pxor xmm0,xmm2 pxor xmm0,xmm3 _mxm: movdqa xmm1,xmm0 movdqa xmm2,xmm1 movdqa xmm3,xmm2 movdqa xmm4,xmm3 pand xmm0,dqword [bts_] pcmpeqb xmm0,dqword [bts_] movdqa xmm5,xmm0 pand xmm1,xmm0 pandn xmm0,xmm2 pand xmm1,dqword [dlb_] pslld xmm0,01h pslld xmm1,01h pxor xmm1, dqword [xrb_] pand xmm1,xmm5 pxor xmm0,xmm1 pxor xmm2,xmm0 movdqa xmm6,xmm2 psrld xmm2,08h pxor xmm0,xmm2 pslld xmm3,08h pxor xmm0,xmm3 pslld xmm3,08h pxor xmm0,xmm3 psrld xmm4,10h pxor xmm0,xmm4 psrld xmm4,08h pxor xmm0,xmm4 pslld xmm6,18h pxor xmm0,xmm6 pxor xmm0,dqword [rsp+r11] _ark: add r11,10h dec rbx jnz _x0 movdqu dqword [rsp-0d0h],xmm0 mov r13,0fffffffffffffff0h _ltn: movzx r14,byte [rsp+r13-0c0h] movzx r15,byte [rsp+r13-0bfh] movzx r8,byte [rsp+r13-0beh] movzx r9,byte [rsp+r13-0bdh] movzx r14,byte [r14+sbx_] movzx r15,byte [r15+sbx_] movzx r8,byte [r8+sbx_] movzx r9,byte [r9+sbx_] movnti dword [rsp+r13-0e0h],r14d movnti dword [rsp+r13-0dfh],r15d movnti dword [rsp+r13-0deh],r8d movnti dword [rsp+r13-0ddh],r9d add r13,04h jnz _ltn movdqu xmm0,dqword [rsp-0f0h] pshufd xmm1,dqword [rsp-0f0h],39h pshufd xmm2,dqword [rsp-0f0h],4eh pshufd xmm3,dqword [rsp-0f0h],93h pand xmm1,dqword [sq1_] pand xmm2,dqword [sq2_] pand xmm3,dqword [sq3_] pand xmm0,dqword [sq0_] pxor xmm0,xmm1 pxor xmm0,xmm2 pxor xmm0,xmm3 pxor xmm0,dqword [rsp+r11] movdqu dqword [rsp-0f0h],xmm0
El resultado seria. 0x69c4e0d86a7bb0430d8cdb78070b4c55a Un saludo.
|
|
« Última modificación: 16 Junio 2014, 21:15 pm por cpu2 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Api Guide Encrypt/Decrypt problemas!!
Programación Visual Basic
|
Hole_System
|
4
|
4,020
|
27 Diciembre 2008, 01:38 am
por Hole_System
|
|
|
Xor des/encrypt python
Scripting
|
Runex
|
0
|
3,836
|
21 Mayo 2012, 15:27 pm
por Runex
|
|
|
Ayuda (Encrypt\Decrypt)
Criptografía
|
benyy
|
0
|
3,186
|
10 Marzo 2013, 12:31 pm
por benyy
|
|
|
TOR, END TO END ENCRYPT, SSL
Redes
|
beginner_
|
3
|
2,779
|
30 Abril 2013, 05:40 am
por engel lex
|
|
|
Cortar Cadena [slice]
Programación C/C++
|
bash
|
5
|
3,201
|
2 Octubre 2016, 17:32 pm
por bash
|
|