대칭키 암호화(Symmetric-key encryption)
대칭키 암호화에서는 암호화와 복호화 과정에 동일한 키를 사용합니다. 즉, 송신자와 수신자는 메시지를 안전하게 전송하기 위해 미리 공유된 하나의 비밀 키를 사용합니다. 이 방식의 주요 장점은 처리 속도가 빠르다는 것입니다. 그러나 키를 안전하게 교환하고 관리하는 것이 주요 도전 과제입니다. 대표적인 대칭키 암호화 알고리즘으로는 AES(Avanced Encryption Standard)와 DES(Data Encryption Standard)가 있습니다.
비대칭키 암호화(Asymmetric-key encryption)
비대칭키 암호화에서는 암호화와 복호화 과정에 서로 다른 두 개의 키를 사용합니다. 이 두 키는 일반적으로 공개 키와 개인 키라고 불립니다. 공개 키는 모두에게 공개될 수 있으며, 메시지를 암호화하는 데 사용됩니다. 반면, 개인 키는 메시지를 복호화하는 데 사용되며, 이 키는 비밀로 유지되어야 합니다. 비대칭키 암호화의 주요 장점은 키 교환 문제를 해결할 수 있다는 것입니다. 그러나 대칭키 암호화에 비해 처리 속도가 느립니다. RSA(Rivest-Shamir-Adleman) 알고리즘은 가장 널리 알려진 비대칭키 암호화 방식 중 하나입니다.
요약
- 대칭키 암호화는 암호화와 복호화에 같은 키를 사용합니다. 키 관리가 중요하며, 처리 속도가 빠릅니다.
- 비대칭키 암호화는 암호화에 공개 키를, 복호화에 개인 키를 사용합니다. 키 교환 문제를 해결할 수 있지만, 처리 속도가 상대적으로 느립니다.
코드 예시
파이썬에서 대칭키 암호화와 비대칭키 암호화를 구현하기 위해 cryptography
패키지를 사용할 수 있습니다. 이 패키지는 두 암호화 방식을 모두 지원하며, 안전하고 현대적인 암호화 기능을 제공합니다. 아래는 각각의 암호화 방식을 간단히 구현한 예시입니다.
설치
먼저, cryptography
패키지를 설치해야 합니다.
pip install cryptography
대칭키 암호화(Symmetric-key encryption) 예시
from cryptography.fernet import Fernet
# 키 생성
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# 암호화
text = b"Hello, World!"
cipher_text = cipher_suite.encrypt(text)
print(f"Encrypted: {cipher_text}")
# 복호화
decrypted_text = cipher_suite.decrypt(cipher_text)
print(f"Decrypted: {decrypted_text}")
비대칭키 암호화(Asymmetric-key encryption) 예시
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 키 생성
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 공개 키로 암호화
message = b"Hello, World!"
encrypted = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(f"Encrypted: {encrypted}")
# 개인 키로 복호화
decrypted = private_key.decrypt(
encrypted,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(f"Decrypted: {decrypted}")
이 예시들은 cryptography
라이브러리를 사용하여 파이썬에서 대칭키와 비대칭키 암호화를 구현하는 기본적인 방법을 보여줍니다. 실제 애플리케이션에서 이러한 암호화 기법을 사용할 때는 보안 요구사항에 따라 적절한 키 관리, 오류 처리, 키 갱신 메커니즘 등을 고려해야 합니다.
'여러가지 > 이것저것' 카테고리의 다른 글
JWT란 (0) | 2024.03.21 |
---|---|
단방향 암호화 (0) | 2024.03.21 |
동기와 비동기 (0) | 2024.03.18 |
컨텍스트 스위칭이란? (0) | 2024.03.18 |
Process와 Thread의 차이 (0) | 2024.03.18 |