설명
하드코딩된 암호화 키 사용(Use of Hardcoded Cryptographic Key)은 암호화 키를 소스 코드에 직접 포함하는 취약성입니다. 이는 소스 코드가 유출될 경우 심각한 보안 위험을 초래할 수 있습니다. 암호화 키가 하드코딩되면, 키를 변경하기 어렵고 여러 시스템에서 동일한 키를 사용하게 되어 보안이 약화됩니다.
잠재적 영향
- 키 유출: 하드코딩된 키가 유출되어 공격자가 암호화된 데이터를 복호화할 수 있습니다.
- 데이터 유출: 민감한 데이터가 공격자에게 노출될 수 있습니다.
- 보안 약화: 동일한 키를 여러 시스템에서 사용하면 전체 보안이 약화됩니다.
해결 방법
- 환경 변수 사용: 암호화 키를 소스 코드에 하드코딩하지 않고 환경 변수로 설정합니다.
- 안전한 키 관리: 암호화 키는 안전하게 저장하고 접근을 제한합니다.
- 보안 라이브러리 사용: 검증된 보안 라이브러리를 사용하여 암호화 키를 안전하게 관리합니다.
노출된 키는 교체하세요. 다음 예시는 키를 가져오는 방식에 초점을 둡니다. CBC에는 별도의 인증 보호가 필요하며, 실제 설계에서는 인증된 암호화를 우선 고려하세요.
예시
AES encryption
변경 전
python
# Unsafe AES encryption (hardcoded key)
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
cipher = AES.new(b'This is a key123', AES.MODE_CBC) # 하드코딩된 키
plaintext = b'This is a secret message.'
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
변경 후
python
# Safe AES encryption (key from environment variable)
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
key = os.environ['ENCRYPTION_KEY'].encode() # 환경 변수에서 키 가져오기
cipher = AES.new(key, AES.MODE_CBC)
plaintext = b'This is a secret message.'
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
설명
- 변경 전: 암호화 키가 하드코딩되어 있어 키 유출 시 심각한 보안 위험이 있습니다.
- 변경 후: 환경 변수에서 키를 가져와 암호화에 사용하여 키 유출 위험을 줄입니다.
RSA encryption
변경 전
python
# Unsafe RSA encryption (hardcoded private key)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 공개된 문서 예제용 키: 실제 시스템에서 사용하지 마세요.
private_key = RSA.import_key('''-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAsyDriTGA+qrcwgMnd8+ax64xbWYiaxv0pMFuvolq742Zw+x1
dCw27Cotr+VjoymdHNAmxefWNvxOd32CIHmSv5cN6I+UbodLxjp0vLBrsa7krIs7
zD+m4EL6Ebu25YNJkYVFMkqvLBXRZlj41LZY8CQr1LOKXq/NIKhSSmEjKSgtGZnS
zETsi6gKwKp9LEsPGtlylh52+psI6zimj2sVAd/Wz6RoenAZ8K4i43Nto3VmjmtJ
hctt0nwnvIYaLKBOC6rs+XTfZDhaDKbUwoOCzPf8F5O4i5LbdQh8D/n05uk7kanB
yo7CSMW6RKUuR/upxanu7iRrfSNC5dWbknQuDQIDAQABAoIBAFBO5ApgHVlEnTCG
RX2bn+MCH7rSXX/zypzK9CGMblrz+woxyv7Ii98Zkd4YU7FlCMFQOPHlXM7OE0fT
BzIUD0zCJkQrivp6wegfcRLfbYj9xhvtWGPb7a8BmCe3JuqDD8qkGz/O5/Y12emu
3fBPyFPxg40a6WBGJQsNK8eZATCDx//RsksJUmEuKlZ4qiDKO7P7+x1tfN9oWl8x
qkINbCRplM139lUnFTUJmLDGricM45y98Dd8kfgtBa66cznAibpVScWJYJbwgyT3
H1k70uST3vaSdvP+tWsb4AR/IdxhpUXGvh64OfpjfVMg+Rol7jPfkiV10hJBrS13
bX0vyakCgYEAxX+NcZp5by1MKgP/FHH/Nn+uLB4DBTMN2Eq9/LAA3rd6uW0659ed
HdTiD7l6L1uij0W7I7jB9Q5DFWKaAbLzdkkezH9yK3gV4m+RfWpRNjiQ+d4j39pb
Wz1lmMOYeQKORA/+avSCSmuSEcsLZpp9t5NA/ZIqfkY8ZnMH6B+nNXMCgYEA6DBh
yB8Q0GFDpJztwrxiWxHo+oQXPgR+5yEmVAlYACaNiBt3N9tbpqKB+8IR7WSi8xS/
BVMV5qVjas5TB3vJJYXhQAtvVUfw0iTy3txOs6qPpjaREFiBfsXIiO0AElB34QPb
J/LMSJU9Egi7djP9z/UOZieCCtZdsQOJGvgCLn8CgYEAxRUXGdGT8pzaT2czibyE
eGcLcNz2GJ8s5rUXR+x+wcGIxzc4PBlOoXFJsXVed5nS63QjXm9Fpfx4dwOxOZbR
Gy22fU2EqdooxJCfN+77Yccq7R1+4SiuV6s6EirFoaQqQcNQGH0s84TK+9SJ6Pas
E5/vj9rnaqE+LuIFdt73Zf8CgYEAjhY1cEqadnpe85hY40d3BPYD1XIJ6xjDM9uU
Ye7J3GW7TKRKI3NoNaPS2Waco+Jm2UxDzRVYHKnvGcgjBTxaDk1MV23n9o8srtyP
h5PX0Zi5iWRxB0iyDgsouaoW1h5KDffXIC4zluNE2Qlg9mfAlYcIBbl9mfYupYld
WJSWeS8CgYBx+B5Nm9LGajLalADzuoBie7q+SpIxuOMekX3P5kUWva6RkLrx7SQK
+9T251RMzP3As3OnGCToiXn4mpGFSIy4yK4SxN4NCd+ZZJHs/hSzQLn5K3rkNJP/
bpfhw/iskUP1xeLZjp+yBRCmTGWN+HKf2B3/wCa2fQjIh+TeLB5SHg==
-----END RSA PRIVATE KEY-----''')
cipher = PKCS1_OAEP.new(private_key)
ciphertext = cipher.encrypt(b'This is a secret message.')
변경 후
python
# Safe RSA encryption (private key from environment variable)
import os
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
private_key = RSA.import_key(os.environ['PRIVATE_KEY']) # 환경 변수에서 키 가져오기
cipher = PKCS1_OAEP.new(private_key)
ciphertext = cipher.encrypt(b'This is a secret message.')
설명
- 변경 전: RSA 개인 키가 하드코딩되어 있어 키 유출 시 심각한 보안 위험이 있습니다.
- 변경 후: 환경 변수에서 키를 가져와 암호화에 사용하여 키 유출 위험을 줄입니다.