AES - Unicamp

Transcrição

AES - Unicamp
O Cifrador AES
Instituto de Computação - UNICAMP
Julio López
Disciplina MC889
O Algoritmo AES
Julio López
Disciplina MC889
O Algoritmo AES
Advanced Encryption Standard (FIPS PUB 197)
Julio López
Disciplina MC889
O Algoritmo AES
Advanced Encryption Standard (FIPS PUB 197)
Cifrador de blocos
Julio López
Disciplina MC889
O Algoritmo AES
Advanced Encryption Standard (FIPS PUB 197)
Cifrador de blocos
Tamanho dos blocos : 128 bits
Julio López
Disciplina MC889
O Algoritmo AES
Advanced Encryption Standard (FIPS PUB 197)
Cifrador de blocos
Tamanho dos blocos : 128 bits
Tamanho das chaves criptográficas: 128/ 192/ 256 bits
Julio López
Disciplina MC889
O Algoritmo AES
Advanced Encryption Standard (FIPS PUB 197)
Cifrador de blocos
Tamanho dos blocos : 128 bits
Tamanho das chaves criptográficas: 128/ 192/ 256 bits
Número de etapas: 10/ 12/ 14
Rijndael (Vicent Rijmen e Joan Daemen), 1998.
http://www.conxx.net/rijndael anim conxx.html
Julio López
Disciplina MC889
Um Byte!
10000100101010100010 1001 1011 0001010111000011
Julio López
Disciplina MC889
Aritmética de Bytes
Um byte: (b7 b6 b5 b4 b3 b2 b1 b0 ), bi ∈ {0, 1}
(00001111), (1010 0011), (1100 0001), etc.
Julio López
Disciplina MC889
Aritmética de Bytes
Um byte: (b7 b6 b5 b4 b3 b2 b1 b0 ), bi ∈ {0, 1}
(00001111), (1010 0011), (1100 0001), etc.
Em base hexadecimal (16), um byte é representado por dois
dı́gitos: 1000 0011 = 0x83, 0111 1100 = 0x7c, etc.
Julio López
Disciplina MC889
Aritmética de Bytes
Um byte: (b7 b6 b5 b4 b3 b2 b1 b0 ), bi ∈ {0, 1}
(00001111), (1010 0011), (1100 0001), etc.
Em base hexadecimal (16), um byte é representado por dois
dı́gitos: 1000 0011 = 0x83, 0111 1100 = 0x7c, etc.
Um byte pode ser interpretado como um polinômio binário de
grau máximo 7:
(10001111) = x 7 + x 3 + x 2 + x + 1,
(00111100) = x 5 + x 4 + x 3 + x 2 .
Julio López
Disciplina MC889
Aritmética de Bytes
Um byte: (b7 b6 b5 b4 b3 b2 b1 b0 ), bi ∈ {0, 1}
(00001111), (1010 0011), (1100 0001), etc.
Em base hexadecimal (16), um byte é representado por dois
dı́gitos: 1000 0011 = 0x83, 0111 1100 = 0x7c, etc.
Um byte pode ser interpretado como um polinômio binário de
grau máximo 7:
(10001111) = x 7 + x 3 + x 2 + x + 1,
(00111100) = x 5 + x 4 + x 3 + x 2 .
Soma e multiplicação de bytes?
soma e multiplicação de polinômios binários
(com coeficientes 0 e 1).
Julio López
Disciplina MC889
Aritmética de Bytes
7
X
GF (28 ) = {
ai x i , ai ∈ {0, 1}}
i=0
Julio López
Disciplina MC889
Aritmética de Bytes
7
X
GF (28 ) = {
ai x i , ai ∈ {0, 1}}
i=0
P
P
Soma: A + B = 7i=0 ai x i + 7i=0 bi x i =
P
7
i=0 (ai + bi mod 2) = A ⊕ B (xor).
Julio López
Disciplina MC889
Aritmética de Bytes
7
X
GF (28 ) = {
ai x i , ai ∈ {0, 1}}
i=0
P
P
Soma: A + B = 7i=0 ai x i + 7i=0 bi x i =
P
7
i=0 (ai + bi mod 2) = A ⊕ B (xor).
P
i
8
4
3
Multiplicação: A × B = 14
i=0 ci x mod x + x + x + x + 1.
Julio López
Disciplina MC889
Aritmética de Bytes
7
X
GF (28 ) = {
ai x i , ai ∈ {0, 1}}
i=0
P
P
Soma: A + B = 7i=0 ai x i + 7i=0 bi x i =
P
7
i=0 (ai + bi mod 2) = A ⊕ B (xor).
P
i
8
4
3
Multiplicação: A × B = 14
i=0 ci x mod x + x + x + x + 1.
(GF(28 ), +, ×): estrutura algébrica chamada: corpo finito
binário.
Julio López
Disciplina MC889
Multiplicação de Bytes
A · B ∈ GF (28 )
Julio López
Disciplina MC889
Multiplicação de Bytes
A · B ∈ GF (28 )
A · B = (a7 x 7 + · · · + a2 x 2 + a1 x + a0 ) · B
Julio López
Disciplina MC889
Multiplicação de Bytes
A · B ∈ GF (28 )
A · B = (a7 x 7 + · · · + a2 x 2 + a1 x + a0 ) · B
= a7 (x 7 B) + · · · + a2 (x 2 B) + a1 (xB) + a0 B
Julio López
Disciplina MC889
Multiplicação de Bytes
A · B ∈ GF (28 )
A · B = (a7 x 7 + · · · + a2 x 2 + a1 x + a0 ) · B
= a7 (x 7 B) + · · · + a2 (x 2 B) + a1 (xB) + a0 B
= x(· · · x(x(a7 B) + a6 B) + a5 B) · · · ) + a0 B
Julio López
Disciplina MC889
Multiplicação de Bytes
A · B ∈ GF (28 )
A · B = (a7 x 7 + · · · + a2 x 2 + a1 x + a0 ) · B
= a7 (x 7 B) + · · · + a2 (x 2 B) + a1 (xB) + a0 B
= x(· · · x(x(a7 B) + a6 B) + a5 B) · · · ) + a0 B
x ·B
mod p(x) = x 8 + x 4 + x 3 + x + 1?
Julio López
Disciplina MC889
Multiplicação por x
B = (1110 0011), p(x) = (100011011)
x · B mod p(x) = x · (x 7 + x 6 + x 5 + x + 1) mod p(x)
Julio López
Disciplina MC889
Multiplicação por x
B = (1110 0011), p(x) = (100011011)
x · B mod p(x) = x · (x 7 + x 6 + x 5 + x + 1) mod p(x)
= x 8 + x 7 + x 6 + x 2 + x mod p(x)
Julio López
Disciplina MC889
Multiplicação por x
B = (1110 0011), p(x) = (100011011)
x · B mod p(x) = x · (x 7 + x 6 + x 5 + x + 1) mod p(x)
= x 8 + x 7 + x 6 + x 2 + x mod p(x)
= (1 1100 0110) mod p(x)
Julio López
Disciplina MC889
Multiplicação por x
B = (1110 0011), p(x) = (100011011)
x · B mod p(x) = x · (x 7 + x 6 + x 5 + x + 1) mod p(x)
= x 8 + x 7 + x 6 + x 2 + x mod p(x)
= (1 1100 0110) mod p(x)
= (1 1100 0110) ⊕ 1 0001 1011
Julio López
Disciplina MC889
Multiplicação por x
B = (1110 0011), p(x) = (100011011)
x · B mod p(x) = x · (x 7 + x 6 + x 5 + x + 1) mod p(x)
= x 8 + x 7 + x 6 + x 2 + x mod p(x)
= (1 1100 0110) mod p(x)
= (1 1100 0110) ⊕ 1 0001 1011
= 0 1101 1101.
x ·B =
(B << 1) ⊕ 00011011 se b7 = 1;
(B << 1)
se b7 = 0.
Julio López
Disciplina MC889
Multiplicação de Bytes
Entrada: A, B ∈ GF (28 ), P(x) = x 8 + x 4 + x 3 + x + 1
Saı́da: C = A × B mod P(x)
Julio López
Disciplina MC889
Multiplicação de Bytes
Entrada: A, B ∈ GF (28 ), P(x) = x 8 + x 4 + x 3 + x + 1
Saı́da: C = A × B mod P(x)
A = (a7 a6 a5 · · · a1 a0 );
C = a7 B;
for(i = 6; i >= 0; i--){
C = x · C mod P(x);
C = C ⊕ ai B;
}
Julio López
Disciplina MC889
Multiplicação de Bytes
Entrada: A, B ∈ GF (28 ), P(x) = x 8 + x 4 + x 3 + x + 1
Saı́da: C = A × B mod P(x)
A = (a7 a6 a5 · · · a1 a0 );
C = a7 B;
for(i = 6; i >= 0; i--){
C = x · C mod P(x);
C = C ⊕ ai B;
}
Exercı́cio: Calcular 0x8e · 0x4F.
Julio López
Disciplina MC889
Multiplicação de Bytes e Palavras
C = A · B
C3 |C2 |C1 |C0 = A3 |A2 |A1 |A0 · B3 |B2 |B1 |B0
Byte por Byte = Byte
Palavra (32 bits) por Palavra (32 bits) = Palavra (32 bits)
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A = a3 x 3 + a2 x 2 + a1 x + a0 , B = b3 x 3 + b2 x 2 b1 x + b0
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A = a3 x 3 + a2 x 2 + a1 x + a0 , B = b3 x 3 + b2 x 2 b1 x + b0
Soma: A + B = (a3 + b3 )x 3 + (a2 + b2 )x 2 + (a1 + b1 )x 1 + (a0 + b0 )
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A = a3 x 3 + a2 x 2 + a1 x + a0 , B = b3 x 3 + b2 x 2 b1 x + b0
Soma: A + B = (a3 + b3 )x 3 + (a2 + b2 )x 2 + (a1 + b1 )x 1 + (a0 + b0 )
Multiplicação: A × B = ?
C = A × B = c6 x 6 + c5 x 5 + c4 x 4 + c3 x 3 + c2 x 2 + c1 x + c0
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A = a3 x 3 + a2 x 2 + a1 x + a0 , B = b3 x 3 + b2 x 2 b1 x + b0
Soma: A + B = (a3 + b3 )x 3 + (a2 + b2 )x 2 + (a1 + b1 )x 1 + (a0 + b0 )
Multiplicação: A × B = ?
C = A × B = c6 x 6 + c5 x 5 + c4 x 4 + c3 x 3 + c2 x 2 + c1 x + c0
c0
c1
c2
c3
c4
c5
c6
= a0 • b0
= a1 • b0 ⊕ a0 • b1
= a2 • b0 ⊕ a1 • b1 ⊕ a0 • b2
= a3 • b0 ⊕ a2 • b1 ⊕ a1 • b2 ⊕ a0 • b3
= a3 • b1 ⊕ a2 • b2 ⊕ a1 • b3
= a3 • b2 ⊕ a2 • b3
= a3 • b3
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A ⊗ B := C mod x 4 + 1 = d3 x 3 + d2 x 2 + d1 x + d0 x
x i mod x 4 + 1 = x i
Julio López
mod 4
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A ⊗ B := C mod x 4 + 1 = d3 x 3 + d2 x 2 + d1 x + d0 x
x i mod x 4 + 1 = x i
mod 4
d0 = (a0 • b0 ) ⊕ (a3 • b1 ) ⊕ (a2 • b2 ) ⊕ (a1 • b3 )
d1 = (a1 • b0 ) ⊕ (a0 • b1 ) ⊕ (a3 • b2 ) ⊕ (a2 • b3 )
d2 = (a2 • b0 ) ⊕ (a1 • b1 ) ⊕ (a0 • b2 ) ⊕ (a3 • b3 )
d3 = (a3 • b0 ) ⊕ (a2 • b1 ) ⊕ (a1 • b2 ) ⊕ (a0 • b3 )
Julio López
Disciplina MC889
Polinômios com Coeficientes em GF (28 )
A ⊗ B := C mod x 4 + 1 = d3 x 3 + d2 x 2 + d1 x + d0 x

 
d0
a0
 d1   a1

 
 d2  =  a2
d3
a3
a3
a0
a1
a2
Julio López
a2
a3
a0
a1

b0
a1
 b1
a2 

a3   b2
b3
a0
Disciplina MC889




Polinômios com Coeficientes em GF (28 ) - Encriptação
D = {03}x 3 + {01}x 2 + {01}x + {02} ⊗ B

 
d0
02
 d1   01

 
 d2  =  01
d3
03
03
02
01
01
Julio López
01
03
02
01

01
b0
 b1
01 

03   b2
02
b3
Disciplina MC889




Polinômios com Coeficientes em GF (28 ) - Decriptação
D = {0b}x 3 + {0d}x 2 + {09}x + {0e} ⊗ B

 

d0
0e 0b 0d 09
b0
 d1   09 0e 0b 0d   b1

 

 d2  =  0d 09 02 0b   b2
d3
0b 0d 09 0e
b3
Julio López
Disciplina MC889




O AES - o algoritmo
chave K128 = (k0 , k1 , k2 , k3 , ..., k12 , k13 , k14 , k15 )

k0
 k1

 k2
k3
k4 k8
k5 k9
k6 k10
k7 k11

k12
k13 

k14 
k15
bloco B128 = (b0 , b1 , b2 , b3 , ..., b12 , b13 , b14 , b15 )

b0
 b1

 b2
b3
b4 b8
b5 b9
b6 b10
b7 b11
Julio López

b12
b13 

b14 
b15
Disciplina MC889
O AES - algoritmo
State = [b0 ...b15 ]4×4
Key = [k0 ...k15 ]4×4
AddRoundKey(State, RoundKey );
for i = 1 to Nr − 1
SubBytes(State);
ShiftRows(State);
MixColums(State);
AddRoundKey(State, RoundKey );
SubBytes(State);
ShiftRows(State);
AddRoundKey(State, RoundKey ).
Julio López
Disciplina MC889
O AES
Julio López
Disciplina MC889
O AES em cores
Julio López
Disciplina MC889
Caixa-S
S(x) :=






S(x) = 





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
1
0
0
0
1
1
1
1
Ax −1 + b se x =
6 0;
b
se x = 0.
1
1
0
0
0
1
1
1
Julio López
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1












x00
x10
x20
x30
x40
x50
x60
x70
Disciplina MC889


 
 
 
 
 
+
 
 
 
 
 
1
1
0
0
0
1
1
0






 mod 2.





Caixa-S- Tabela
S[xy ] = linha x coluna y
Julio López
Disciplina MC889
SubBytes(State)
Julio López
Disciplina MC889
ShiftRows(State)
Julio López
Disciplina MC889
MixColumns(State)
Julio López
Disciplina MC889
AddRoundKey(State)
Julio López
Disciplina MC889
Escalonamento das chaves (128 bits)
Entrada: constantes R[1], ..., R[10], e chave k[0], ..., k[15].
Saı́da: Subchaves Ki , i = 0, 1, ..., 10
Ki = (w [4i], w [4i + 1], w [4i + 2], w [4i + 3]).
for i = 0 to 3 do
w [i] ← (k[4i], k[4i + 1], k[4i + 2], k[4i + 3])
for i = 4 to 43 do
temp ← w [i − 1]
if i ≡ 0 (mod 4) then
temp ← SubWord(RotWord(temp)) ⊕ R[i/4]
w [i] ← w [i − 4] ⊕ temp
Julio López
Disciplina MC889
Escalonamento das chaves (128 bits)
Julio López
Disciplina MC889
Escalonamento das chaves (128 bits)
V = [v0 , v1 , v2 , v3 ]
V = SubWord(RotWord(V )) = [v10 , v20 , v30 , v00 ]
v10 ← v10 ⊕ RC [i]
Julio López
Disciplina MC889
Escalonamento das chaves (192 bits)
Julio López
Disciplina MC889
Escalonamento das chaves (256 bits)
Julio López
Disciplina MC889
AES-desencriptação
Julio López
Disciplina MC889
AES-desencriptação
Julio López
Disciplina MC889
Instruções Intel para AES, 2010
Julio López
Disciplina MC889
Instruções Intel para AES, 2010
AESENC
AESENCLAST
ASDEC
AESDECLAST
AESKEYGENASSIST
AESIMC
Julio López
Disciplina MC889
Instruções Intel para AES, 2010
AESENC
AESENCLAST
ASDEC
AESDECLAST
AESKEYGENASSIST
AESIMC
AESENC xmm1, xmm2;
Tmp = xmm1;
RoundKey = xmm2;
Tmp = ShiftRows(Tmp);
Tmp = SubBytes(Tmp);
Tmp = MixColumns(Tmp);
xmm1 = Tmp xor RoundKey;
Julio López
Disciplina MC889
AES-128 com as instruções Intel
Julio López
Disciplina MC889
AES-128 com as instruções Intel
;O registro xmm15 contém o bloco de dados.
;Os registros xmm0,.., xmm10 contém as subchaves.
;No final, xmm15 contém o bloco encriptado.
pxor xmm15, xmm0
;Etapa 0
aesenc xmm15, xmm1 ;Etapa 1
aesenc xmm15, xmm2 ;Etapa 2
aesenc xmm15, xmm3 ;Etapa 3
aesenc xmm15, xmm4 ;Etapa 4
aesenc xmm15, xmm5 ;Etapa 5
aesenc xmm15, xmm6 ;Etapa 6
aesenc xmm15, xmm7 ;Etapa 7
aesenc xmm15, xmm8 ;Etapa 8
aesenc xmm15, xmm9 ;Etapa 9
aesenclast xmm15, xmm10 ;Etapa 10
Julio López
Disciplina MC889

Documentos relacionados