파이썬을 사용한 대칭키 및 공개키 암호화 방법론

소개

암호화는 정보 보호에 핵심적인 역할을 하는 기술로, 데이터의 안전한 전송 및 저장을 가능하게 합니다. 대칭키 및 공개키 암호화는 가장 많이 사용되는 암호화 방식 중 일부입니다. 이번 글에서는 파이썬을 사용하여 이러한 방법론을 소개하겠습니다.

대칭키 암호화

대칭키 암호화는 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 방식입니다. 암호화된 데이터를 복호화하려면 동일한 키가 필요합니다. 대칭키 암호화의 가장 큰 장점은 처리 속도가 빠르다는 것입니다. 대표적인 대칭키 암호화 알고리즘으로는 AES와 DES가 있습니다.

import hashlib
from Crypto.Cipher import AES

def encrypt(data, key):
    key = hashlib.sha256(key.encode()).digest() # 키 해싱
    cipher = AES.new(key, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(data.encode())
    return ciphertext

def decrypt(ciphertext, key):
    key = hashlib.sha256(key.encode()).digest() # 키 해싱
    cipher = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
    data = cipher.decrypt(ciphertext)
    return data.decode()

공개키 암호화

공개키 암호화는 복잡한 수학적 계산을 기반으로 하며, 암호화와 복호화를 위한 서로 다른 두 개의 키를 사용합니다. 암호화에 사용한 키는 공개키로, 복호화에 사용한 키는 개인키로 알려져 있어야 합니다. 공개키는 모든 사람에게 공개되어 있으므로, 누구나 데이터를 암호화할 수 있습니다. 개인키는 암호화된 데이터를 복호화하는데 사용되므로 반드시 보안이 유지되어야 합니다. 대표적인 공개키 암호화 알고리즘으로는 RSA가 있습니다.

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

def generate_keys():
    key = RSA.generate(2048)
    private_key = key.export_key()
    public_key = key.public_key().export_key()
    return private_key, public_key

def encrypt(data, public_key):
    key = RSA.import_key(public_key)
    cipher = PKCS1_OAEP.new(key)
    ciphertext = cipher.encrypt(data.encode())
    return ciphertext

def decrypt(ciphertext, private_key):
    key = RSA.import_key(private_key)
    cipher = PKCS1_OAEP.new(key)
    data = cipher.decrypt(ciphertext)
    return data.decode()

결론

대칭키 및 공개키 암호화 방법론은 중요한 데이터의 보안을 위해 많이 사용되는 기술입니다. 대칭키 암호화는 처리 속도가 빠르지만, 키를 안전하게 공유해야 한다는 단점이 있습니다. 공개키 암호화는 키 관리가 상대적으로 쉽지만, 처리 속도가 느린 편입니다. 실제로는 이 두 가지 방식을 조합하여 사용하는 경우가 많습니다. 암호화 기술은 계속 발전하고 있으며, 개발자들은 보안 요구에 맞게 적절한 암호화 방법을 선택하고 사용해야 합니다. 파이썬의 다양한 암호화 라이브러리를 활용하여 보안성 높은 솔루션을 개발할 수 있습니다.

References