
고전 대칭키 암호
Rotor 암호
- 단일 알파벳 치환에 따른 아이디어를 이용
- 각 평문 문자에 대해 평문과 암호문 문자의 대응을 변화시키는 원리

- rotor의 초기 설정은 송신자와 수신자 사이의 비밀 키
ex) 아래 그림에서 평문 "bee"를 Rotor 암호를 활용하여 암호화하여라. 이 때 Rotation 횟수는 2로 설정한다.

-> 암호문: CAA
전치 암호
- 전치 암호는 한 기호를 다른 기호로 대체시키지 않고, 대신에 그 기호의 위치를 바꾸는 암호 체계
- 평문의 첫 번째 위치한 기호 -> 암호문에서는 열 번째 위치에 나타남
- 평문의 여덟 번째 위치한 기호 -> 암호문에서는 첫 번째 위치에 나타남
- 즉, 전치 암호는 평문/암호문의 기호를 재정렬하는 과정을 통해 암호화/복호화를 수행함
키가 없는 전치 암호
- Rail fence 암호
- 송신자는 평문의 각 기호를 두 행에 번갈아 가며 기입
- 평문의 첫 번째 기호는 1행에, 두 번째 기호는 2행에, 세 번째 기호는 1행에, ...

- Rail fence 암호와 유사한 다른 방법
- 송신자와 수신자가 행(row)의 개수 n을 미리 합의한 후, n개의 열을 갖는 행렬 M에 평문의 각 기호를 M11부터 순차적으로 (M11, M12, ..., M1n, M21, M22, ...의 순서로) 기입
- 이후 송신자는 행렬 M의 각 열을 순차적으로 결합해 수신자에게 전송

키가 있는 전치 암호
-
키가 없는 전치 암호는 한 쪽 방향으로 평문을 기록하고 그것의 역 방향으로 읽음으로써 문자를 치환함
-
한편, 키가 있는 전치 암호 체계에서는 블록(block, 평문을 나눈 단위)이라는 미리 정해진 크기로 평문을 나눈 뒤, 각 블록에서 문자를 치환하기 위한 키를 개별적으로 사용함
-
열 전치 암호(Columnar transposition ciphers)
key는 숫자만 가능한 것이 아니라 일련의 규칙이나 연산을 사용하기도 함
- 이중 전치 암호 (Double transposition cipher)
- 이중 전치 암호 체계는 앞서 설명한 암호화/복호화 알고리즘을 두 번 반복하는 방법
- 대부분의 경우 각 단계에서 같은 키를 이용 (단, 다른 키를 이용해도 무방함)

스트림 암호화 블록 암호
스트림 암호(Stream cipher)
스트림: 일련의 신호(비트 단위로 들어와서 처리되는 것)
- 암호화와 복호화가 한 번에 (한 문자 or 한 비트) 한 개의 기호에만 적용되는 암호
- 평문 수열(P), 암호문 수열(C), 키 수열(K)에 대한 스트림 암호의 동작 방법
- 평문 문자는 한 번에 하나씩 암호화 알고리즘에 입력 -> P = P1P2P3...
- 키 수열은 다양한 방법으로 생성 -> k = (k1,k2,k3...)
- 암호문 문자도 한 번에 하나씩 생성됨 -> C = C1C2C3...
- 이때, C1 = Ek1(P1), C2 = Ek2(P2), C3 = Ek3(P3)
- Eki: 암호화 함수, Ki: i번째 키, Ci: 암호문의 i번째 문자(비트), Pi: 평문의 i번째 문자(비트)
- ex) 평문 수열의 세 번째 문자 "a"가 키 수열의 세 번째 값을 이용해 암호화되는 순간을 나타네는 예제

스트림 암호와 고전 암호
- 덧셈 암호
- 덧셈 암호는 키의 반복된 값을 키 수열로 사용하는 스트림 암호임
- 키 수열은 사전에 정의된 키 수열 값이거나 K(k, k, ..., k)로 간주함
- 그러나 암호문의 각 문자는 키 수열이 독립적으로 생성되기 때문에, 연관된 평문 문자에만 의존하여 결정됨
- 단일문자 대치 암호
- 단일문자 대치 암호는 키 수열 값은 현재의 평문 문자를 대응 표에서 연관된 암호문 문자로 대응시키는 스트림 암호임
- Vigenere 암호
- Vigenere 암호는 키 수열 m개의 값이 반복됨. 이때 m은 키워드의 크기이며, K=(k1, k2, ..., km, k1, k2 ..., km, ...)로 주어지는 스트림 암호임
블록 암호(Block cipher)
cf) 스트림 암호: 한 번에 암호화하는 단위 차이
- 블록 암호에서, 크기가 m인 평문 기호의 그룹은 함께 암호화되어, 같은 크기의 암호문 그룹을 생성함
- 블록 암호에선 키가 여러 값으로 구성되더라도 단일 키는 전체 블록을 암호화하는 데 사용됨
- 블록 암호에서, 암호문 블록은 전체 평문 블록에 의해 결정됨
- ex) 평문 수열의 두 번째 블록 "int"가 암호화되는 순간을 나타내는 예제

대수 구조
- 현대 암호에서 중요한 개념
군 (Group)
환 (Ring)
체 (Field)
군(G, Group)
- 네 개의 성질(혹은 공리)를 만족하는 이항 연산 "*"이 정의된 원소들의 집합
- 닫힘: 만약 a와 b가 G의 원소라면, c=aㅇb 또한 G의 원소임. 이것은 임의의 두 원소의 연산 결과가 집합 내의 다른 원소로 대응됨을 의미함
- 결합 법칙: 만약 a, b, c가 G의 원소라면 (aㅇb)ㅇc = aㅇ(bㅇc)를 만족함. 즉, 두 개 이상의 원소에 대해 연산을 적용할 때 연산의 순서는 결과 값에 영향을 주지 않음.
- 항등원의 존재성: G의 임의의 원소 a에 대해, eㅇa = aㅇe를 만족하는 항등원 e가 존재함.
- 역원의 존재성: G의 임의의 원소 a에 대해, aㅇa = aㅇa = e를 만족하는 a의 역원이 존재함.
가환 군 (또는 아벨 군)
- 앞의 네 개의 성질을 만족함과 동시에 아래의 교환 법칙을 만족하는 군을 가환 군 또는 아벨 군이라고 함
- 교환 법칙: G의 임의의 두 원소 a, b에 대해 aㅇb = bㅇa를 만족함. 이 성질은 가환 군(아벨 군)일 때만 필요한 성질임
군의 특징
-
하나의 군에는 한 개의 연산만이 정의
-
그 연산에 대한 성질들은 그 연산과 역함수 관계에 있는 연산의 사용을 허용함
- ex1) 정의된 연산이 덧셈인 경우
- 뺄셈은 덧셈의 역함수 관계 -> 군은 덧셈과 뺄셈 모두 사용
- ex2) 정의된 연산이 곱셈인 경우
- 나눗셈은 곱셈의 역함수 관계 -> 군은 곱셈과 나눗셈 모두 사용
-
단, 군은 덧셈/뺄셈 혹은 곱셈/나눗셈만 사용할 수 있으며, 동시에 둘 다 사용할 수 없음
-
G = <Set, Operator>
- 집합(Set): 해당 군에 포함되는 원소들의 집합
- 연산자(Operator): 해당 군에 포함