컴퓨터보안

Substitution Cipher

으엉어엉 2024. 9. 11. 11:42
728x90
alphabet = "abcdefghijklmnopqrstuvwxyz"
key="fcpevqkzgmtrayonujdlwhbxsi"

def encrypt(text, key):
  result = ""  # 암호문을 저장할 빈 문자열
  for letter in text:
    if letter.lower() in alphabet:  # 입력된 글자가 알파벳에 포함되는 경우
      # alphabet에서 해당 글자의 인덱스를 찾고, key에서 같은 인덱스의 글자를 찾아 암호문에 추가
      result += key[alphabet.find(letter.lower())]
    else:  # 알파벳에 포함되지 않는 경우
      result += letter  # 그대로 추가
  return result

msg = input("plaintext: ")  # 입력을 받는 부분을 함수 밖으로 이동
print(encrypt(msg,key))

 

메시지의 각 문자를 다른 문자로 교체하여 암호화하는 방식이다.

문자가 다른 문자로 대응이 되며 이를 통해 암호화한다.

운영 방식

Substitution Cipher는 보통 다음의 두 가지 방식으로 운영됩니다:

  1. 단일 치환 암호 (Simple Substitution Cipher):
    • 알파벳의 각 문자를 고정된 다른 문자로 바꾸는 방식
    • 예를 들어, 'A'는 'F'로, 'B'는 'C'로 바뀌는 식으로 고정된 대응표(키)를 사용하여 변환한다
    • 알파벳이 26자로 이루어져 있는 영어의 경우, 모든 문자가 각각 고유한 다른 문자에 치환된다.
    • 치환표(key)는 문자 집합을 무작위로 섞어 만들 수도 있고, 특정 규칙에 의해 설정할 수도 있다.

     
  2. 다중 치환 암호 (Polyalphabetic Substitution Cipher):
    • 여러 개의 치환 알파벳을 번갈아 가면서 사용하는 방식이다.
    • 유명한 비즈네르 암호(Vigenère Cipher)가 대표적인 다중 치환 암호로, 다양한 치환표를 사용하여 암호화 강도를 높이는 방식이다.
    • 예를 들어, 한 문장은 첫 번째 알파벳 집합을 사용해 변환하고, 그다음 문장은 두 번째 알파벳 집합을 사용해 변환하는 방식이다.

 

def vigenere(message, key):
    message = message.lower()
    message = message.replace(' ', '')
    m = len(key)
    cipher_text = ''
    for i in range(len(message)):
        letter = message[i]
        k = key[i % m]
        cipher_text = cipher_text + chr(((ord(letter) - 97 + k) % 26) + 97)
    return cipher_text

msg = input("plaintext: ")
key = input("key: ")

key = [ord(letter) - 97 for letter in key]
ciphertext = vigenere(msg, key)
print('cipher text: ', ciphertext)

key = [-1 * k for k in key]
plaintext = vigenere(ciphertext, key)
print('Plain text: ', plaintext)

 

장점

  1. 단순성과 직관성: Substitution Cipher는 암호화와 복호화가 직관적이고 구현이 간단하다. 단일 치환 암호에서는 고정된 치환표만 있으면 바로 암호화할 수 있다.
  2. 다양한 치환 가능성: 각 문자에 고유하게 대응하는 암호문자를 설정할 수 있는 치환 방식이므로, 치환표의 경우의 수가 매우 많다. 영어 알파벳의 경우, 가능한 치환표의 경우의 수는 26!26!(팩토리얼)로, 이는 매우 큰 숫자이다.
  3. 어느 정도의 보안성 제공: 단순한 문자 교체로 이루어지기 때문에 기본적인 전송 보안에는 도움을 줄 수 있습니다. 또한, 다중 치환 암호는 단일 치환 암호보다 패턴이 적어 보안이 더 강력하다.

단점

  1. 빈도 분석에 취약: 단일 치환 암호의 가장 큰 약점은 빈도 분석에 취약하다는 점입니다. 각 문자가 고정된 문자로 치환되므로, 암호화된 메시지에서 가장 빈번하게 등장하는 문자를 찾아 그 문자가 원문에서 자주 등장하는 문자와 일치하는지 비교해 암호를 해독할 수 있다.
    • 예를 들어, 영어에서 가장 많이 쓰이는 문자는 'E'이며, 이를 통해 'E'에 대응되는 문자를 찾아 복호화할 수 있다.
  2. 치환표 노출 시 보안이 무력화됨: 치환표(key)가 한 번 노출되면 암호화된 모든 메시지를 쉽게 복호화할 수 있습니다. 즉, 암호화의 보안성이 치환표에 의존적이다.
  3. 복호화가 어려움: 치환표가 없을 경우, 원문을 복원하기가 매우 어렵다. 특히 다중 치환 암호의 경우, 여러 개의 치환표가 사용되므로 복호화가 더 복잡해진다.
  4. 문자 패턴 보존: Substitution Cipher는 글자의 패턴을 보존하는 특성이 있다. 즉, 같은 문자가 암호문에서도 같은 문자로 치환되기 때문에, 반복되는 패턴을 분석하여 해독할 수 있다.
728x90

'컴퓨터보안' 카테고리의 다른 글

Block Cipher  (0) 2024.09.17
아핀 암호  (0) 2024.09.11
Introduction to Computer Security  (0) 2024.09.04