Vous êtes sur la page 1sur 14

Prof.

Rubens Vilhena

Criptografia RSA

Três americanos desenvolveram um sistema de código secreto, chamado RSA,


baseado nas dificuldades existentes para descobrir os fatores primos de um
número muito grande. Criava-se um novo ramo da Criptografia, a ciência dos
códigos, fortemente baseado na Teoria dos Números. Com o advento dos
computadores e da computação algébrica, a Criptografia ganhou um novo
impulso. Neste momento, a proliferação de senhas bancárias e de cartões de
crédito, bem como a crescente necessidade de criptografar dados confidenciais
que inundam a Internet, fazem da Criptografia um dos ramos mais pesquisados
da Matemática.

O sistema RSA, batizado em homenagem a seus inventores Ronald Rivest, Adi


Shamir e Leonard Adleman, foi o primeiro criptossistema de chave pública e
ainda é o mais importante. Sua segurança está intimamente relacionada à
dificuldade de encontrar a fatoração de um número inteiro positivo composto,
que é o produto de dois primos gigantes.

Pré-codificação

Em primeiro lugar, devemos converter a mensagem em uma seqüência de


números. Essa primeira etapa é chamada de pré-codificação. Há várias
maneiras de se fazer isso. Aqui vamos supor que o texto não contém
acentuação, pontuação, números etc, apenas as letras A a Z (maiúsculas).
Também vamos adicionar espaços em branco entre palavras, que será
substituído pelo número 99. A letra A será convertida no número 10, B será 11
e assim por diante, até o Z correspondendo ao número 35. Observe que cada
letra corresponde a um número com exatamente dois algarismos. Isso evita
ambigüidades.

A B C D E F G H I J K L M
10 11 12 13 14 15 16 17 18 19 20 21 22
N O P Q R S T U V W X Y Z
23 24 25 26 27 28 29 30 31 32 33 34 35
[]
99

A chave pública é um número n = p . q, onde p e q são primos. Antes de


começar devemos então escolher esses números. O último passo da pré-
codificação é quebrar a mensagem em blocos. Esses blocos devem ser
números menores que n. A maneira de escolher os blocos não é única, mas é
importante evitar duas situações:
• Nenhum bloco deve começar com o número 0 (problemas na
decodificação).
• Nenhum bloco deve ser maior que a chave de codificação n.
• Os blocos não devem corresponder a nenhuma unidade linguística
(palavra, letra etc.). Assim a decodificação por contagem de frequência
fica impossível.

1
Prof. Rubens Vilhena

Codificando e decodificando

Para codificar a mensagem precisamos de n = p . q e de um inteiro positivo e


(1 < e < (n)) que seja relativamente primo com (n). Em outras palavras,

mdc (e, (n)) = mdc (e, (p – 1) (q – 1)) = 1. Note que e é sempre ímpar, dado
que (n) é par.

Chamaremos o par (n, e) de chave de codificação do sistema RSA.


Codificaremos cada bloco de mensagem separadamente e a mensagem
codificada será a sequência de blocos codificados.
Vamos agora mostrar como codificar cada bloco b. Chamaremos o bloco
codificado de C(b). Em primeiro lugar, lembre-se que b é menor que n. Então:

C(b)  be (mod n)

onde 0  C(b) < n.

Exemplo1: Considere a frase Paraty é linda. Convertendo em números,

25 10 27 10 29 34 99 14 99 21 18 23 13 10

Agora devemos escolher n.


Vamos começar com um número pequeno, por exemplo, n = 11.13 = 143.
Podemos então quebrar a mensagem acima em blocos, cada bloco deve ter
valor menor que 143 e não deve iniciar com zero.:

25 – 102 – 7 – 102 – 93 – 49 – 91 – 49 – 92 – 118 – 23 – 13 – 10

Então temos que (143) = 10.12 = 120 e, portanto, vamos escolher e como o
menor primo que não divide 120. O valor é 7. Logo,

C(25)  257 (mod 143)


C(25)  254 . 252 . 251 (mod 143)
C(25)  254 . 53 . 25 (mod 143)
C(25)  532 . 53 . 25 (mod 143)
C(25)  92 . 53 . 25 (mod 143)
C(25)  14 . 25 (mod 143)
C(25)  64 (mod 143)

Procedendo dessa maneira com todos os blocos, obtemos a seguinte


mensagem cifrada:

64 – 119 – 6 – 119 – 102 – 36 – 130 – 36 – 27 – 79 – 23 – 117 – 10

Vejamos agora como proceder para decodificar um bloco de mensagem


codificada.

2
Prof. Rubens Vilhena

A informação que precisamos para decodificar está contida no par (n, d), onde
d (1< d <(n)) é o inverso de e módulo (n) (e.d  1 (mod (n)). Chamaremos
(n, d) de chave de decodificação e D(c) o resultado do processo de
decodificação. D(c) é dado por:

D(c)  cd (mod n)

onde 0  D(c) < n.


Observe que é possível calcular d, desde que (n) e e sejam conhecidos.
Entretanto, se não conhecemos p e q é praticamente impossível calcular d.
Voltando ao nosso exemplo, temos que n = 143 e e = 7. Para calcular d,
usamos o Teorema de Euler:

d.e  1 (mod (n))  d  e((n)) – 1 (mod (n))

ou seja,
d  7((143)) – 1 (mod (143))
d  7(120) – 1 (mod 120)
d  732 – 1 (mod 120)
d  731 (mod 120)
d  103 (mod 120)

Como exemplo, deciframos o primeiro bloco da mensagem cifrada:

D(64)  64103 (mod 143)


D(64)  64100 . 643 (mod 143)
D(64)  (6410)10 . 643 (mod 143)
D(64)  ((645)2)10 . 643 (mod 143)
D(64)  ((642 . 643)2)10 . 643 (mod 143)
D(64)  ((92 . 25)2)10 . 25 (mod 143)
D(64)  ((12)2)10 . 25 (mod 143)
D(64)  (144)10 . 25 (mod 143)
D(64)  (1)10 . 25 (mod 143)
D(64)  25 (mod 143)

Os outros blocos ficam como Investigações.

3
Prof. Rubens Vilhena

Por que Funciona?

A pergunta óbvia que surge agora é: D(C(b)) = b?


Ou seja, decodificando um bloco de mensagem codificada, encontramos um
bloco da mensagem original? Porque senão todo nosso esforço foi sem
sentido. Vamos mostrar nessa seção que a resposta para esta pergunta é: sim!
Consideremos então n = p . q. Vamos provar que D(C(b))  b (mod n)
E por que não a igualdade D(C(b)) = b (mod n)? Observe que D(C(b)) e b são
menores que (n – 1). Por isso escolhemos b menor que n e mantivemos os
blocos separados depois da codificação. Pela definição de D e C temos que

D(C(b))  (be)d  bed (mod n)

Mas d é o inverso de e módulo (n). Logo, existe inteiro k tal que e.d = 1 +
k.(n). Logo,

bed  b1 + k.( n )  b . (b (n))k (mod n)

Se m.d.c.(b, n) = 1, então podemos usar o teorema de Euler:

bed  (1)k . b  b (mod n)

Se b e n não são primos entre si, observe que n = p . q, p e q primos distintos.


Logo,

bed  b1 + k. (n)  b1 + k.(p-1).(q-1)  (b(p-1))k.(q-1). b (mod n)

Se m.d.c.(b, p) = 1, então podemos usar o teorema de Fermat [bp-1  1 (mod p)].


Caso contrário, temos que p | b e portanto

bed  b  0 (mod p)
Logo,
bed  b (mod p)

qualquer que seja b. Fazemos o mesmo para o primo q, obtendo:

bed  b (mod q)
Portanto,
bed  b (mod p.q)
bed  b (mod n)
c.q.d.

Exemplo2:

A B C D E F G H I J K L M
10 11 12 13 14 15 16 17 18 19 20 21 22

4
Prof. Rubens Vilhena

N O P Q R S T U V W X Y Z
23 24 25 26 27 28 29 30 31 32 33 34 35
[]
99

Digamos que você está interessado em enviar a mensagem

FINALMENTE

Você deve inicialmente numerar toda a palavra de acordo com a tabela acima:

15 18 23 10 21 22 14 23 29 14

Agora, suponha que a chave seja (n, e) = (7663, 17)


Então você deve escolher blocos numéricos para codificar que sejam menores
que n e que não comecem com zero.
Escolhamos, por exemplo, os seguintes blocos (veja que isso vai depender da
máquina que você está trabalhando):

151 – 823 – 102 – 122 – 142 – 329 – 14


Basta agora pegar cada bloco e elevar à potência e módulo n:

15117  5137 (mod 7663)


15117  5137 (mod 7663)
82317  3345 (mod 7663)
10217  1635 (mod 7663)
12217  3009 (mod 7663)
14217  2186 (mod 7663)
32917  3890 (mod 7663)
1417  2032 (mod 7663)
A mensagem codificada é

5137 – 3345 – 1635 – 3009 – 2186 – 3890 – 2032


Agora vejamos como fazer se recebemos uma mensagem codificada por
alguém utilizando a chave pública (n, e) = (7663, 17). Suponha que a
mensagem recebida seja a mesma obtida acima:

5137 – 3345 – 1635 – 3009 – 2186 – 3890 – 2032


Para entender o que significa você precisa da chave privada d, que é inversa
de e (mod ( n )).

Etapas:
1. Primeiro, fatoramos o número n = 7623 ( veja abaixo a fatoração pelo
método de Fermat). Encontramos os primos 79 e 97.
2. Calculamos (n) = (7663) = (79) . (97) = 78.96 = 7488.
3. Calculamos d  e((n)) – 1 (mod (n))  17(7488) – 1 (mod 7488)  881 (mod
7488).
4. Agora basta pegar cada bloco que recebemos e elevar à potência d módulo
n.

5
Prof. Rubens Vilhena

5137881  151 (mod 7663)


3345881  823 (mod 7663)
1635881  102 (mod 7663)
3009881  122 (mod 7663)
2186881  142 (mod 7663)
3890881  329 (mod 7663)
2032881  14 (mod 7663)

5. Então colocamos os resultados alinhados

151 – 823 – 102 – 122 – 142 – 329 – 14

depois separamos em blocos de dois números

15 18 23 10 21 22 14 23 29 14

que corresponde a mensagem enviada

FINALMENTE

Fatoração pelo Método de Fermat

Vamos descrever um algoritmo, que é muito eficiente quando n tem um fator


primo que não é muito menor que n .

Para começar vamos supor que n é ímpar, já que se n for par então 2 é um de
seus fatores. A idéia do algoritmo de Fermat é tentar achar números inteiros
positivos x e y tais que n = x 2 − y 2 . Supondo que encontramos estes números,
temos que

n = x 2 − y 2 = ( x − y )( x + y ) .

Logo x-y e x+y são fatores de n.

Seja r um número real, denotamos por r  sua menor parte inteira. Por
exemplo,   = 11 e   =  . É claro que se r é inteiro então r  = r.

O caso mais fácil do algoritmo de Fermat ocorre quando n é um quadrado


perfeito; isto é, quando existe algum inteiro r tal que n = r 2 . Neste caso temos
que r é fator de n. Além disso, na notação acima x = r e y = 0. Observe que se
y > 0 então

x = n + y2  n

Isto sugere a seguinte estratégia para encontrar x e y.

6
Prof. Rubens Vilhena

Algoritmo de Fermat

Entrada: inteiro positivo ímpar n.

Saída: um fator de n ou uma mensagem indicando que n é primo.

Etapa 1: Comece com x =  n  ; se n = x 2 então x é fator de n e podemos


parar.

Etapa 2. Caso contrário incremente x de uma unidade e calcule y = x 2 − n .

Etapa 3. Repita a Etapa 2 até encontrar um valor inteiro para y, ou até que x
(n + 1)
seja igual a : no primeiro caso n tem fatores x+y e x-y, no segundo n é
2
primo.

Exemplo: Seja n = 1342127 o número que queremos fatorar. A variável x é


inicializada com a menor parte inteira da raiz quadrada de n (
 1342127  =  ). Mas

x 2 = 11582 = 1340964  1342127

logo passamos a incrementar x de um em um. Fazemos isso até que

x2 − n

(n + 1)
seja inteiro, ou x seja igual a , que neste caso vale 671064. É mais fácil
2
resumir isto em uma tabela

x x2 − n
1159 33,97
1160 58,93
1161 76,11
1162 90,09
1163 102,18
1164 113

Obtivemos assim um inteiro no sexto laço. Portanto x = 1164 e y = 113 são os


valores desejados. Os fatores correspondentes são x + y = 1277 e x – y =
1051.

Exercício:

1) Encontre os dois números primos, cujos produtos, geraram os números


abaixo, utilizando o método da fatoração de Fermat:

7
Prof. Rubens Vilhena

a) 437623

b) 919199

c) 9797

d) 4061

e) 19109

Assinatura digital utilizando a criptografia RSA

1º passo: Como a segurança do RSA reside na dificuldade de fatorar números


que são produtos de 2 primos; então é aconselhável escolher primos bem
grandes (10 ou mais dígitos). Mas, para fins didáticos vamos escolher primos
relativamente pequenos (menores que 1000), cuja idéia é a mesma para
primos grandes.

Ainda, para efeitos deste exemplo, chamaremos o remetente de Alice (A) e o


destinatário de Bob (B). Para elaborarmos as chaves públicas e privadas do
esquema, então escolhemos adequadamente dois primos p e q para cada
participante, e calculamos o produto n = p . q.

Os números primos de Alice são: pA = 859, qA = 547. Que resulta em nA =


469873.
Os números primos de Bob são: pB = 937, qB = 461. Que resulta em nB =
431957.
*Observação 1: os primos p e q não devem ser muito próximos para evitar fatorações rápidas como a de Fermat.

2º passo: O número n encontrado desta maneira faz parte tanto da chave


pública como da chave privada de cada participante. Agora, escolhemos um
número e que também será público e que seja relativamente primo à função de
Euler (n)  MDC((n), e) = 1.

Para Alice, (nA) = (859) . (547) = 858 . 546 = 468468.


Uma boa escolha para Alice é o número primo eA = 5, pois o MDC(468468, 5) =
1.
Para Bob, (nB) = (937) . (461) = 936 . 460 = 430560.
Uma boa escolha para Bob é o número primo eB = 7, pois o MDC(430560, 7) =
1.
*Observação 2: a chave pública e não é necessariamente um número primo, este exemplo foi apenas uma mera
coincidência.

3º passo: Tendo posse de (n) e da chave pública e, podemos calcular a


chave secreta d.

8
Prof. Rubens Vilhena

Sendo que d é o inverso multiplicativo de e, ou seja, e.d  1 (mod (n)). Pelo


teorema de Euler, d  e ( ( n ))−1(mod  (n )) . Fazendo os devidos cálculos
encontramos que:

Para Alice, 5. dA  1 (mod 468468)  dA = 281081.


Para Bob, 7. dB  1 (mod 430560)  dB = 307543.
*Observação 3: uma forma computacional rápida para se encontrar a chave privada d é:
int d = 0;
for ( d = 2; d < phi; d++ ) {
if ( (e * d) % phi == 1 ) ) {
System.out.println( “Inverso = ” + d );
break; // d encontrado, sai do laço
}
}

Pronto, já temos posse das chaves necessárias para cifrar e decifrar


mensagens.

O que deve ser disponibilizado nas páginas amarelas ou qualquer diretório


público:
Chave pública de Alice (nA, eA) = (469873, 5).
Chave pública de Bob (nB, eB) = (431957, 7).

O que não deve ser disponibilizado, pois é secreto e pertence somente aos
seus donos:
Chave privada de Alice (nA, dA) = (469873, 281081).
Chave privada de Bob (nB, dB) = (431957, 307543).
*Observação 4: note que tanto os primos p e q, assim como a função (n), também devem ser mantidos secretos!
Pois a partir de p e q, pode-se facilmente calcular (n) = (p – 1) * (q – 1). E vice-versa, a partir de (n) pode-se calcular
p e q através de um sistema linear e uma simples equação do 2º grau. Tendo posse de (n), calcula-se a chave
privada d como demonstrado.

4º passo: Finalmente, como fazer para criptografar uma mensagem? Por


exemplo, tomemos a palavra “BRASIL”, que no código ASCII corresponde aos
valores:

(66, 82, 65, 83, 73, 76)

Concatenando esses valores, obtemos 668265837376.


Reagrupando em blocos (de qualquer tamanho), obtemos 668, 265, 837, 376.
O valor contido em cada bloco não deve exceder o valor da chave pública n.
Também se deve tomar cuidado para que nenhum bloco inicie com o valor
zero, com risco de se criar um erro na cifragem. Os blocos evitam ataques por
freqüência, já que se a mensagem fosse codificada caractere por caractere, o
RSA se tornaria uma mera cifra de substituição.

A codificação dos blocos é feita, elevando-se cada valor do bloco ao expoente


público e módulo n do destinatário, obtendo-se o menor valor positivo
correspondente. Assim, se Alice deseja enviar a palavra “BRASIL” para Bob,
ela deve utilizar a chave pública (nB, eB) = (431957, 7) de Bob, e efetuar C(b) =
be (mod n), da seguinte forma:

C(668) = 6687 (mod 431957)  331318 (mod 431957)

9
Prof. Rubens Vilhena

C(265) = 2657 (mod 431957)  387742 (mod 431957)


C(837) = 8377 (mod 431957)  213180 (mod 431957)
C(376) = 3767 (mod 431957)  121902 (mod 431957)

Alice, então, deve enviar a mensagem criptografada

(331318, 387742, 213180, 121902)

para Bob.

5º passo: Para decifrar a mensagem, Bob deve proceder de maneira inversa,


utilizando a sua chave secreta (nB, dB) = (431957, 307543), ou seja, D(c) = cd
(mod n), da seguinte forma (geralmente não é uma congruência fácil de
resolver...):

D(331318) = 331318307543 (mod 431957)  668 (mod 431957)


D(387742) = 387742307543 (mod 431957)  265 (mod 431957)
D(213180) = 213180307543 (mod 431957)  837 (mod 431957)
D(121902) = 121902307543 (mod 431957)  376 (mod 431957)

Bob reagrupa a mensagem decodificada 668265837376, separa em pares,

(66, 82, 65, 83, 73, 76)

e obtém a mensagem original “BRASIL”.

Propriedades matemáticas garantem que aplicando a função de cifragem e


depois decifragem, a mensagem original continua a mesma, isto é, b = D(C(b)).

Assinatura: Assinar uma mensagem é garantir que ela realmente vem de


quem diz ser o remetente.
Como podemos assinar uma mensagem utilizando o RSA?

No exemplo, anterior, perceba que em nenhum momento chegamos a usar as


chaves do remetente (Alice), portanto é chegada a hora.

Devido às propriedades matemáticas das chaves públicas e privadas e e d,


Alice pode utilizar sua própria chave privada dA “decodificar” a mensagem
original ao invés de normalmente utilizá-la para decifrar uma mensagem cifrada
com sua chave pública destinada a ela.

Isto faria com que a mensagem ficasse cifrada com a sua chave privada, e
como isto seria útil? Antes de partimos para o exemplo numérico, uma breve
teoria.

O que foi feito anteriormente (no exemplo de Bob):

b → CB(b) → DB(CB(b)) → b

10
Prof. Rubens Vilhena

onde b é a mensagem em texto puro “BRASIL”, CB( ) é a função de cifragem


que utiliza a chave pública de Bob, e DB( ) é a função de decifragem que utiliza
a chave secreta de Bob.

O esquema de assinatura digital consiste em

b → DA(b) → CB(DA(b)) → DB(CB(DA(b))) → DA(b) → CA(DA(b)) → b

Em outras palavras, Alice utiliza sua chave privada para “decodificar” a


mensagem original (que inicialmente não é uma ação muito útil, pois qualquer
pessoa com conhecimento da chave pública de Alice pode desfazer esta ação).
Em seguida, Alice cifra o resultado com a chave pública de Bob. Neste ponto, o
que temos? Uma mensagem-cápsula duplamente criptografada com a chave
privada de Alice e a chave pública de Bob.

CB(DA(b)) = mensagem assinada

O que isto garante? Que Bob pode primeiramente decodificar esta mensagem-
cápsula com sua própria chave privada, e assim obter de volta a mensagem
criptografada com a chave privada de Alice. Mas aqui que surge o grande
ponto: se Bob utilizar a chave pública de Alice, ele obterá a mensagem original!

Como ninguém mais além de Alice possui a chave privada dA, então realmente
aquela mensagem foi codificada inicialmente por Alice. A outra garantia vem de
que somente Bob sabe disto, pois Alice sabiamente também utilizou a chave
pública de Bob.

Em resumo, no esquema tradicional (sem assinatura), b = D(C(b)).


Entretanto, devido às propriedades matemáticas, também é verdade que b =
C(D(b)).
Ou seja, no esquema assinado temos, b = CA(DB(CB(DA(b)))), onde as funções
são aplicadas de dentro para fora na ordem que aparecem. Agora o exemplo
numérico.

Relembrando as chaves públicas de Alice e Bob:

Chave pública de Alice (nA, eA) = (469873, 5).


Chave pública de Bob (nB, eB) = (431957, 7).

Chave privada de Alice (nA, dA) = (469873, 281081).


Chave privada de Bob (nB, dB) = (431957, 307543).

1º passo: Alice utiliza sua chave privada para “decodificar” a palavra “BRASIL”
separada em blocos como no exemplo anterior (as mesmas observações de
tamanho de bloco e valores menores que os módulos também valem para este
caso):

DA(668) = 668281081 (mod 469873)  249014 (mod 469873)


DA(265) = 265281081 (mod 469873)  82081 (mod 469873)

11
Prof. Rubens Vilhena

DA(837) = 837281081 (mod 469873)  221564 (mod 469873)


DA(376) = 376281081 (mod 469873)  231544 (mod 469873)

2º passo: Em seguida, Alice pega o resultado e aplica na função de


codificação com a chave pública de Bob:

CB(249014) = 2490147 (mod 431957)  273379 (mod 431957)


CB(82081) = 820817 (mod 431957)  45868 (mod 431957)
CB(221564) = 2215647 (mod 431957)  414208 (mod 431957)
CB(231544) = 2315447 (mod 431957)  363416 (mod 431957)

Assim, Alice envia a mensagem criptografada assinada:

(273379, 45868, 414208, 363416)

3º passo: Bob, ao receber a mensagem criptografada assinada, deve


primeiramente aplicar sua chave privada (é uma calculeira danada, eu sei...
Tente usar o computador!):

DB(273379) = 273379307543 (mod 431957)  249014 (mod 431957)


DB(45868) = 45868307543 (mod 431957)  82081 (mod 431957)
DB(414208) = 414208307543 (mod 431957)  221564 (mod 431957)
DB(363416) = 363416307543 (mod 431957)  231544 (mod 431957)

Já aqui neste resultado, Bob deve obter algo que Alice obteve no 1º passo.

4º passo: Finalmente, Bob aplica a chave pública de Alice que garante que foi
ela mesma que enviou esta mensagem (nenhuma outra pessoa além de Alice
pode ter a chave privada dela, lembra?):

CA(249014) = 2490145 (mod 469873)  668 (mod 469873)


CA(82081) = 820815 (mod 469873)  265 (mod 469873)
CA(221564) = 2215645 (mod 469873)  837 (mod 469873)
CA(231544) = 2315445 (mod 469873)  376 (mod 469873)

Novamente, Bob reagrupa a mensagem decodificada 668265837376, separa


em pares, (66, 82, 65, 83, 73, 76) e obtém a mensagem original “BRASIL”.

12
Prof. Rubens Vilhena

Investigações: Para os Investigações seguintes utilize a tabela abaixo

A B C D E F G H I J K L M
65 66 67 68 69 70 71 72 73 74 75 76 77
N O P Q R S T U V W X Y Z
78 79 80 81 82 83 84 85 86 87 88 89 90

Tabela ASCII

(1) Usando as chaves públicas dadas, codifique e decodifique as frases


correspondentes:

a) (n, e) = (1037, 7) SONHO

b) (n, e) = (2201, 11) REMO

c) (n, e) = (1577, 5) ESPERANDO

(2) A chave pública utilizada pelo Banco Crash para codificar suas mensagens
é a seguinte:

(n, e) = (4559, 5)

Os computadores do banco receberam, de local indeterminado, os seguintes


blocos de mensagem:

2621 – 2608 – 3594 – 4261

O que diz a mensagem?

(3) A mensagem
96 – 61 – 751 – 9

foi codificada pelo método RSA usando a chave (n, e) = (767, 13). Decodifique
a mensagem.

(4) Sabendo-se que n = 27641 é igual ao produto de dois primos e que


 (n) = 27300 , determine os fatores primos de n.

(5) Sabendo-se que n = 3552377 é igual ao produto de dois primos e que


 (n) = 3548580 , determine os fatores primos de n.

(6) A mensagem

13
Prof. Rubens Vilhena

6802 – 8728 – 9451


foi codificada pelo método RSA usando a chave (n, e) = (16517, 5). Além disso,
sabe-se que  (n) = 16236 . Decodifique a mensagem.

(7) (Assinatura Digital)


Considere que o Banco Bandit possua a seguinte chave pública:
(nB, eB) = (20099, 7)
E a Empresa Explorit possua a seguinte chave pública:
(nE , eE) = (61823, 11)
Demonstre como a empresa enviaria a mensagem MONEY assinada ao banco
e como o banco confirmaria a autenticidade da assinatura.

14

Vous aimerez peut-être aussi