용어 정리
Plaintext
: 일반문자 (original message)
Ciphertext
: 암호화된 문자 (coded message)
Encryption / Enciphering
: Converting plaintext -> ciphertext
Decryption / Deciphering
: Converting ciphertext -> plaintext
Cryptographic System / Cipher
: a scheme or algorithm
Cryptanalysis
: 암호분석
Key
: 암호화하기 위한 정보로 known only sender / reeciver
Conventional / private-key / single-key
Sender and recipient 은 공동의 Key를 가진다.
📌 All classical encryption algorithms are private-key
Y = EK(X) 또는 Y = E(K, X)
-> E = Encryption, K = key, X = Plaintext, Y = Cipher
암호화 함수 E가 비밀 키 K를 사용하여 평문 X를 암호문 Y로 변환하는 과정.
X = DK(Y) 또는 X = D(K, Y)
-> D = Decryption
복호화 함수 D가 동일한 비밀 키 K를 사용하여 암호문 Y를 원래의 평문 X로 복원하는 과정
동일한 Key를 안전하게 공유하는 방법이 Secure channel을 사용해 Key를 전달한다.
알고리즘의 특성을 활용하여 특정 평문을 추론하거나 사용된 키를 유추하려고 시도
공격자가 가능한 모든 키를 하나씩 시도하여 암호문을 평문으로 변환하려고 시도하는 방식
평균적으로 가능한 모든 키의 절반을 시도해야 성공할 확률이 있다.
- Ciphertext Only
- 오직 암호문만 알고 있는 상태에서 Key or Plaintext를 추출하려고 시도.
- Known Plaintext
- 특정 평문과 해당하는 암호문의 쌍을 알고 있다. 이를 이용해 추가적인 정보를 얻거나 Key를 추출하려고 시도.
- Chosen Plaintext
- 자신이 선택한 평문을 암호화하여 해당 암호문을 얻을 수 있다. 이를 통해 암호 체계의 약점을 분석. 오라클..
- Chosen Ciphertext
- 자신이 선택한 특정 암호문을 복호화하여 그 결과인 평문을 얻는다. 이를 통해 복호화 과정이나 Key를 추론하려고 시도. 주로 *복호화 오라클이 존재할 때 발생
- Chosen Text
- 이 공격은 선택 평문 공격과 암호문 공격을 모두 포함. 즉 자신이 원하는 평문을 입력하여 대응하는 암호문을 얻을 수도 있고, 원하는 암호문을 입력해 대응하는 평문도 얻을 수 있다.
✅ *오라클(Oracle)
특정한 입력값에 대해 암호화 또는 복호화 결과를 반환해주는 가상의 "블랙박스". 이는 암호 분석가가 암호 체계의 동작을 분석하거나 약점을 찾는데 사용
오라클은 암호 체계의 취약점을 탐구하는 데 핵심적인 도구로 작용. 하지만 실제 시스템에서는 이러한 오라클이 존재하지 않도록 설계하는 것이 보안의 핵심이다.
공격자가 무한한 시간과 자원을 가지고 있어도 암호문을 해독할 수 없는 상태.
암호화 자체가 수학적으로 완벽하여 필요한 정보가 없으면 복호화가 불가능. ex)OTP
‼️ 특징)
- 시간이나 계산 능력에 관계없이 안전함
- 현실적으로 구현이 어렵거나 비효율적일 수 있음.
공격자가 암호를 해독할 수는 있지만, 이를 위해 필요한 계산 자원(시간,비용 등)이 비현실적으로 크기 때문에 실질적으로 안전하다고 간주되는 상태
ex) DES, AES
‼️ 특징)
- 암호를 해독하는 데 드는 비용이 암호화된 정보의 가치보다 큼
- 암호를 해독하는 데 걸리는 시간이 정보의 유효 기간을 초과
- 대부분 현대 암호화 시스템은 이 범주에 속함
강력한 암호화는 권한이 없는 사람이나 시스템이 암호화된 데이터를 복호화하여 평문에 접근하는 것을 사실상 불가능하게 만드는 암호화 방식.
강력한 암호화를 만드는 특성
1. 적절한 암호 알고리즘 선택
2. 충분히 긴 키 길이 사용
3. 적절한 프로토콜 선택
4. 잘 설계된 구현
5. 고의적으로 숨겨진 결함이 없어야 함
Plaintext의 글자들을 다른 글자나 숫자 기호와 같은 것으로 대체하는 것. 
가장 간단하고 초기 형태의 치환 암호 중 하나.
알파벳을 3글자 뒤로 이동: Plaintext의 각 알파벳 문자를 알파벳에서 세 글자 뒤에 위치한 문자로 대체.
순환 구조: 알파벳의 끝(Z)를 넘어가면 다시 A로 돌아간다.
기본값이 K=3이지만 사용자 지정 값을 사용하여 암호화와 복호화 수행가능.
유한 집합 S의 요소들을 순서대로 배열한 것으로, 각 요소는 정확히 한 번씩 나타남.
평문의 각 문자마다 무작위로 선택된 암호문 문자가 대응. (1:1)
따라서 키는 26개의 문자로 이루어짐.
가능한 키의 총 개수는 26! (4 x 10^26)
‼️ 문제점:
언어의 특성(Language Characteristics)을 이용하면 쉽게 공격할 수 있다.
ex) 영어에서 가장 자주 사용되는 문자 e나 t와 같은 *빈도 분석(Frequency Analysis)을 통해 암호를 해독할 수 있다.
=> 따라서, 모노알파벳 치환 암호는 키 공간이 크더라도 *언어적 특성을 악용한 공격에 취약하다.
✅ *Language Redundancy
영어에서 가장 많이 사용되는 문자는 e이고, 반대로 z,j,x와 같은 문자는 드물게 사용됨.
두 글자 조합으로는 th, 세 글자 조합으론 the가 가장 흔하다.
이것을 이용하면
다음과 같이 암호문에 P와 Z가 가장 자주 등장한다면 이를 영어의 가장 흔한 문자 e와 t로 추정한다. 그리고 두 글자 조합으로 ZW는 th로 추론하고 ZWP는 the로 추론이 가능하다. 이를 통해 암호문의 일부를 해독할 수 있다.
결론: 이 과정은 모노알파벳 치환 암호와 같은 단순 암호를 해독하는 데 사용됨.
1:1대응 말고 규칙을 가지고 하나씩 바꿨을 때의 문제를 해결해보자.
문자2개를 하나의 pair로해서 2개씩 바꾸자
![]()
1. 중복된 값이 있으면 x를 넣는다
: BA LL OO N -> BA LX LO ON
2. 연속된 2자리가 같은 row에 있으면 오른쪽으로 shift
: BA LX LO ON -> BA LX LO NA
3. 연속된 2자리가 같은 col에 있으면 아래로 shift
: BA LX LO NA -> IB LX LO NA
4. 다 연관없으면 두 자리의 각 col교체
: IB LX LO NA -> IB SU PM NA
‼️ LX -> L의 col = 1, X의 col = 4 이걸 체인지해서 L의 col = 4 = S, X의 col = 1 = U -> SU
특징:
암호화에 사용되는 키는 메시지와 동일한 길이가 필요.
일반적으로 키는 반복되는 단어를 사용
각 문자에 대해 키의 해당 문자와 평문의 문자를 조합하여 암호문을 만드는 방식이다.
✅ mono는 1대1 대칭이라 만약에 plain에 있는 S가 암호문으로 N이 나오면 나머지 부분도 다 N으로 나오지만 해당 암호를 사용하면 앙호문이 S여도 Key값이 다르게 되면 다른 값이 나온다.Vigenère Autokey System
Key의 값을 deceptive으로 시작하지만 반복을 하지않고 나머지 길이만큼은 plaintext로 채운다.
문자단위가 아닌 비트 단위로 암호화를 진행하자
Bit단위로 암호화를 진행할때 Key stream generator, 그리고 복호화 할때도 동일하게 사용하면
A XOR B = C (암호화)
C XOR A = B (복호화)
즉, Key stream만 안전하고 랜덤하게 만들 수 있으면 괜찮지 않을까 하고 나온 암호 방법
랜덤 키 사용: 메시지 길이와 동일한 길이의 랜덤 키를 사용합니다. 이 키는 반복될 필요가 없으며, 완전히 랜덤해야 합니다.
단일 메시지 암호화 및 폐기: 키는 단 한 번만 사용되며, 한 메시지를 암호화하거나 복호화한 후 폐기됩니다.
새로운 메시지에는 새로운 키 필요: 각 새로운 메시지는 새로운 키를 필요로 하며, 이 키 역시 메시지 길이와 동일해야 합니다.
통계적 관계 없음: 암호화된 출력은 원본 메시지(평문)와 통계적으로 아무런 관계가 없어야 합니다. 즉, 암호화된 데이터는 완전히 랜덤하게 보입니다.
One-Time Pad의 어려움:
- 많은 양의 랜덤 키를 생성하는 생성하는 것이 어러움.
- 문자 길이 만큼 키를 랜덤하게 만드는게 현실적으로 어려움
- 생성된 키를 안전하게 분배하는 것이 어려움
- 매우 높은 보안이 요구되는 상황에서 주로 사용되며, 저대역폭 채널에서 유용함. 데이터 전송량이 적은 환경에서 키 관리가 용이함.
Secure channel을 통해 plain text를 보내야 한다면 OTP를 사용하는 것이 의미가 있는가?
답변:
원타임 패드(OTP)는 **키 분배 과정에서 반드시 보안된 채널(Secure Channel)**을 필요로 합니다. 하지만 메시지 자체를 보안된 채널을 통해 보내야 한다면, 암호화의 필요성이 줄어들 수도 있습니다. 이는 다음과 같은 이유 때문입니다:이미 보안된 채널을 통해 전송한다면, 암호화 없이도 메시지가 안전하게 전달될 수 있습니다.
OTP는 키 관리와 분배가 복잡하기 때문에, 보안된 채널이 있다면 더 간단한 암호화 방식이나 비암호화 전송을 고려할 수 있습니다.
결론적으로, OTP는 보안된 채널 없이 메시지를 안전하게 전송해야 할 때 가장 효과적입니다. 하지만 보안된 채널이 이미 존재한다면, OTP 사용의 실효성은 낮아질 수 있습니다.
: 문자를 바꾸는것이 아닌 배열을 바꿔 혼란을 주는 암호화 방법
문자의 순서를 바꿔 혼란을 주는 방법.
Key값의 의미가 col을 읽는 순자.
ttna 먼저 읽고 aptm 읽는 ~