Hakowanie szyfru RSA
Hakowanie szyfru RSA jest możliwe w przypadku małych liczb pierwszych, ale jest uważane za niemożliwe, jeśli jest używany z dużymi liczbami. Powody, które określają, dlaczego hakowanie szyfru RSA jest trudne, są następujące:
Atak siłowy nie zadziała, ponieważ istnieje zbyt wiele możliwych kluczy do przepracowania. Ponadto zajmuje to dużo czasu.
Atak słownikowy nie zadziała w algorytmie RSA, ponieważ klucze są numeryczne i nie zawierają żadnych znaków.
Analiza częstotliwości znaków jest bardzo trudna do prześledzenia, ponieważ pojedynczy zaszyfrowany blok reprezentuje różne znaki.
Nie ma konkretnych matematycznych sztuczek do zhakowania szyfru RSA.
Równanie deszyfrowania RSA to -
M = C^d mod n
Za pomocą małych liczb pierwszych możemy spróbować zhakować szyfr RSA, a przykładowy kod tego samego jest wymieniony poniżej -
def p_and_q(n):
data = []
for i in range(2, n):
if n % i == 0:
data.append(i)
return tuple(data)
def euler(p, q):
return (p - 1) * (q - 1)
def private_index(e, euler_v):
for i in range(2, euler_v):
if i * e % euler_v == 1:
return i
def decipher(d, n, c):
return c ** d % n
def main():
e = int(input("input e: "))
n = int(input("input n: "))
c = int(input("input c: "))
# t = 123
# private key = (103, 143)
p_and_q_v = p_and_q(n)
# print("[p_and_q]: ", p_and_q_v)
euler_v = euler(p_and_q_v[0], p_and_q_v[1])
# print("[euler]: ", euler_v)
d = private_index(e, euler_v)
plain = decipher(d, n, c)
print("plain: ", plain)
if __name__ == "__main__":
main()
Wynik
Powyższy kod daje następujące dane wyjściowe -