[python] PyYAML을 사용하여 YAML 파일의 특정 데이터를 암호화하기 (AES, RSA 등)

이번 튜토리얼에서는 PyYAML을 사용하여 YAML 파일에서 특정 데이터를 암호화하는 방법을 살펴보겠습니다. 이를 통해 YAML 파일의 중요한 정보를 보호하고 데이터 보안을 강화할 수 있습니다. 이 예제에서는 AES와 RSA 암호화 알고리즘을 사용하는 방법을 보여줄 것입니다.

AES 암호화

AES(Advanced Encryption Standard) 알고리즘은 대칭형 알고리즘이며, 128, 192 또는 256 비트 키를 사용하여 데이터를 암호화 및 복호화합니다.

아래는 PyYAML 및 Crypto 모듈을 사용하여 YAML 파일의 데이터를 AES로 암호화하는 예제입니다.

import yaml
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

# 암호화 키 (16, 24 또는 32 바이트 여야 함)
key = b'abcdefghijklmnop'

def encrypt_data(data):
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_data = cipher.encrypt(pad(data.encode("utf-8"), AES.block_size))
    return encrypted_data

# YAML 파일 로드
with open("config.yaml", "r") as file:
    yaml_data = yaml.safe_load(file)

# 특정 데이터 암호화
encrypted_secret = encrypt_data(yaml_data["secret"])

# 암호화된 데이터를 YAML 파일에 저장
yaml_data["secret"] = encrypted_secret
with open("config.yaml", "w") as file:
    yaml.dump(yaml_data, file)

위의 코드에서 config.yaml 파일의 "secret" 값을 AES로 암호화하여 다시 파일에 저장합니다.

RSA 암호화

RSA(Rivest–Shamir–Adleman) 알고리즘은 공개키 암호화 방식으로 알려져 있으며, 공개키로 암호화된 데이터는 개인키로만 해독할 수 있습니다.

아래는 PyYAML 및 Crypto 모듈을 사용하여 YAML 파일의 데이터를 RSA로 암호화하는 예제입니다.

import yaml
from Crypto.PublicKey import RSA

# RSA 키 생성
key = RSA.generate(2048)

def encrypt_data(data):
    encrypted_data = key.publickey().encrypt(data.encode("utf-8"), 32)[0]
    return encrypted_data

# YAML 파일 로드
with open("config.yaml", "r") as file:
    yaml_data = yaml.safe_load(file)

# 특정 데이터 암호화
encrypted_secret = encrypt_data(yaml_data["secret"])

# 암호화된 데이터를 YAML 파일에 저장
yaml_data["secret"] = encrypted_secret
with open("config.yaml", "w") as file:
    yaml.dump(yaml_data, file)

위의 코드에서는 RSA 키를 생성하고 config.yaml 파일의 "secret" 값을 RSA로 암호화하여 다시 파일에 저장합니다.

PyYAML을 사용하여 YAML 파일의 데이터를 암호화하는 방법을 살펴보았습니다. 이를 통해 중요한 데이터를 보호하고 데이터 보안을 강화할 수 있습니다. AES와 RSA는 각각 대칭형 및 공개키 암호화를 제공하기 때문에 데이터 보호에 유용합니다.

참고 자료