complexidade de algoritmos - ?· no caso do rsa o “atacante” irá usar o valor n da chave...

Download Complexidade de Algoritmos - ?· No caso do RSA o “atacante” irá usar o valor n da chave pública…

Post on 08-Nov-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Complexidade de Algoritmos

    Prof. Diego Buchinger

    diego.buchinger@outlook.com

    diego.buchinger@udesc.br

    Prof. Cristiano Damiani Vasconcellos

    cristiano.vasconcellos@udesc.br

  • Complexidade, Criptografia e

    um pouco de Teoria dos Nmeros

  • Criptografia RSA

    Ideia: Permitir que comunicao entre dois participantes sem que um intruso possa entender as mensagens trocadas.

    Baseia-se na facilidade em se encontrar nmeros primos grandes e na dificuldade em fatorar o produto entre dois nmeros primos grandes.

    Em um sistema de criptografia de chave pblica, cada participante possui:

    + uma chave pblica (pblica);

    + uma chave privada (secreta);

  • Criptografia RSA

    Como funciona:

    - Bob obtm a chave

    pblica de Alice;

    - Bob usa a chave para

    codificar a mensagem M:

    C = PA(M) e envia C;

    - Alice recebe C e utiliza

    sua chave privada para

    recuperar a mensagem

    original M:

    M = SA(C)

  • Criptografia RSA (1)

    Algoritmo:

    Selecionar dois nmeros primos grandes p e q,

    (512 bits, cada por exemplo) sendo p q

    Calcular: n = p * q

    Selecionar um inteiro mpar pequeno e tal que eseja primo relativo de (p - 1)(q - 1) [nmero primo]:

    mdc (e, (p - 1)(q - 1)) = 1

    Chave pblica = (e, n)

  • O Carter Primo

    Notao: d | a d divide a

    sendo que d 1 e d |a|

    Todo inteiro a divisvel pelos divisores triviais 1 e a

    Nmero primo: nicos divisores so 1 e a

    Todo nmero composto pode representado pela

    multiplicao de seus fatores primos (42 = 2*3*7)

    Qual a complexidade de tempo para descobrir se um

    nmero a qualquer (int) primo?

  • O Carter Primo

    Densidade de nmeros primos

    Distribuio dos primos: () n de primos n

    Exemplo: 10 = 4 {2,3,5,7}

    Teorema dos nmeros primos: lim

    ()

    / ln = 1

    Para n grande, n / ln n uma boa aproximao para ()!

  • O Carter Primo

    Densidade de nmeros primos

    Com base no teorema apresentado podemos fazer uma estimativade probabilidade para verificar se um nmero escolhido ao acaso primo ou no como: 1 / ln( n )

    Quantos nmeros de 512 bits precisamos testar, emmdia, at encontrar um nmero primo?

    ln( 2512 ) 355 nmeros

    1 / 355 0,28% (chance de encontrar um primo de 1)

  • O Carter Primo

    Densidade de nmeros primos

    Para testarmos o carter primo de um nmero pequeno n,podemos testar verificando a divisibilidade por todos os nmerosentre 2 e

    Para inteiros pequenos: ( )

    Para inteiros grandes com k bits: ( 2 )

    O crivo de eratstenes (algoritmo) um dos mais conhecidospara criar uma lista de primos at um dado n

    (ver gif: https://pt.wikipedia.org/wiki/Crivo_de_Erat%C3%B3stenes)

  • Teoria dos Nmeros

    Teorema de Fermat:

    Se p primo ento:

    1 1 ( )

    Contudo, 1 pode ser um nmero relativamente grande, e realizar a operao de mdulo pode ser um problema.

    Calcular:

    a=2 / p=5

    a=5 / p=3

    a=4 / p=7

    Aritmtica modular

    (ver prximo slide)

  • Aritmtica Modular

    um sistema para manipular faixas restritas de nmeros inteiros.

    Relao de congruncia:

    a b (mod n) se e somente se a mod n = b mod n.

    a b (mod n) n divide (a b).

    Exemplos:

    38 14 (mod 12), 38 mod 12 = 14 mod 12

    -10 38 (mod 12), -10 mod 12 = 38 mod 12

  • Teoria dos Nmeros

    Exponenciao Modular:

    Realizar a operao de elevao ao quadrado repetida e

    realizar o mdulo sempre possvel.

    Exemplo: 253 101

  • Teste do carter pseudoprimo

    Considerando novamente a equao modular:

    1 1

    O teorema de Fermat nos diz que se n primo, ento n satisfazesta equao para qualquer escolha de a ( + )

    Se encontrarmos um a que no satisfaa a equao, entocertamente n no primo

  • Teste do carter pseudoprimo

    Ao testarmos se: 21 1

    caso falso: n certamente no primo

    caso verdade: ou n primo ou n pseudoprimo de base 2

    Mas, com que frequncia h um falso positivo?

    Raramente! Existem apenas 22 valores menores

    que 10.000: {341, 561, 645, 1105, ...}

    Usando 512 bits a chance de 1 / 1020

    Usando 1024 bits a chance de 1 / 1041

  • Teste do carter pseudoprimo

    Teste Aleatrio do Carter primo de Miller-Rabin

    Experimentar diversos valores como base:

    Melhora a confiabilidade, mas existem nmeros traioeiros eextremamente raros que do falso positivo para diferentes bases(nmeros de Carmichael)

    Observar raiz quadrada no trivial de 1 mdulo n:2 1 e x no 1 ou -1 (ex: x=6, n=35)

    MILLER-RABIN( n, s )

    para j=1 a s

    a = RANDOM( )

    se ( WITNESS( a, n ) )

    ento retorne falso [nmero composto, certamente]

    retorne verdade [nmero quase certamente primo]

  • Criptografia RSA (1)

    Algoritmo:

    Selecionar dois nmeros primos grandes p e q,

    (512 bits, cada por exemplo) sendo p q

    Calcular: n = p * q

    Selecionar um inteiro mpar pequeno e tal que eseja primo relativo de (p - 1)(q - 1) [nmero primo]:

    mdc (e, (p - 1)(q - 1)) = 1

    Chave pblica = (e, n)

    Por qu (p-1)(q-1)?

    https://crypto.stackexchange.com/questions/5715/phipq-p-1-q-1

    https://crypto.stackexchange.com/questions/5715/phipq-p-1-q-1

  • Divisores Comuns

    Um nmero dito divisor comum se ele divide dois nmeros:

    d | a e d | b => d divisor comum de a e b

    Propriedade dos divisores comuns:

    d | a e d | b implica em d | (ax + by)

    O mximo divisor comum entre dois nmeros

    a e b denotado por: mdc (a , b)

    d | a e d | b ento d | mdc (a , b)

  • Divisores Comuns

    Primos relativos ou Primos entre si ou Co-Primos:

    Dois inteiros so chamados de primos relativos se o nico inteiro

    positivo que divide os dois 1: mdc (a , b) = 1.

    Por exemplo, 49 e 15 so primos relativos:

    49 1,7,49

    15 1,3,5,15

    Propriedade

    se mdc (a , p) = 1 e mdc (b , p) = 1 ento mdc (ab , p) = 1

    Testar: a=49, b=15, p=13

  • Fatorao

    Fatorao nica

    Um inteiro pode ser escrito como um produto da forma:

    = 1

    1 2

    2

    Exemplo

    6.000 = 24 31 53 = 16 3 125

    Teste de primalidade: Dado um nmero n, determinar se n

    primo (fcil)

    Fatorao de inteiros: Dado um nmero n, representar n atravs

    de seus fatores primos (difcil at o momento)

  • Divisores Comuns

    Algoritmo de Euclides

    EUCLID (a , b)

    se b = 0

    ento retorne a

    seno retorne EUCLID( b , a mod b )

    Complexidade:

    Nmeros pequenos: O (log b)

    Nmeros grandes (k bits): O ( k ) (*mod)

    Calcular:

    EUCLID( 2 , 0 )

    EUCLID( 99 ,78 )

  • Divisores Comuns

    Algoritmo de Euclides Extendido

    Adaptar o algoritmo anterior para calcular x e y em:

    d = mdc (a,b) = ax + by

    EXT-EUCLID (a , b)

    se b = 0

    ento retorne ( a , 1 , 0 )

    (d, x, y) = EXT-EUCLID( b , a mod b )

    (d , x , y ) = (d, y, x a / b * y)

    retorne ( d , x , y ) Diviso inteira

    Calcular:

    EXT-EUCLID( 4 , 0 )

    EXT-EUCLID( 99 ,78 )

  • Criptografia RSA (2)

    Algoritmo:

    Calcular d como o inverso modular de e:

    e*d 1 mod ((p-1) (q-1))

    Chave privada = (d, n)

  • Aritmtica Modular

    Solues para a equao ax b (mod n)

    S h soluo se: mdc( a , n ) | b

    ax b (mod n) tem d solues distintas

    onde d = mdc( a , n )

    MOD-LIN-SOLVER( a , b , n )

    (d, x, y) = EXT-EUCLID( a, n )

    se d | b

    ento x0 = x(b / d) mod n

    para i=0 a d - 1 faa

    imprimir( x0 + i(n / d)) mod n

    seno imprimir nenhuma soluo

    Calcular:

    14x 30 (mod 100)

    MOD-LIN-SOLVER (14 , 30 , 100)

  • Aritmtica Modular

    Inverso multiplicativo modular:

    O inverso multiplicativo modular de um inteiro a no mdulo m

    um inteiro x tal que:

    1 ( )

    * Existe se e somente se a e m so primos relativos.

    17x 1 (mod 120)

    MOD-LIN-SOLVER (17 , 1 , 120)

  • Criptografia RSA

    Transforma um inteiro M (que representa um bloco dedados da mensagem) em um inteiro C (que representaum bloco da mensagem criptografada), usando aseguinte funo:

    nMC e mod

    Utilizar exponenciao

    modular!

  • Criptografia RSA

    A transformao da mensagem criptografada C na

    mensagem original executada atravs da formula:

    nCM d mod

    Cuidado!!

    n deve ser maior do que M!

    Caso contrrio existem mltiplas interpretaes para a mensagem codificada.

    Se M for maior do que n, deve-se dividir a mensagem em blocos

    Utilizar exponenciao

    modular!

  • Criptografia RSA

    (Exemplo)

    Mensagem: ola => 111 105 97 => 01101111 01101001 01100001

    A princpio nossa mensagem M teria o valor decimal: 7.301.473

    Vamos utilizar p = 521 e q = 383,

    logo n = p*q = 199.543 e (p-1) * (q-1) = 198.640

    Como M > n, devemos dividir a mensagem M em blocos.

    Vamos usar blocos de dois caracteres!

    Escolher arbitrariamente um valor para e [primo relativo a (p-1)(q-1)]e = 227 [primo pequeno]

    note que: mdc (227, 198.640) = 1 Chave pblica = (227, 199.543)

  • Criptografia RSA

    (Exemplo)

    p = 521 e q = 383 | n = 199.543 | e = 227

    Para gerar a chave privada precisamos calcular d como o inverso modular de e:

    e*d 1 (mod (p-1)(q-1)) = 227 * d 1 (mod 198.640)

    Usamos Euclides Estendido (227, 198.640) => mdc