Python을 사용하여 RSA 알고리즘 구현

Dec 09 2022
이 기사에서는 암호화에서 RSA 알고리즘이 실제로 무엇인지 설명하고 Python을 사용하여 데이터의 암호화 및 암호 해독을 위한 RSA 알고리즘을 구현하는 방법을 보여줍니다. 여기서 데이터는 숫자를 의미합니다.

이 기사에서는 암호화에서 RSA 알고리즘이 실제로 무엇인지 설명하고 Python을 사용하여 데이터의 암호화 및 암호 해독을 위한 RSA 알고리즘을 구현하는 방법을 보여줍니다. 여기서 데이터는 숫자를 의미합니다. 이 알고리즘을 사용하여 암호화 및 암호 해독에 문자열 데이터를 사용할 수도 있습니다.

RSA 알고리즘은 메시지를 암호화하고 해독하는 데 널리 사용되는 방법입니다. 1977년 에 그것을 개발한 제작자 Ron Rivest , Adi ShamirLeonard Adleman 의 이름을 따서 명명되었습니다 . RSA 알고리즘은 큰 숫자를 분해하는 어려움을 기반으로 하며 데이터를 암호화하는 안전한 방법으로 널리 간주됩니다.

RSA 알고리즘의 작동 방식을 이해하려면 먼저 공개 키와 개인 키의 개념을 이해해야 합니다. RSA 알고리즘에서 각 사용자는 공개 키와 개인 키라는 한 쌍의 키를 가지고 있습니다. 공개 키는 사용자에게 메시지를 보내려는 모든 사람이 사용할 수 있으며 메시지를 암호화하는 데 사용됩니다. 개인 키는 비밀로 유지되며 메시지를 해독하는 데 사용됩니다.

다음은 RSA 알고리즘 작동 방식의 예입니다.

  • Gwen이 Peter에게 메시지를 보내고 싶다고 가정해 봅시다. 그녀는 Peter의 공개 키를 찾아 메시지를 암호화하는 데 사용합니다.
  • 암호화된 메시지가 Peter에게 전송됩니다.
  • Peter는 개인 키를 사용하여 메시지를 해독하고 읽습니다.

자세한 작동 방식은 다음과 같습니다.

  • 먼저 그웬과 피터는 두 개의 큰 소수인 p와 q에 동의합니다.
  • 그들은 이 소수를 사용하여 p와 q의 곱인 세 번째 숫자 n을 계산합니다. 이 번호는 공개됩니다.
  • 그들은 또한 n과 서로소인 n보다 작은 양의 정수의 수인 "totient"로 알려진 네 번째 숫자를 계산합니다. 이 번호도 공개됩니다.
  • Gwen과 Peter는 각각 "개인 키"로 알려진 비밀 키를 생성합니다. 이 키는 totient보다 작은 숫자이며 totient와 동일합니다.
  • 그런 다음 개인 키를 사용하여 공개 키를 계산합니다. 이는 상대적으로 소수인 숫자입니다. 이 공개 키는 사용자에게 메시지를 보내려는 모든 사람이 사용할 수 있습니다.

RSA 알고리즘에는 몇 가지 장점이 있습니다. 구현이 비교적 간단하고 안전한 데이터 암호화 방법으로 간주되기 때문에 널리 사용됩니다. 또한 RSA 알고리즘은 "공개 키" 알고리즘이므로 암호화 및 암호 해독에 사용되는 키가 다릅니다. 이를 통해 사용자는 비밀 키를 교환하지 않고도 통신할 수 있습니다.

요약하면 RSA 알고리즘은 메시지를 암호화하고 해독하는 데 널리 사용되는 방법입니다. 큰 숫자를 인수분해하는 것의 어려움을 기반으로 하며 데이터를 암호화하는 안전한 방법으로 간주됩니다. 단순성과 공개 키 및 개인 키 사용을 포함하여 몇 가지 장점이 있습니다.

전체 RSA 알고리즘은 간단히 말해서,

  1. p , q 선택 ( pq 는 모두 소수이고 p 는 q 와 같지 않음 )
  2. n = p * q 계산
  3. totient 계산, t = (p -1) * (q — 1)
  4. gcd(t, e) = 1 을 사용하여 e 를 선택 합니다 . 여기서 1 < e < t
  5. (d * e % t = 1) 을 사용하여 d 를 계산 합니다.
  6. e공개 키로 , d개인 키로 간주 하십시오.
  7. 암호화의 경우 Cipher Text = (Message ^ e) % n (여기서 Message < n)
  8. 암호 해독의 경우 Message = (Cipher Text ^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

유용하다고 생각되면 친구와 공유하고 팔로우하는 것을 잊지 마세요.

그때까지 다른 블로그에서 만나요 안녕