Criptografía

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:

Desencriptando (II): la avaricia es mala

El otro día propuse y resolví un problema de encriptación con R. Utilizaba uno de los llamados métodos avariciosos (o greedy) para hallar el máximo de una función (que era, en esencia, la función de verosimilitud de una determinada permutación de caracteres dentro del espacio probabilístico de todas ellas).

Este método funcionó con una cadena relativamente larga para desencriptar pero falla con otras más cortas. Por ejemplo, con

cadena <-c("u","r","i","b","y","r","l","g","m","h","e","r","y",
"b","g","m","a","c","p","y","c","m","d","r","h","z","y",
"r","e","i","c","l","r","i","n","e","c","t","d","t","c","z",
"c","y","c","v","r","o","d","y","s","e","r","q","c","y","c",
"n","g","q","c","i","g","m","r","y","d","i","v","r")

Si ejecuto el código que presenté el otro día,

Desencriptando (I): el problema de un mal amigo

Tengo un muy mal amigo que, sabiendo cómo soy para esas cosas y de qué manera me quitan el sueño, quiso alterar mi solaz enviándome esto:

cadena <- c(
"s","u","t","k","r","k","b","s","w","f","s","t","s","u","z","k","q","x","p","k","s","r",
"t","z","z","a","s","r","f","q","z","u","s","r","w","z","u","t","g","f","s","b","k","y",
"z","y","s","v","y","g","s","e","f","s","m","p","s","d","s","e","p","w","u","u","z","c",
"z","c","k","s","w","f","g","z","r","s","e","j","g","w","t","s","r","z","u","z","e","s",
"w","f","s","w","v","k","z","t","s","u","v","z","e","g","z","f","s","r","z","b","p","w",
"s","s","w","u","z","e","j","r","g","h","k","c","z","e","s","u","s","v","v","k","g","w",
"s","e","z","p","f","g","w","g","c","k","v","z","e","z","f","r","z","d","s","e","t","s",
"u","d","g","f","g","z","u","z","g","j","v","k","g","w","t","s","u","z","k","q","x","p",
"k","s","r","t","z","z","a","s","r","f","q","z","u","s","f","s","b","k","y","z","y","s",
"v","y","g","j","a","u","k","v","z","p","w","z","v","z","r","f","z","z","f","r","z","d",
"s","e","t","s","p","w","z","j","z","b","k","w","z","l","s","a","t","s","z","j","g","o",
"g","z","e","p","v","z","p","e","z","e","p","e","v","r","k","f","z","s","w","w","g","c",
"a","r","s","t","s","u","g","e","v","k","w","v","g","v","g","w","t","s","w","z","t","g",
"e","s","w","s","e","f","s","v","z","e","g","s","u","c","k","e","c","g","o","z","n","z",
"k","s","q","e","z","a","k","z","b","z","g","w","k","z","z","v","k","w","f","g","r","i",
"z","k","f","q","g","t","r","k","b","p","s","q","o","k","r","s","w","z","a","z","u","s",
"f","z","p","w","t","k","z","t","s","e","j","p","s","e","t","s","u","z","w","g","f","k",
"n","k","v","z","v","k","g","w","t","s","u","n","z","u","u","g","t","s","u","r","k","a",
"p","w","z","u","p","j","r","s","c","g","x","p","s","y","z","r","s","a","z","m","z","t",
"g","t","s","t","k","s","q","z","e","s","k","e","z","w","g","e","o","c","s","t","k","g",
"e","p","v","g","w","t","s","w","z","o","u","z","t","s","k","s","q","e","z","a","k","z",
"b","z","o","t","s","g","v","y","g","z","e","s","k","e","z","w","g","e","u","z","e","t",
"s","u","r","s","e","f","g","t","s","s","w","v","z","p","e","z","t","g","e","u","u","k",
"t","s","r","t","s","u","z","z","w","f","k","b","p","z","z","f","z","e","p","w","z","r",
"s","e","j","g","w","e","z","a","k","u","k","q","z","t","s","u","z","e","s","w","f","s",
"w","v","k","z","z","u","g","e","s","w","s","c","k","b","g","e","t","s","u","z","j","z",
"q","s","w","f","r","s","u","g","e","x","p","s","v","k","f","z","z","u","j","r","s","e",
"k","t","s","w","f","s","t","s","u","g","a","k","s","r","w","g","z","r","k","z","w","g",
"z","m","g","o","z","u","e","s","v","r","s","f","z","r","k","g","b","s","w","s","r","z",
"u","t","s","u","u","n","r","s","t","g","s","r","s","q","p","a","z","u","v","z","a","z",
"o","z","u","j","r","s","e","k","t","s","w","f","s","t","s","u","d","z","e","v","g","w",
"f","g","w","k","g","z","e","z","b","g","k","f","k","f","s","b","k","e","g","e","f","k",
"s","w","s","x","p","s","s","e","f","g","e","t","k","r","k","b","s","w","f","s","e","j",
"g","u","k","f","k","v","g","e","e","s","g","j","g","w","s","w","z","u","z","j","z","q",
"j","g","r","x","p","s","w","g","f","k","s","w","s","w","z","b","s","w","t","z","j","z",
"r","z","s","u","u","z","o","e","s","e","s","w","f","k","z","w","v","g","c","g","t","k",
"e","k","c","z","c","s","w","f","s","k","w","e","f","z","u","z","t","g","e","s","w","s",
"u","s","e","x","p","s","c","z","z","w","f","k","f","s","r","r","g","r","k","e","f","z",
"x","p","s","u","s","e","j","s","r","c","k","f","k","z","g","v","p","u","f","z","e","p",
"d","s","r","t","z","t","s","r","z","w","z","f","p","r","z","u","s","q","z","z","w","f",
"k","t","s","c","g","v","r","z","f","k","v","z","r","s","j","z","r","s","c","g","e","v",
"g","w","t","s","u","s","k","f","s","u","z","c","z","e","r","s","n","k","w","z","t","z",
"t","s","u","z","e","r","s","e","j","p","s","e","f","z","e","t","s","c","g","v","r","z",
"f","k","v","z","e","y","z","b","z","c","g","e","x","p","s","j","g","r","j","r","k","c",
"s","r","z","d","s","q","s","w","u","z","y","k","e","f","g","r","k","z","s","u","k","w",
"t","s","j","s","w","t","s","w","f","k","e","c","g","t","k","e","j","p","f","s","v","g",
"w","z","u","f","z","e","j","g","e","k","a","k","u","k","t","z","t","s","e","t","s","z",
"u","v","z","w","q","z","r","u","z","d","k","v","f","g","r","k","z","u","z","e","j","r",
"g","h","k","c","z","e","s","u","s","v","v","k","g","w","s","e","d","z","e","v","g","w",
"b","z","t","z","e","y","z","j","r","g","j","p","s","e","f","g","s","u","t","k","r","k",
"b","s","w","f","s","z","a","s","r","f","q","z","u","s","s","w","v","z","r","v","s","u",
"z","t","g","s","w","u","z","j","r","k","e","k","g","w","t","s","g","b","r","g","w","g")

Se trata de una cadena de 1144 caracteres que, aparentemente, encerraban algún tipo de mensaje. De hecho, era probable que se tratase de un mensaje codificado con una técnica que, dicen, ya empleaba Julio César en la campaña de las Galias y que describí en otra ocasión: a saber, mediante una permutación de letras.

Grandes avances criptográficos... según El País

Apenas sé de criptografía y no es un tema que me interese demasiado. Sin embargo leí un artículo en El País de la semana pasada titulado Desvelado el significado oculto del ‘Copiale Cipher’. Se refiere a un libro que contenía los estatutos de cierta secta masónica de mediados del siglo XVIII. Y dice textualmente .

Aunque el artículo habla principalmente de la masonería, las normas, la historia del manuscrito y otras lindezas, describe brevemente la técnica de desencriptación: