비대칭키, 대칭키 암호화

2024. 3. 21. 03:28·여러가지/이것저것

대칭키 암호화(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
'여러가지/이것저것' 카테고리의 다른 글
  • JWT란
  • 단방향 암호화
  • 동기와 비동기
  • 컨텍스트 스위칭이란?
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    DP
    백준
    프로그래머스
    AWS
    그리디
    자바
    OOP
    celery
    WebFlux
    mybatis
    시험
    Redis
    EC2
    docker
    파이썬
    Docker-compose
    ecs
    완전탐색
    SAA
    취업리부트
    항해99
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    Spring WebFlux
    spring
    FastAPI
    Spring Boot
    reactor
    RDS
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
비대칭키, 대칭키 암호화
상단으로

티스토리툴바