Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Trabalho de Segurança e Criptografia 
RSA 
 
Um dos melhores exemplos para exemplificar a utilização de números primos na computação, é falando sobre um dos modelos de criptografia mais seguros do mundo, o RSA, onde se baseia na escolha de número primos, e quanto maior o número, mais seguro a chave é. 
Podemos usar esse site como exemplo para escolher um número primo grande: 
 http://compoasso.free.fr/primelistweb/page/prime/liste_online_en.php 
Escolhido os números, o processo é feito da seguinte forma, temos dois primos, tais como: 
p1 = 3, p2 = 11 (apenas a fim de estudo, o melhor a ser feito é escolher o maior primo possível) 
Calculamos o produto entre eles, no caso temos, 11 x 3 = 33 
 
 
Após esse resultado, precisamos calcular o totiene de euler desse número, que no caso é a quantidade de números ‘coprimos’, em que o MDC entre ele e o outro número é 1, e a quantidade de números coprimos é o totiene desse número. A fórmula para se calcular o titiene de um número é essa: 
 
Utilizando nosso exemplo, temos então: 
 
Agora precisamos escolher um dos 20 coprimos do nosso 33, os coprimos de 33 são 1,2,4,5,7,8,10,13,14,16,17,19,20,23,25,26,28,29,31,32, para esse exemplo, escolhemos o 17, vamos chamar o de X. 
Agora precisamos de um Y, ele para ele existir, é preciso que a seguinte fórmula seja verdadeira: 
X x Y mod totiene (n) = 1 (mod, no mundo da computação, é o resto da divisão de um número por outro, geralmente sendo o operador %) 
Para essa fórmula ser real, temos que Y = 13 
Então nossos dados agora ficam organizados assim: 
 
Agora, para encriptar uma mensagem, tal como uma mensagem M qualquer, a seguinte fórmula é usada: 
 
Vamos usar de exemplo então o número 14 
temos que:
 
 
logo o nosso 14 cifrado virou 20 e agora, se quisermos decriptografar? O processo é o seguinte: 
Plain = cifra ^ y mod n 
 
Assim temos o nosso texto decriptografado de volta. 
 
 
 
 
 
 
Script 
 
#!/usr/bin/python 
 
class bcolors: 
 HEADER = '\033[95m' 
 OKBLUE = '\033[94m' 
 OKCYAN = '\033[96m' 
 OKGREEN = '\033[92m' 
 WARNING = '\033[93m' 
 FAIL = '\033[91m' 
 ENDC = '\033[0m' 
 BOLD = '\033[1m' 
 UNDERLINE = '\033[4m' 
 
def encrypt(msg, encryptor, n): 
 print(f"[+] {bcolors.OKGREEN}ENCRYPTING{bcolors.ENDC}") 
 aux = msg ** encryptor 
 crypt = aux % n 
 return crypt 
 
def decrypt(encrypted, decryptor, n): 
 print(f"[+] {bcolors.OKGREEN}DECRYPTING{bcolors.ENDC}") 
 
 aux = encrypted ** decryptor 
 plain = aux % n 
 return plain 
 
if _name_ == "_main_": 
 p1 = 11 
 p2 = 3 
 encryptor = 17 
 decryptor = 13 
 
 n = p1*p2 
 
 print(f"valores{bcolors.WARNING}\nchave pública:{bcolors.ENDC}\tencryptor: {encryptor}, n={n}\n{bcolors.WARNING}chave privada:{bcolors.ENDC}\tdecryptor: {decryptor}, n={n}") 
 print(f"================================================================================") 
 
 message = int(input("Digite a mensagem: ")) 
 encypted = int(encrypt(message, encryptor, n)) 
 
 print(f"a sua mensagem criptografada é: {bcolors.OKBLUE}{encypted}{bcolors.ENDC}") 
 print(f"================================================================================") 
 
 plain = int(decrypt(encypted, decryptor, n)) 
 print(f"a mensagem orginal é: {bcolors.OKBLUE}{plain}{bcolors.ENDC}")
Imagem (exemplo) 
Alunos:
	Arthur Juan Lima Pinto (20201104544)
	Juliana Bond Oliveira Lins (20201101127)
	Pedro Henrique Ottone Chaves (20201106340)
	Yago de Paula Freire Graça (20212102645)
image1.png
image3.png
image7.jpg
image4.png
image6.png
image5.png
image2.png

Mais conteúdos dessa disciplina