DES 암호 알고리즘이란 대칭형 암호이다.(비밀키 암호) DES는 64비트 평문을 64비트 암호문으로 암호화하고 56비트의 Key를 사용한다. (Key가 전달될 때는 64비트로 전달된다.
그 이유는 7비트마다 오류 검출을 위한 페리티 비트가 들어가기 때문이다. 실질적으로는 56비트)
DES는 Feistel 네트워크의 변형된 형태로, 16 개의 라운드를 거치며 56비트짜리 원래 키로부터 16개의 서브키를 생성하고 그 서브키를 각 라운드에서 사용한다.
그림에서 보듯이 평문의 길이는 2W로 표시한다. 그리고 이 평문은 W길이의 L0, R0로 나뉘어 Input으로 들어간다. 총 16(N)라운드를 거쳐 2W 길이의 암호문이 생성된다.
키 스케쥴은 암호화 단계에서는 K1 -> K2 -> .. -> KN 이고 복호화 단계에서는 이 반대인 KN -> KN-1 -> ... -> K1 이다. (Ki : i th subkey)
가장 먼저 64비트의 평문이 다음과 같은 테이블을 토대로 Initial Permutation 테이블에 따라 permutation 암호화가 적용된다. 그리고 마지막에 16개의 라운드가 끝나고도 Inverse of Initial Permutation 테이블에 따라 permutation 암호화가 적용된다.
각 라운드는 다음과 같은 구조를 가지고 있다.
1. Expansion/Permutation (E table )
R (i-1)th의 32 bit를 48 bit로 늘리는 역할을 합니다. permutation 암호 알고리즘 사용.
2. 48 bit XOR K ith
1번을 적용해서 나온 48 bit와 키 스케줄링에 따라 나온 K (i)th 번 째 subkey와 xor를 한다.
3. Substitution/choice (S box)
48 bit를 다시 32 bit로 줄이는 역할을 한다.
48bit를 6bit씩 잘라서 8개의 묶음을 만든다.
각 묶음은 Si(b0b1b2b3b4b5) : (b0b5) row - (b1b2b3b4) column
ex) S1(010110) : (00) row - (1011) column -> 0 행 - 11열 -> 12
12를 2진수로 다시 표시하면 1100이 나온다.
이렇게 각 6 bit를 4bit로 줄이면 8개의 묶음이였기 때문에 결과는 32bit
4. Permutation
3번 과정에서 나온 32bit를 P 테이블에 따라 permutation 암호화를 적용한다.
위에서본 1,2,3,4 번 과정을 거쳐 나온 값 32bit와 L (i-1) th 값을 xor 하여 R i th을 구한다.
Permuted Choice 1 table에 따라 56 bit의 키를 각각 28bit의 C0, D0로 나눈다.
left shift는 rotations in the key schedule table에 따라 각 라운드에 지정된 num of left shifts를 한다.
permuted choice2 table에 따라 48 bit를 구해 K (i) th subkey로 사용한다.