암호화 방식의 분류 블록암호

2024. 12. 12. 01:52Linux*security/보안

반응형

 


현대 암호통신 모델의 주요 개념

  1. Hash Function (해시 함수)
    • 입력 데이터를 고정 길이의 해시 값으로 변환하는 함수.
    • 데이터 무결성 검증 및 디지털 서명 등에 사용.
    • 예: SHA-256, MD5.
  2. Random Number Generator (난수 생성기)
    • 예측할 수 없는 난수를 생성하여 암호 키, 초기 벡터 등을 만듦.
    • 보안의 핵심 요소로 사용.
  3. Public-Key Cryptographic Algorithm (공개키 암호화 알고리즘)
    • 공개키와 비밀키를 사용하여 데이터를 암호화/복호화하는 알고리즘.
    • 주요 용도: 키 교환, 디지털 서명.
    • 예: RSA, ECC.
  4. Key Agreement Protocol (키 교환 프로토콜)
    • 두 개체가 안전하게 공통 암호 키를 공유하기 위한 프로토콜.
    • 예: Diffie-Hellman, ECDH.
  5. Symmetric-Key Cryptographic Algorithm (대칭키 암호화 알고리즘)
    • 동일한 키를 사용하여 데이터를 암호화하고 복호화.
    • 주요 용도: 데이터 암호화.
    • 예: AES, DES.
  6. Plaintext (평문)과 Ciphertext (암호문)
    • 평문 P: 암호화 전의 원본 데이터.
    • 암호문 C: 암호화 후의 데이터.
    • Encryption: 평문을 암호문으로 변환.
    • Decryption: 암호문을 평문으로 복원.
  7. Authentication (인증)
    • 데이터의 출처를 확인하고 무결성을 검증.
    • 메시지 인증 코드 (MAC): 대칭키를 사용하여 생성된 인증 태그로 데이터 무결성 확인.
  8. Key Sharing (키 공유)
    • 키 K: 데이터를 암호화/복호화하는 데 사용되는 비밀 값.
    • 키 공유 프로토콜은 안전한 키 전송을 보장.
  9. Authentication Tag (인증 태그)
    • 메시지 무결성 및 출처 확인을 위해 생성된 코드.
    • 생성에 대칭키 암호화와 해시 함수가 결합될 수 있음.

암호통신 모델의 일반적 흐름

  1. 송신자는 난수 생성기로 키를 생성.
  2. 키 교환 프로토콜로 수신자와 키 공유.
  3. 평문 P대칭키 암호화 알고리즘으로 암호화하여 암호문 C 생성.
  4. 송신자는 MAC 또는 인증 태그로 메시지 무결성을 확인.
  5. 수신자는 암호문과 인증 태그를 복호화하여 평문과 메시지의 무결성을 검증.

 

 

 

블록 암호의 개념 및 원리

블록 암호는 데이터를 일정한 크기의 블록 단위로 나누어 암호화하는 대칭키 기반 암호화 방식이다. 


블록 암호의 원리

블록 암호는 암호화 과정을 통해 원문(평문)의 내용을 숨기고, 복호화를 통해 다시 복원할 수 있도록 설계된다. 암호의 안전성을 보장하기 위해 두 가지 주요 원칙인 혼돈(Confusion)과 확산(Diffusion)을 기반으로 작동한다.

1. 혼돈(Confusion)

  • 목적: 평문의 내용과 암호문의 관계를 복잡하게 만들어 암호 해독을 어렵게 함.
  • 방법: 치환(Substitution)
    • 평문 문자를 다른 문자로 대체.
    • 단순히 치환하여 원문의 내용을 추론하기 어렵게 만듦.
    • 예: 특정 키 값을 사용하여 문자나 비트를 매핑하는 방식.

2. 확산(Diffusion)

  • 목적: 알고리즘의 패턴을 추론하기 어렵게 하고, 평문의 구조가 암호문에 반영되지 않도록 함.
  • 방법: 전치(Transposition)
    • 평문 문자의 순서를 재배열하여 암호화.
    • 입력 데이터의 특정 비트 변화가 출력 전체에 영향을 미치도록 설계.
    • 예: 블록의 비트 위치를 교환하거나 이동.

혼돈과 확산의 결합

  • 블록 암호 알고리즘은 혼돈(치환)과 확산(전치)을 반복적으로 적용하여 높은 수준의 보안을 제공.
  • 대표적인 블록 암호 알고리즘:
    • DES (Data Encryption Standard)
    • AES (Advanced Encryption Standard)

블록 암호의 암호화/복호화 과정

  1. 입력 데이터 블록화
    • 데이터를 고정된 크기(예: 64비트 또는 128비트)의 블록으로 분할.
  2. 라운드 반복
    • 혼돈(치환)과 확산(전치)을 여러 번 반복하여 보안 강화.
    • 각 라운드에서 키와의 조합(라운드 키) 사용.
  3. 출력 생성
    • 암호화된 블록 데이터를 연결하여 암호문 생성.
    • 복호화는 암호화 과정을 역순으로 수행.
    •  
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os

# 고정된 크기의 블록(예: 16바이트 = 128비트)
BLOCK_SIZE = 16  # AES의 블록 크기 (128비트)

# 암호화 함수
def encrypt_aes(plaintext, key):
    """
    AES 암호화 함수
    :param plaintext: 평문 (str)
    :param key: 암호화 키 (bytes, 16/24/32 바이트)
    :return: 암호문 (bytes)
    """
    cipher = AES.new(key, AES.MODE_ECB)  # AES ECB 모드 생성
    padded_plaintext = pad(plaintext.encode(), BLOCK_SIZE)  # 평문 패딩
    ciphertext = cipher.encrypt(padded_plaintext)  # 암호화 수행
    return ciphertext

# 복호화 함수
def decrypt_aes(ciphertext, key):
    """
    AES 복호화 함수
    :param ciphertext: 암호문 (bytes)
    :param key: 암호화 키 (bytes, 16/24/32 바이트)
    :return: 평문 (str)
    """
    cipher = AES.new(key, AES.MODE_ECB)  # AES ECB 모드 생성
    decrypted_data = cipher.decrypt(ciphertext)  # 복호화 수행
    plaintext = unpad(decrypted_data, BLOCK_SIZE)  # 패딩 제거
    return plaintext.decode()

# 테스트
if __name__ == "__main__":
    # 키 생성 (16바이트 = 128비트)
    key = os.urandom(16)
    print(f"Key: {key.hex()}")

    # 암호화할 데이터
    plaintext = "This is a secret message."
    print(f"Plaintext: {plaintext}")

    # 암호화
    encrypted = encrypt_aes(plaintext, key)
    print(f"Ciphertext (hex): {encrypted.hex()}")

    # 복호화
    decrypted = decrypt_aes(encrypted, key)
    print(f"Decrypted text: {decrypted}")

 

 

 


특징과 활용

  • 특징:
    • 고속 암호화/복호화 가능.
    • 데이터 무결성과 보안을 동시에 보장.
  • 활용:
    • 네트워크 통신 보안 (HTTPS, VPN).
    • 데이터 저장 보안 (디스크 암호화).
    • 전자 서명 및 인증 시스템.

 

반응형

'Linux*security > 보안' 카테고리의 다른 글

Spoofing 01 - TCP Server 구현  (0) 2024.11.30