1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Gerar chaves RSA public and private

Discussão em 'Programação' iniciada por eralha, 9 de Março de 2009. (Respostas: 2; Visualizações: 1942)

  1. eralha

    eralha Power Member

    We need a encoding key(e) and a decoding key(d).
    We start with E, E should be coprime to (p-1*q-1)
    The security of RSA does not depend on E, we can check the primes against (p-1*q-1) until we find one. 3, 5, 7 etc (the security of RSA depends on how hard it is factoring the number we choose as modulus).
    3 is coprime to 4265, lets choose 3 as our E.
    In order to calculate D we must do an inverse mod operation like so
    E^-1 mod (p-1*q-1). Inverse mod can be found on any good calculator and is often shown as M^-1 i am using Hexprobe Multibyte Calculator
    so 3^-1 mod 4265 is 2843(d)
    now take 3 as our encoding key(e) and 2843 as our decoding key(d).
    The RSA rules are now
    C = P^E mod m
    P = C^D mod m
    P = Plain Text
    C = Cipher Text

    1000^E(3) mod m(4399) = C(1724)
    1000 encrypts to 1724, lets decode it now.
    1724^D(2843) mod m(4399) = P(1000)

    Boas pessoal estou a tentar perceber esta logica, o que nao entendi bem foi como gerar a chave de desencriptação, dame sempre valores esquisitos, as contas que estou a fazer são em action script, mas o meu problema está na matemática.

    Código:
    var modulus:Number = 4399;
    var eKey:Number = 3;
    var dKey:Number = (eKey^-1)%4265;
    var c:Number = Math.pow(1000,eKey)%modulus;
    var p:Number = Math.pow(c, dKey)%modulus;
    trace("EKEY: "+eKey+" Cypher "+c+" DKEY: "+dKey+" Plain: "+p);
    
    OUTPUT: EKEY: 3 Cypher 1724 DKEY: -4 Plain: 1.1320118003091641e-13
    
    
     
  2. eralha

    eralha Power Member

    o que não entendo aqui é como achar os numeros coprimos de uma chave... nao sei se estou a perceber bem.
     
  3. anarquista

    anarquista Banido


    Essa palavra não existe em português. O que existe em bom português são números primos entre si. Ou seja são números cujo único divisor comum entre ambos é 1.

    Exemplo: 9 e 10

    divisores de 9: 1,3,9
    divisores de 10: 1,2,5,10

    Divisores comuns de 9 e 10: 1

    Se tu conseguisses "achar" os números "coprimos" de uma chave conseguias aldrabar o sistema e obter a chave privada.

    Se queres gerar as tuas próprias chaves de RSA deves usar números primos entre si muito grandes. Para determinares números primos entre si muito grandes nada melhor que utilizar uma pequena programaçãozinha ;)

    Escolhes vários números inteiros muito grandes (usando por exemplo 1 rand).
    Depois colocas numa lista (ou outra estrutura) os seus divisores
    Depois comparas as listas de divisores.
    Repetes o processo até encontrares 2 números inteiros tais que o único divisor comum é o 1.

    Cumps.
     

Partilhar esta Página