[파이썬] 파이썬 라이브러리를 활용한 암호화 및 디지털 서명

암호화와 디지털 서명은 개인 정보와 데이터의 보안을 확보하는 중요한 기술입니다. 이를 위해 현대적인 솔루션으로는 암호화 라이브러리를 이용하는 방법이 많이 사용됩니다. 이번 포스트에서는 파이썬에서 암호화 및 디지털 서명을 위한 라이브러리를 활용하는 방법에 대해 알아보겠습니다.

암호화

일반적으로 데이터를 암호화하는 방법으로 대칭키 암호화와 공개키 암호화를 사용합니다. 대칭키 암호화에서는 동일한 키를 사용하여 암호화와 복호화를 수행하며, 공개키 암호화에서는 공개키와 개인키를 쌍으로 사용하여 암호화와 복호화를 수행합니다.

대칭키 암호화

대칭키 암호화를 위해 cryptography 라이브러리를 사용할 수 있습니다. 다음은 간단한 대칭키 암호화 예제 코드입니다.

from cryptography.fernet import Fernet

# 키 생성
key = Fernet.generate_key()

# Fernet 객체 생성
cipher_suite = Fernet(key)

# 암호화할 데이터
data = b"암호화할 데이터"

# 데이터 암호화
encrypted_data = cipher_suite.encrypt(data)

# 데이터 복호화
decrypted_data = cipher_suite.decrypt(encrypted_data)

print("암호화된 데이터:", encrypted_data)
print("복호화된 데이터:", decrypted_data)

공개키 암호화

공개키 암호화를 위해 cryptography 라이브러리의 PKCS1 모듈을 사용할 수 있습니다. 다음은 간단한 공개키 암호화 예제 코드입니다.

from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# 개인키 생성
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)

# 공개키 추출
public_key = private_key.public_key()

# 암호화할 데이터
data = b"암호화할 데이터"

# 데이터 암호화
encrypted_data = public_key.encrypt(
    data,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None,
    )
)

# 데이터 복호화
decrypted_data = private_key.decrypt(
    encrypted_data,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None,
    )
)

print("암호화된 데이터:", encrypted_data)
print("복호화된 데이터:", decrypted_data)

디지털 서명

디지털 서명은 데이터의 무결성과 인증을 보장하기 위한 기술입니다. cryptography 라이브러리는 디지털 서명을 위한 다양한 알고리즘을 지원합니다. 다음은 간단한 디지털 서명 예제 코드입니다.

from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding

# 개인키 생성
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)

# 공개키 추출
public_key = private_key.public_key()

# 서명할 데이터
data = b"서명할 데이터"

# 데이터에 대한 해시 생성
digest = hashes.SHA256()
hashed_data = digest.update(data)

# 데이터 서명
signature = private_key.sign(
    hashed_data,
    padding.PSS(
        mgf=padding.MGF1(digest),
        salt_length=padding.PSS.MAX_LENGTH,
    ),
    hashes.SHA256(),
)

# 데이터 인증
try:
    public_key.verify(
        signature,
        hashed_data,
        padding.PSS(
            mgf=padding.MGF1(digest),
            salt_length=padding.PSS.MAX_LENGTH,
        ),
        hashes.SHA256(),
    )
    print("데이터 인증 성공")
except InvalidSignature:
    print("데이터 인증 실패")

암호화 및 디지털 서명은 데이터의 보안을 강화하는데 중요한 역할을 합니다. 파이썬의 cryptography 라이브러리를 이용하면 간단하게 암호화 및 디지털 서명을 구현할 수 있습니다. 위 예제 코드를 참고하여 보다 복잡한 암호화 및 디지털 서명 기능을 구현해보세요!