Implementazione dell'algoritmo RSA utilizzando Python

Dec 09 2022
Questo articolo spiega cos'è effettivamente l'algoritmo RSA in crittografia e mostra come implementare l'algoritmo RSA per la crittografia e decrittografia dei dati utilizzando Python. Qui i dati si riferiscono ai numeri.

Questo articolo spiega cos'è effettivamente l'algoritmo RSA in crittografia e mostra come implementare l'algoritmo RSA per la crittografia e decrittografia dei dati utilizzando Python. Qui i dati si riferiscono ai numeri. È inoltre possibile utilizzare i dati delle stringhe per la crittografia e la decrittografia utilizzando questo algoritmo.

L'algoritmo RSA è un metodo ampiamente utilizzato per crittografare e decrittografare i messaggi. Prende il nome dai suoi creatori, Ron Rivest , Adi Shamir e Leonard Adleman , che lo svilupparono nel 1977 . L'algoritmo RSA si basa sulla difficoltà di fattorizzare grandi numeri ed è ampiamente considerato un metodo sicuro per crittografare i dati.

Per capire come funziona l'algoritmo RSA, dobbiamo prima comprendere il concetto di chiavi pubbliche e private. Nell'algoritmo RSA, ogni utente ha una coppia di chiavi: una chiave pubblica e una chiave privata. La chiave pubblica viene messa a disposizione di chiunque desideri inviare un messaggio all'utente e viene utilizzata per crittografare il messaggio. La chiave privata è tenuta segreta e viene utilizzata per decifrare il messaggio.

Ecco un esempio di come funziona l'algoritmo RSA:

  • Diciamo che Gwen vuole inviare un messaggio a Peter. Cerca la chiave pubblica di Peter e la usa per crittografare il messaggio.
  • Il messaggio crittografato viene inviato a Peter.
  • Peter usa la sua chiave privata per decifrare il messaggio e leggerlo.

Ecco come funziona in modo più dettagliato:

  • Innanzitutto, Gwen e Peter concordano su due grandi numeri primi, p e q.
  • Usano questi numeri primi per calcolare un terzo numero, n, che è il prodotto di p e q. Questo numero è reso pubblico.
  • Calcolano anche un quarto numero, noto come "toziente", che è il numero di interi positivi minori di n che sono coprimi con n. Anche questo numero è reso pubblico.
  • Gwen e Peter generano ciascuno una chiave segreta, nota come "chiave privata". Questa chiave è un numero minore del toziente ed è coprimo rispetto al toziente.
  • Quindi usano la loro chiave privata per calcolare la loro chiave pubblica, che è un numero relativamente primo rispetto al paziente. Questa chiave pubblica viene messa a disposizione di chiunque desideri inviare un messaggio all'utente.

L'algoritmo RSA ha diversi vantaggi. È relativamente semplice da implementare ed è ampiamente utilizzato perché è considerato un metodo sicuro per crittografare i dati. Inoltre, l'algoritmo RSA è un algoritmo a "chiave pubblica", il che significa che le chiavi utilizzate per la crittografia e la decrittografia sono diverse. Ciò consente agli utenti di comunicare senza dover scambiare chiavi segrete.

In sintesi, l'algoritmo RSA è un metodo ampiamente utilizzato per crittografare e decrittografare i messaggi. Si basa sulla difficoltà di fattorizzare grandi numeri ed è considerato un metodo sicuro per crittografare i dati. Ha diversi vantaggi, tra cui la sua semplicità e il suo utilizzo di chiavi pubbliche e private.

L'intero algoritmo RSA in parole semplici,

  1. Seleziona p , q ( p e q entrambi primi e p non uguale a q )
  2. Calcola n = p * q
  3. Calcola il toziente, t = (p -1) * (q — 1)
  4. Seleziona e usando MCD(t, e) = 1 dove 1 < e < t
  5. Calcola d usando (d * e % t = 1)
  6. Considera e come chiave pubblica e d come chiave privata.
  7. Per la crittografia, testo cifrato = (messaggio ^ e) % n (dove, messaggio < n)
  8. Per la decrittazione, Messaggio = (testo cifrato ^ 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 lo trovi utile, condividilo con i tuoi amici e non dimenticare di seguirlo.

Ci vediamo in un altro blog fino ad allora ciao