Implementando Algoritmo RSA usando Python

Dec 09 2022
Este artigo explica o que realmente é o algoritmo RSA na criptografia e mostra como implementar o algoritmo RSA para criptografar e descriptografar dados usando Python. Aqui, dados se referem a números.

Este artigo explica o que realmente é o algoritmo RSA na criptografia e mostra como implementar o algoritmo RSA para criptografar e descriptografar dados usando Python. Aqui, dados se referem a números. Você também pode usar dados de string para criptografar e descriptografar usando esse algoritmo.

O algoritmo RSA é um método amplamente utilizado para criptografar e descriptografar mensagens. Recebeu o nome de seus criadores, Ron Rivest , Adi Shamir e Leonard Adleman , que o desenvolveram em 1977 . O algoritmo RSA é baseado na dificuldade de fatorar grandes números e é amplamente considerado um método seguro para criptografar dados.

Para entender como o algoritmo RSA funciona, precisamos primeiro entender o conceito de chaves públicas e privadas. No algoritmo RSA, cada usuário possui um par de chaves: uma chave pública e uma chave privada. A chave pública é disponibilizada para qualquer pessoa que queira enviar uma mensagem ao usuário e é usada para criptografar a mensagem. A chave privada é mantida em segredo e é usada para descriptografar a mensagem.

Aqui está um exemplo de como o algoritmo RSA funciona:

  • Digamos que Gwen queira enviar uma mensagem para Peter. Ela procura a chave pública de Peter e a usa para criptografar a mensagem.
  • A mensagem criptografada é enviada para Peter.
  • Peter usa sua chave privada para descriptografar a mensagem e lê-la.

Veja como funciona com mais detalhes:

  • Primeiro, Gwen e Peter concordam em dois grandes números primos, p e q.
  • Eles usam esses números primos para calcular um terceiro número, n, que é o produto de p e q. Este número é tornado público.
  • Eles também calculam um quarto número, conhecido como “totient”, que é o número de inteiros positivos menores que n que são primos de n. Este número também é divulgado.
  • Gwen e Peter geram uma chave secreta, conhecida como “chave privada”. Essa chave é um número que é menor que o totiente e coprimo ao totiente.
  • Eles então usam sua chave privada para calcular sua chave pública, que é um número relativamente primo em relação ao totiente. Essa chave pública é disponibilizada para qualquer pessoa que queira enviar uma mensagem ao usuário.

O algoritmo RSA tem várias vantagens. É relativamente simples de implementar e é amplamente utilizado porque é considerado um método seguro de criptografia de dados. Além disso, o algoritmo RSA é um algoritmo de “chave pública”, o que significa que as chaves usadas para criptografia e descriptografia são diferentes. Isso possibilita que os usuários se comuniquem sem precisar trocar chaves secretas.

Em resumo, o algoritmo RSA é um método amplamente utilizado para criptografar e descriptografar mensagens. Baseia-se na dificuldade de fatorar grandes números e é considerado um método seguro para criptografar dados. Tem várias vantagens, incluindo sua simplicidade e o uso de chaves públicas e privadas.

Todo o algoritmo RSA em palavras simples,

  1. Selecione p , q ( p e q ambos primos e p diferente de q )
  2. Calcule n = p * q
  3. Calcular o tociente, t = (p -1) * (q — 1)
  4. Selecione e usando gcd(t, e) = 1 onde 1 < e < t
  5. Calcule d usando (d * e % t = 1)
  6. Considere e como chave pública e d como chave privada.
  7. Para criptografia, Cipher Text = (Message ^ e) % n (onde, Message < n)
  8. Para descriptografia, Message = (Cipher Text ^ d) % n

from math import gcd

# defining a function to perform RSA approch
def RSA(p: int, q: int, message: int):
    # calculating n
    n = p * q

    # calculating totient, t
    t = (p - 1) * (q - 1)

    # selecting public key, e
    for i in range(2, t):
        if gcd(i, t) == 1:
            e = i
            break
    
    # selecting private key, d
    j = 0
    while True:
        if (j * e) % t == 1:
            d = j
            break
        j += 1

    # performing encryption
    ct = (message ** e) % n
    print(f"Encrypted message is {ct}")

    # performing decryption
    mes = (ct ** d) % n
    print(f"Decrypted message is {mes}")

# Testcase - 1
RSA(p=53, q=59, message=89)

# Testcase - 2
RSA(p=3, q=7, message=12)

Encrypted message is 1394
Decrypted message is 89

Encrypted message is 3
Decrypted message is 12

Se você achar útil, compartilhe com seus amigos e não se esqueça de seguir.

Vejo vocês em outro blog até lá tchau