Faculdade de Engenharia da Computação Disciplina Segurança Aplicada a Computação Teorema do Crivo de Erastóstenes; Operações bit a bit; Algoritmo DES; Modo(ECB,CBC,CFB, OFB) Site : http://www1.univap.br/~wagner/ec.html Prof. Responsáveis Wagner Santos C. de Jesus 1
Conceito de Crivo de Erastóstenes (CE) 2
Conceito (CE) Vem a ser um algoritmo prático para encontrar números primos até um certo valor limite. Intervalo [2,b]. Terceiro bibliotecário-chefe da Biblioteca de Alexandria. (194, a.c) 3
Conceito Matemático Ν * = { x 2 Ν [ a, b]} Determinar o intervalo [a,b]; onde a = 2 e b número natural R = b Fazendo arredondamento para baixo 4
Lista N = { 2, x 1, x 2, x 3,... x n } Encontra primeiro número da lista x = 2 Remova da lista todos os múltiplos deste primo. Pegar o próximo número da lista e realizar o passo anterior até que o número seja = o valor de R. 5
Exemplo Prático (CE) 6
para um intervalo de [1..20] R = 20 = 4 L = { 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} x = {2} L = { 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} L = { 2,3,5,7,9,11,13,15,17,19} x = {3} L = { 2,3,5,7,9,11,13,15,17,19} L = { 2,3,5,7,11,13,17,19} 7
Operações bit a bit 8
Operadores bit a bit 1. v u é a soma dos inteiros v,u de w bits 2. v u é a subtração dos inteiros v,u e w bits. 3. v u é o ou - exclusivo (XOR) de u,v de w bits 4. v << t é o deslocamento circular de t posições para a esquerda dos bits em v. 5. v >> t é o deslocamento circular de t posições para direita dos bits de v. 9
Exemplos de operações bit a bit 10
v u é a soma dos inteiros v,u de w bits. Exemplo: x = v + u mod 2 w w=3 x = 65 + 69 mod 8 x = 70 11
x u é a subtração dos inteiros x,u de w bits. Exemplo: v = x - u mod 2 w w=3 x = 65-69 mod 8 x = 60 12
v u é o ou - exclusivo (XOR) de u,v de w bits x = A B Exemplo: A = A B = E x = A ^ B x = A ^ B A 1000001 B 1000101 Xor ------------------ 0000100 x = 4 13
Essas operadores sãos denominados shift. E são representados da seguinte forma >> << Onde : >> - deslocamento para direita. << - deslocamento para esquerda. Sintaxe : Variável >> num-bits; // para direita Variável << num-bits; // para esquerda 14
Exemplo A = E x = A >> 1 x = 34 A = 1000101 = 69 x = 0100010 = 34 Desloca todos bits um movimento para direita 15
Exemplo de operação 128 64 32 16 8 4 2 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 byte nbit = 128; nbit = nbit >> 1; // Desloca um bit para direita nbit = nbit >> 2; // Desloca dois bit para direita nbit = nbit >> 1; // Desloca um bit para direita 16
Programa Exemplo byte a = 1; int x = 1; while( x <= 8){ printf( %d\n,a); a = a << 1 ; x++; } 17
Exemplo de deslocamento de bits à esquerda bit a bit 128 64 32 16 8 4 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 18
Algoritmo DES (Data Encryption Standard) Padrão de Dados para Criptografia 19
Histórico Foi primeiro algoritmo de criptografia cujo conhecimento se tornou público até então todos os algoritmos eram secretos. Projetado pela IBM em 1977 para ser adotado como padrão nos EUA para informações comerciais. Autores do projeto (Walter Tuchman e Carl Meyer,1970) e consultores da NSA (National Security Agency). 20
Conceito DES A segurança no DES não se baseia no conhecimento do algoritmo mas apenas no conhecimento da chave secreta. 21
Modos de Operação DES 22
São Descrito cinco modos de aplicação do DES 1. Modo ECB Eletcronic Code Book Mode 2. Modo CBC Cipher Block Chaining Mode 3. Modo CFB Cipher Feedback Mode 4. Modo OFB Output Feedback Mode 5. Modo Contador(Counter Mode) 23
Conceito de ECB Livro de Código Eletrônico Consiste em dividir o texto legível em blocos de comprimento igual ao comprimento fixo t de entrada do algoritmo fk(x) de chave secreta k obtendo-se n blocos {x 1,x 2,...,x n }. Sendo o ultimo bloco completado com brancos. 24
1. ECB Livro de Código Eletrônico {x 1, x 2, x 3, x n+1 } {x 4, x 5, x 6, x n+1 } {c 1, c 2, c 3, c n+1 } {c 4, c 5, c 6, c n+1 } Z = { x c } x c Z 0 1 2 A M M B C D 3 14 9 3 4 5 E E b E F G 0 3 103 25
Algoritmo ECB - Criptografia Para i de 0 ate n-1 faça se(i >= (n/2)-1) x[i] = ch[i] ^ A[i] senão x[i] = ch[i] ^ A[i] fim-se fim_para 26
ECB - Decriptografia para i de 0 ate n-1 faça fim_para dec[i] = x[i] ^ ch[i] 27
2. Cifra de Encadeamento de Bloco Consiste em capturar um byte da direita e criptografá-lo variando cada elemento de x para uma posição a esquerda. j = 2,3,... n { Z y j j ( Z ) 1 = j j 1 = x f k j y 28
CBC Modelo de Criptografia x 1 x 2 x 3 msg K f k () f k () f k () y 1 y 2 y 3 29
Algoritmo CBC - Criptografia para i de 1 até n-1 se(i <= (n/2)-1) X[i] = ch[i] ^ A[i-1] senão X[i] = ch[i] ^ A[i-1] fim_se Fim_para 30
CBC - Decriptografia j = 2,3... { Z j = f 1 k ( y i ) x j = Z j y j 1 31
CBC Modelo de Decriptografia y 1 y 2 y 3 K 1 f () f () 1 () 1 k k f k msg x 1 x 2 x 3 32
CBC - Decriptografia para i de 1 até n-1 faça Z[i] = x[i] ^ ch[i] Fim_para 33
3. CFB Cifra de Comentários Consiste em capturar s bits a esquerda e criptografar jogando a mensagem original a direita com os s bits a esquerda. Depois os s bits a esquerda serão descartados. j = 2,3,... { Z y j j = = f k ( w j 1 ) bis + esquerda => ( Z j ) x j 34
CFB Algoritmo de Criptografia A <- "BBANANA chave <- "BCDEFGG Para i de 0 ate n-1 X[i] = ch[i] ^ A[i]; fim_para 35
4. OFB - Comentário de Saída Captura-se o primeiro byte mas a esquerda da mensagem e usa-se esse bate como chave para descifragem da mensagem original. j =1,2,3...n Z y j j = f ( w 1) k j = x j [ s bits( esquerda)] 36
Observação Quando s é relativamente pequeno, da ordem de dezenas de bits, pode ocorrer repetição de y i y y + = i y i Chamado de Ciclo curto. 37
OFB Algoritmo de Decriptografia Z j = f ( w 1) k j x j = y j [ s bits( esquerda)] 38
OFB Algoritmo Criptografia A = "BANANA ch[0] = B Para i de 0 até n-1 faça x[i] = ch[0] ^ A[i]; fim_para 39
OFB Algoritmo de Decriptografia para i de 0 ate n-1 faça fim_para z[i] = ch[0] ^ X[i] 40
5. Modo Contador Consiste em pegar a chave f(w i +1) e acrescentar mais 1. k = {w i +1, w i +2, w i +3,... w i n+1} n k i = w j + j= 1 n j + 1 41
Algoritmo DES aplicado de forma convencional 42
Implementação fk j ( D j ) 43
DES - Convencional {x 1, x 2, x 3, x n+1 } {x 4, x 5, x 6, x n+1 } {c 1, c 2, c 3, c n+1 } {c 4, c 5, c 6, c n+1 } Z = { x c } {x 4 c 1, x 5 c 2, x 6 c 3, x n+1 c n+1 } {x 1 c 4, x 2 c 5, x 3 c 6, x n+1 c n+1 } x 0 1 2 E E b 3 4 5 A M M c Z B C D 7 6 100 E F G 4 11 10 44
Algoritmo AES Advanced Encryption Standard (Padrão avançado de Criptografia) 45
Histórico AES é um subconjunto da cifra Rijndael, desenvolvida por dois criptógrafos belgas, Vincent Rijmen e Joan Daemen, que apresentaram uma proposta ao NIST durante o processo de seleção do AES. Rijndael é uma família de cifras com diferentes tamanhos de chave e blocos. 46
Conceito O algoritmo descrito por AES é um algoritmo de chave simétrica, significando que a mesma chave é usada para criptografar e descriptografar os dados. Divididas em 4 fazes. 1 SubBytes 2- ShiftRows 3 MixColumns 4 - AddRoundKey AES está incluída na norma ISO / IEC 18033-3 47
Etapas do AES 48
0 - AddRoundKey AddRoundKey - Cada byte do estado é combinado com um bloco da chave circular usando xor bit a bit. B = A C 49
1 - SubBytes Uma etapa de substituição não-linear onde cada byte é substituído por outro de acordo com uma tabela de pesquisa. 50
Tabela de Pesquisa 011011 = Bits exteriores 01 e bits internos 1101 A saída seria 1001 51
Exemplo de substituição Etapa SubByte 52
2 ShiftRows Para AES, a primeira linha é deixada inalterada. Cada byte da segunda linha é deslocado um para a esquerda. Da mesma forma, as terceira e quarta linhas são deslocadas por deslocamentos de dois e três, respectivamente. Para blocos de tamanhos 128 bits e 192 bits, o padrão de deslocamento é o mesmo. Linha é deslocado circular esquerda por Bytes. 53
Exemplo - ShiftRows No passo ShiftRows, bytes em cada linha do estado são deslocados ciclicamente para a esquerda. O número de lugares que cada byte é deslocado difere para cada linha. 54
Exemplo prático ShiftRows Matriz Original J K L A B C P M K O I V S Matriz Resultante J K L B C A M K P I V O 55
3 - Etapa MixColumns Na etapa MixColumns, os quatro bytes de cada coluna do estado são combinados usando uma transformação linear inversível. A função MixColumns tem quatro bytes como entrada e saídas quatro bytes, onde cada byte de entrada afeta todos os quatro bytes de saída. Juntamente com ShiftRows, MixColumns fornece difusão na cifra. 56
Exemplo - MixColumns 57 Na etapa MixColumns, cada coluna do estado é multiplicada por um polinômio fixo c(x) polinómio fixo. 1 3 4 8 + + + + x x x x 1 ) ( 3 4 8 + + + + = x x x x x c
Exemplo Prático MixColumns a a a a 1,1 2,1 3,1 4,1 a a a a 1,2 2,2 3,2 4,2 a a a a 1,3 2,3 3,3 4,3 a a a a 1,4 2,4 3,4 4,4 4 x x x 1 3. = 1,1 1,2 1,3 1, 4 [....1 ] 4 3 a x + a x + a x + a Ao multiplicarmos uma matriz A por outra matriz B, temos que multiplicar todos os elementos da primeira linha da matriz A pelos elementos da primeira coluna da matriz B e somá-los 58
Operação XOR Se processado bit a bit, então, após o deslocamento, um XOR condicional com 1B 16 deve ser executado se o valor deslocado for maior que FF 16 (o estouro deve ser corrigido pela subtração do polinômio gerador). Estes são casos especiais da multiplicação usual em GF(2 8 ) Campo finito ou Campo global 59
4 - Etapa AddRoundKey Na etapa AddRoundKey, a subchave é combinada com o estado. Para cada rodada, uma subchave é derivada da chave principal usando a programação de chaves de Rijndael ; Cada subchave é o mesmo tamanho como o estado. A subchave é adicionada combinando cada byte do estado com o byte correspondente da subchave usando XOR bit a bit. 60
Exemplo AddRoundKey Na etapa AddRoundKey, cada byte do estado é combinado com um byte da subchave round usando a operação XOR 61
Observação Se o tamanho da tabela resultante de quatro kilobytes for muito grande para uma determinada plataforma de destino, a operação de pesquisa de tabela pode ser executada com uma única tabela de 32 bits de 32 bits (ou seja, 1 quilobyte) pelo uso de rotações circulares. 62
Exemplo Roteador TP-Link WPA (Wi-Fi Protected Access) Protocolo de Comunicação via Rádio. Pre-Shared Key Permite chave de 8 a 63 caracteres de extensão. 63
Exemplo Aplicado x Chave k 1 f k ( x) = y f k ( y) = x AES_ENCRYPT ilegível y Linha de Comunicação Chave k AES_DECRYPT Legível x y = AES_ENCRYPT(x, k) x = AES_DECRYPT(y,k) Dado Cifrado Dado Decifrado 64