[RSA 알고리즘] Python은 공개 키와 개인 키를 생성합니다.

RSA 알고리즘 개요

RSA 암호화 알고리즘은 1977년 세 명의 수학자 Rivest, Shamir, Adleman이 제안한 비대칭 암호화 알고리즘입니다. 그 보안은 큰 합성수를 두 소수의 곱으로 분해하는 소인수분해 문제를 기반으로 합니다. RSA 알고리즘은 디지털 서명, 키 계약, 데이터 암호화 등의 분야에서 널리 사용됩니다.

RSA 알고리즘의 암호화 및 복호화
암호화 프로세스:
  1. 두 개의 서로 다른 큰 소수 p와 q를 선택하고 그 곱 n=p*q를 계산합니다.
  2. 오일러 함수를 계산합니다. phi(n)=(p-1)*(q-1);
  3. 암호화 인덱스를 선택합니다. e, 1<e<phi(n), e와 phi(n)은 상대적으로 소수입니다.
  4. (d*e) mod phi(n)=1이 되도록 복호화 인덱스 d를 계산합니다.
  5. 일반 텍스트 M을 정수 m으로 변환합니다. 0≤m<n;
  6. 암호문을 얻기 위해 m을 암호화합니다. c=ciphertext, c=m^e mod n.
암호 해독 프로세스:

복호화 인덱스 d와 모듈러스 n을 사용하여 암호문 c를 복호화하여 일반 텍스트 M을 얻습니다. M=c^d mod n.

요구 사항: 5자리 이상의 소수 두 개를 생성하고, 그로부터 공개 키와 개인 키를 생성합니다.

5자리 이상의 소수 두 개를 생성하려면 난수 생성기를 사용하여 생성된 각 숫자가 소수인지 확인하면 됩니다. 예를 들어 Python에서 Random 및 Sympy 라이브러리를 사용하여 이를 달성할 수 있습니다.

import random
from sympy import isprime

# 生成第一个5位以上的素数
p1 = random.randint(10000, 99999)
while not isprime(p1):
    p1 = random.randint(10000, 99999)

# 生成第二个5位以上的素数
p2 = random.randint(10000, 99999)
while not isprime(p2) or p2 == p1:
    p2 = random.randint(10000, 99999)

# 计算n和phi_n
n = p1 * p2
phi_n = (p1 - 1) * (p2 - 1)

# 找到满足条件的公钥e
e = 65537
while phi_n % e == 0 or not isprime(e):
    e += 2

# 计算私钥d
d = pow(e, -1, phi_n)

# 输出结果
print("第一个素数:", p1)
print("第二个素数:", p2)
print("公钥:({0}, {1})".format(n, e))
print("私钥:({0}, {1})".format(n, d))

공개 키는 모듈러스 n과 암호화 지수 e로 구성되며, 개인 키는 모듈러스 n과 복호화 지수 d로 구성됩니다. 이 과정에서 오일러의 정리를 이용하여 RSA 암호화 알고리즘의 중요한 속성인 phi_n 값을 계산하였습니다.

Supongo que te gusta

Origin blog.csdn.net/weixin_52049271/article/details/130765860
Recomendado
Clasificación