비밀키

반응형


  대칭키는 비밀키, 관용키라고도 불리며, 블록 암호와 스트림 암호로 구분할 수 있다. 블록 암호는 치환(Substitution)과 전치(Preposition)를 이용해서 평문을 일정 단위로 나누어서 암호문을 생성하는 것이다. 반면에 스트림 암호는 난수열인 키스트림을 이용하여 비트 혹은 바이트 단위로 순차적으로 암호문을 생성하는 것이다. 블록 암호와 스트림 암호를 각각 알아보고, 대칭키 암호들의 대표적인 사례들을 정리해보겠다.


  블록 암호는, 확산과 혼돈이라는 성질을 만족시키기 위해서, 전치 요소(P-box)와 치환 요소(S-box)와 그 밖의 몇 가지 구성 요소를 결합하여 설계된다. 전치 요소(P-box)는, 단순 P-box, 확장 P-box, 축소 P-box로 종류를 나눌 수가 있다. 축소 P-box는, n 비트를 입력받아 m 비트를 출력하는 것으로서, n > m을 만족시킨다. 즉, 입력으로 사용된 비트 중, 특정 비트는 소실되어서 출력되지 않는 것이다. 반면에 확장 P-box는, n 비트를 입력받아 m 비트를 출력하는 것으로서, n < m을 만족시킨다. 즉, 입력 비트 중 특정 비트는 한 개 이상의 출력 비트와 연결되는 것이다. 확장 P-box는 비트의 양을 증가시킬 때 사용된다. 단순 P-box는 입력받는 n 비트와 출력되는 m 비트의 크기가 같다. 이때, 단순 P-box는 역함수가 존재하지만, 축소 P-box와 확장 P-box에는 역함수가 존재하지 않는다. 치환 요소(S-box)는, 입력되는 n 비트와 출력되는 m 비트의 크기가 같을 필요는 없다. 입력값과 출력값 사이의 관계가 테이블 또는 수학적 관계로 정의되기 때문에, 역함수가 존재할 수도 있고, 존재하지 않을 수도 있다. 현대 블록 암호에서 S-box는, 치환뿐만 아니라 XOR, Shift, Swap, Split, Combine 등의 구성 요소들이 있다. S-box와 P-box 그리고 이 기타 요소들을 결합하여 합성 암호를 만들어내고, 이 합성 암호를 반복해서 사용함으로써 확산과 혼돈 성질을 만족시키게 된다. 이때, 반복적으로 사용되는 합성 암호를 round라고 부른다.


  두 가지 종류의 합성 암호가 있다. Feistel과 SPN이 그것이다. Feistal은, IBM의 Horst Feistel이 최초로 고안한 것으로, 이것을 기반으로 해서 대부분의 대칭 블록 암호 알고리즘(ex. DES)들이 만들어진다. Feistel은, 입력되는 N 비트의 블록을 반으로 나누어서 R 번의 라운드(3라운드 이상의 짝수 라운드)만큼 반복된 연산을 수행하여 암호화를 진행다. 이때, 반으로 나눈 블록 중 한 블록을 라운드 함수에 적용 후 그 출력을 반대 측 블록에 입력다. Feistel은, 복호화 과정과 암호화 과정이 동일하다. 다만 복호화 과정의 키 입력 순서는, 암호화 과정과 반대이다. 이 Feistel의 암호 강도를 결정짓는 요소는, 평문 블록의 길이, 키 K의 길이, 라운드의 수이다. 충분히 안전하다는 것을 보장하기 위해서, 평문 블록의 길이는 64비트 이상, 키 K의 길이는 64비트 내외, 라운드 수는 16회 이상이어야 다. 최근에는 128비트 이상의 키를 사용하기를 권장되고 있다. SPN은 Substitution Cipher와 Permutation Cipher을 중첩하여 개발한 암호이다. 이것은 여러 개의 함수를 중첩하면 개별 함수로 이루어진 암호보다 안전하다는 Shannon의 이론에 근거하고 있다. 입력을 여러 개의 소블록으로 나누고, 각 소블록을 S-box로 입력하여 대치시키고, S-box의 출력을 P-box로 전치하는 과정을 반복하는 방식이다. AES와 ARIA에서 사용되고 있는 알고리즘이다.

반응형

+ Recent posts