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는 보통 다음의 두 가지 방식으로 운영됩니다:
- 단일 치환 암호 (Simple Substitution Cipher):
- 알파벳의 각 문자를 고정된 다른 문자로 바꾸는 방식
- 예를 들어, 'A'는 'F'로, 'B'는 'C'로 바뀌는 식으로 고정된 대응표(키)를 사용하여 변환한다
- 알파벳이 26자로 이루어져 있는 영어의 경우, 모든 문자가 각각 고유한 다른 문자에 치환된다.
- 치환표(key)는 문자 집합을 무작위로 섞어 만들 수도 있고, 특정 규칙에 의해 설정할 수도 있다.
- 다중 치환 암호 (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)
장점
- 단순성과 직관성: Substitution Cipher는 암호화와 복호화가 직관적이고 구현이 간단하다. 단일 치환 암호에서는 고정된 치환표만 있으면 바로 암호화할 수 있다.
- 다양한 치환 가능성: 각 문자에 고유하게 대응하는 암호문자를 설정할 수 있는 치환 방식이므로, 치환표의 경우의 수가 매우 많다. 영어 알파벳의 경우, 가능한 치환표의 경우의 수는 26!26!(팩토리얼)로, 이는 매우 큰 숫자이다.
- 어느 정도의 보안성 제공: 단순한 문자 교체로 이루어지기 때문에 기본적인 전송 보안에는 도움을 줄 수 있습니다. 또한, 다중 치환 암호는 단일 치환 암호보다 패턴이 적어 보안이 더 강력하다.
단점
- 빈도 분석에 취약: 단일 치환 암호의 가장 큰 약점은 빈도 분석에 취약하다는 점입니다. 각 문자가 고정된 문자로 치환되므로, 암호화된 메시지에서 가장 빈번하게 등장하는 문자를 찾아 그 문자가 원문에서 자주 등장하는 문자와 일치하는지 비교해 암호를 해독할 수 있다.
- 예를 들어, 영어에서 가장 많이 쓰이는 문자는 'E'이며, 이를 통해 'E'에 대응되는 문자를 찾아 복호화할 수 있다.
- 치환표 노출 시 보안이 무력화됨: 치환표(key)가 한 번 노출되면 암호화된 모든 메시지를 쉽게 복호화할 수 있습니다. 즉, 암호화의 보안성이 치환표에 의존적이다.
- 복호화가 어려움: 치환표가 없을 경우, 원문을 복원하기가 매우 어렵다. 특히 다중 치환 암호의 경우, 여러 개의 치환표가 사용되므로 복호화가 더 복잡해진다.
- 문자 패턴 보존: Substitution Cipher는 글자의 패턴을 보존하는 특성이 있다. 즉, 같은 문자가 암호문에서도 같은 문자로 치환되기 때문에, 반복되는 패턴을 분석하여 해독할 수 있다.
728x90
'컴퓨터보안' 카테고리의 다른 글
Block Cipher (0) | 2024.09.17 |
---|---|
아핀 암호 (0) | 2024.09.11 |
Introduction to Computer Security (0) | 2024.09.04 |