* 블록암호 설계원리
- 평문과 암호문이 고정된 크기의 블록으로 구성된다.
- 블록암호는 혼돈과 확신 모두가 적용된다.
- 블록암호는 P-box, S-box, 그 밖의 구성요소들(XOR, Shift, Swap)을 결합하여 설계한다.
- 여러 라운드를 반복함으로써 혼돈과 확산을 충분히 만족하도록 해야 한다.
(라운드의 정의 : 합성암호가 반복적으로 사용되는 것, S-box, P-box, 기타 구성요소들이 결합됨)
* 용어정리
1) 혼돈
: 키와 변화가 암호문에 미치는 영향을 감춰야 한다.
: 치환이용, S-box
2) 확산
: 평문 한 비트의 변화가 암호문의 모든 비트에 확산되어야 한다.
: 순열(전치)이용, P-box
3) 자리대체 / S-box (substitution) : 치환암호 / 입력과 출력의 비트 개수가 달라도 상관없음 (3비트 입력 -> 2비트 출력)
: 역함수가 존재하기 위해서는 입력 비트와 출력 비트의 개수가 같아야 한다.
4) 자리이동 / P-box (permutation) : 3종류 / 단순(straight), 축소(compression), 확장(expansion)
* 블록암호 알고리즘
1) DES : Data Encryption Standard
- 대칭키 블록 암호
- 평문길이 64비트, 키의 길이 56비트
-> 64비트의 크기를 갖는데 실제로는 56비트 사용되고, 나머지 8비트는 패러티 검사를 위해 사용된다.
- 56비트 키를 사용하여 64비트 데이터를 암호화한다.
- 복호화 알고리즘은 암호화 알고리즘과 동일하며, 키만 reverse order로 입력하면 된다. (Feistel 구조)
- 총 16개의 라운드로 구성된다.
- 알고리즘 : 초기치환(IP) -> 16라운드의 연산과정 -> 역치환 IP^-1
(순서)
1. 평문 64비트 입력 -> 32씩 두 개로 나눈다.
2. 오른쪽의 32비트와 라운드키 k를 라운드 함수 F에 통과시킨다.
3. 라운드 함수 F를 통과한 결과와 왼쪽 32비트를 XOR 연산한다.
4. 3)의 결과와 라운드키 k를 라운드 함수 F에 통과시킨다.
5. 라운드 함수를 통과하기 전 오른쪽 32비트(왼쪽 32비트로 들어감) 라운드함수 F에 통과한 결과를 XOR 연산한다.
6. 위 라운드 함수를 적용하는 과정을 반복한다.
2) AES : Advanced Encryption Standard
: 평문길이 128비트 / 키의 길이는 128, 192, 256비트
: DES의 키 사이즈(56비트)는 현재 컴퓨팅 파워에서는 너무 작다. 따라서 전수조사에 취약
: DES와 동일하게 여러 라운드가 반복된다.
: Feistel 구조가 아니기 때문에 암호화 알고리즘과 복호화 알고리즘이 같지 않다.
+) feistel : 가역요소와 비가역요소 모두 사용
non-feistel : 가역요소만 사용
=> 이 두개는 역함수의 존재 유무에 차이가 있다.