파이스텔 암호

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

파이스텔 암호(Feistel cipher)는 블록 암호의 일종으로, 암호화 방식이 특정 계산 함수의 반복으로 이루어진다. 이 때, 각 과정에 사용되는 함수는 라운드 함수(round function)이라고 부른다.

많은 블록 암호가 파이스텔 구조를 가지고 있다. 예를 들어, DES, 투피시, SEED 등이 파이스텔 구조를 가진다. 하지만 AES와 같이 파이스텔 구조가 아닌 블록 암호도 존재한다.

방식[편집]

먼저 암호화하려는 정보를 길이가 같은 두 개의 정보로 쪼갠다. 이를 (L_0, R_0)이라고 하고, 라운드 0, 1, \cdots, n에서 사용되는 키를 K_i, 그리고 라운드 함수를 F로 놓는다.

암호화 과정에서는 각 라운드에서는 다음과 같은 연산이 이루어진다.

L_{i+1} = R_i
R_{i+1}= L_i \oplus {\rm F}(R_i, K_i)

모든 라운드가 끝난 후, 최종적으로 (R_{n+1}, L_{n+1})가 암호화된 값이 된다.

복호화 과정에서는 반대의 연산이 이루어진다. (R_{n+1}, L_{n+1})가 주어졌을 때, 각 복호화 라운드에서는 다음과 같은 연산이 이루어진다.

R_i = L_{i+1}
L_i = R_{i+1} \oplus {\rm F}(L_{i+1}, K_i)

최종적으로 원래 값 (L_0, R_0)를 얻는다.

이 모델의 장점 중 하나는 암호화 과정과 복호화 과정이 키 순서를 제외한 전체가 같은 계산을 반복한다는 것이다. 또한 라운드 함수가 역연산이 존재해야 할 필요성이 없다.