RSA para exmatemáticos
Me he escrito a mí mismo lo siguiente:
#########################################################
# @gilbellosta, 2022-11-14
# Implementing RSA "by hand"
#########################################################
# message
msg = 3
# the two "large" primes
p1 = 7
p2 = 13
# public key
# I choose a number, 5, as part of the public key;
# the other part is p1 * p2
pub = (5, p1 * p2)
a, n = pub
# calculation of the private key
# it must be a number b such that
# x**(a * b) % n == x % n
# for all x
# for that, (this comes from Euler's totient theorem)
# we need that a*b % totient = 1
totient = (p1 - 1) * (p2 - 1)
tmp = [x for x in range(totient) if a * x % totient == 1]
b = tmp[0]
priv = (b, n)
# testing:
encrypted_msg = msg**a % n
encrypted_msg**b % n
Lo quiero acompañar, para futura referencia, de unos enlaces donde se explican de manera concisa y sin perífrasis innecesarias los puntos más críticos de todo lo anterior: