Dept. InformáIca / FCT 9 Novembro 2010 5
Tipos de chave – cifras mistas
A transferência de grandes quanIdades de dados
é feita usando um método simétrico com chave
secreta K
A troca da chave K entre os interlocutores usa um
método assimétrico (chave pública, chave
privada)
Cifras con@nuas (steam ciphers)
Gerador de sequênciaSequência de chave (bits)
xor
Sequência em claro Sequência cifrada Ver exemplo do XOR a propósito do “one Ime pad”
Cifra simétrica
Dept. InformáIca / FCT 9 Novembro 2010 9 Chave comum à operação de cifrar e de decifrar Chave secreta P mensagem em claro, C mensagem cifrada K chave usada para cifrar e decifar f função usada para cifrar f‐1 função usada para decifrar C = f ( P, K) P = f‐1 ( C, K) cifrar decifrarBloco em claro com n bits
Bloco cifrado com n bits
Dept. InformáIca / FCT 9 Novembro 2010 13
Versão “moderna” das cifras de
permutação – P‐BOX
Bloco de Feistel
1973‐ Aplicação práIca por Feistel das noções de
confusão e difusão devidas a Shannon
É a base da maior parte dos algoritmos de cifra simétricos
por bloco
Entrada: 2w bits de texto (L
i‐1, R
i‐1)
e uma subchave K
iTodas as subchaves, K
i, são
derivadas de K
L
i= R
i‐1R
i= L
i‐1XOR f(R
i‐1, K
i)
Reversibilidade da rede de Feistel
Dept. InformáIca / FCT 9 Novembro 2010 15 Ki Cifrar XOR f Ri‐1 Li‐1 Ri Li Decifrar XOR f K i Ri‐1 Li‐1 Ri Li Ri‐1 = Li é óbvio uma vez que foi copiado directamenteAlgoritmos de cifra simétrica por blocos
Dept. InformáIca / FCT 9 Novembro 2010 17
Muitos usam redes de Feistel
Nº de bits de um
bloco Nº de bits da chave Nº de iterações DES (Digital EncrypIon Standard) 64 56 16 IDEA 64 128 8 Blowfish 64 Variável até 488 16 AES (Advanced EncrypIon
Standard) 128, 192 ou 256 128, 192 ou 256 10,12 ou 14
Dept. InformáIca / FCT 9 Novembro 2010 21
DES – Digital EncrypIon Standard
Dept. InformáIca / FCT 9 Novembro 2010 27
Transformação das chaves
Usa duas metades de 32-bit (L & R)
Como é normal na cifra de Feistel :
Li = Ri–1
Ri = Li–1 ⊕ F(Ri–1, Ki)
Toma 32 bit da metade R e uma sub-chave de 48
bits e:
Expande R para 48 bits usando a permutação E XOR com a sub-chave
Passa através de 8 S-boxes para obter um resultado de 32 bits
Permuta esses 32 bits usando a P-Box P
Ataques ao DES: tamanho da chave
Dept. InformáIca / FCT 9 Novembro 2010 31 Os ataques de força bruta não são fáceis (comprimento da chave: 56 bits) 256 chaves possíveis = 7.2x1016 chaves Os avanços do hardware tornaram‐nos possíveis: Em 1997 na Internet nalguns meses Em 1998 com h/w dedicado (Electronic FronIer FoundaIon) nalguns dias Em 1999 num esforço distribuído 22 horas!Preço de uma máquina para pesquisa
Dept. InformáIca / FCT 9 Novembro 2010 41
CBC – Cipher Block Chaining
CBC – Cipher Block Chaining
O mesmo bloco em claro corresponde a blocos cifrados diferentes
Reordenação e substituição impossíveis Depende do bloco anterior
Propagação de erros limitada
Só afecta o bloco corrente e o próximo
Cifrar
X1 = P1 xor IV ; C1 = E(X1) Xi = Pi xor Ci‐1 ; Ci = E(Xi)
Decifrar
Função de cifra do TEA
Dept. InformáIca / FCT 9 Novembro 2010 47
void encrypt(unsigned long k[], unsigned long text[]) {
unsigned long y = text[0], z = text[1]; unsigned long delta = 0x9e3779b9, sum = 0; int n;
for (n= 0; n < 32; n++) {
sum +=delta;
y += ((z << 4) + k[0]) ^ (z+sum) ^ ((z >> 5) + k[1]); // 5 z += ((y << 4) + k[2]) ^ (y+sum) ^ ((y >> 5) + k[3]); // 6 } text[0] = y; text[1] = z; } As linhas 5 e 6 fazem ocultação (XOR do texto deslocado) e difusão (deslocamento e trocas) chave 4 x 32 bits Texto em claro e cifrado 2 x 32 OU exclusivo deslocamento
- 64 passos (neste caso 32*2) com somas, XOR e deslocamentos lógicos para assegurar a confusão e a difusão dos padrões de bits do bloco em claro no bloco cifrado
- A constante “mágica” delta serve para evitar alguns tipos de ataques
Função para decifrar do TEA
void decrypt(unsigned long k[], unsigned long text[]) { unsigned long y = text[0], z = text[1];unsigned long delta = 0x9e3779b9, sum = delta << 5; int n; for (n= 0; n < 32; n++) {
z -= ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]); y -= ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]); sum -= delta;
}
UIlização do TEA
Dept. InformáIca / FCT 9 Novembro 2010 49
void tea(char mode, FILE *infile, FILE *outfile, unsigned long k[]) { /* mode is ’e’ for encrypt, ’d’ for decrypt, k[] is the key.*/
char ch, Text[8]; int i; while(!feof(infile)) {
i = fread(Text, 1, 8, infile); /* read 8 bytes from infile into Text */ if (i <= 0) break;
while (i < 8) { Text[i++] = ' ';} /* pad last block with spaces */ switch (mode) {
case 'e':
encrypt(k, (unsigned long*) Text); break; case 'd':
decrypt(k, (unsigned long*) Text); break;
}
fwrite(Text, 1, 8, outfile); /* write 8 bytes from Text to outfile */ }