-->

[암호학] 페이스텔(Feistel) 암호의 암복호화 방식

페이스텔(Feistel) 암호란

페이스텔 암호는 대칭 블록 암호 알고리즘으로 암복호화 과정에서 '라운드 함수'가 사용된다. 대표적인 블록 암호화 방식인 DES, SEED 등이 페이스텔 구조를 갖고 있다. 페이스텔 암호에서 라운드 수는 원하는 만큼 늘릴 수 있으며 라운드 수가 늘어날수록 보안성이 강화된다. 일반적으로는 16라운드를 사용한다. 그리고 페이스텔 암호의 제일 큰 특징은 암복호화 알고리즘이 동일하다는 것이고 라운드 함수 F의 역함수가 존재할 필요가 없다는 것이다. 이는 아래 그림을 보면 쉽게 알 수 있다.

 

사실 정보보안기사에서는 페이스텔 암호 자체에 대한 문제가 서술형으로 나오는 경우는 거의 없지만, 페이스텔 구조에서 암복호화가 어떻게 이루어지는지 좀더 살펴보자. PPT로 그림을 그릴까 하다가 손그림 사진으로 대체한다.

 

 

1라운드 페이스텔, 암복호화 방식

1라운드 페이스텔 암복호화 방식은 간단하다. 아래 그림에서 쉽게 알 수 있듯이 L1=L0⊕F(R0,k)가 되고 R=R0이 된다.

 

  • L1=L0⊕F(R0,k)

  • R1=R0

 

 

암호문(L1,R1)을 그대로 동일한 알고리즘에 넣었을 때 평문(L0,R0)이 나오는 것을 쉽게 알 수 있다.

 

  • L1⊕F(R1,k)=L0⊕F(R0,k)⊕F(R1,k)=L0

  • R1=R0

 

n라운드 페이스텔, 암복호화 방식

이를 일반화시켜보자. 암호화하려는 데이터를 반으로 쪼개 L0,R0이라 한다. 라운드 0,1,...,n에서 사용되는 키를 Ki, 라운드 함수를 F라 정의한다.

 

n라운드 페이스텔 암복호화 방식 (출처: 구글 무료 이미지 검색, 위키백과)

 

그럼 위에서 살펴본 바와 같이, 각 라운드에서의 암호화는 아래와 같이 이루어지고 암호문 (Rn+1,Li+1)을 얻게 된다.

 

  • Li+1=Ri

  • Ri+1=Li⊕F(Ri,ki)

 

그리고 암호문 (Rn+1,Li+1)을 아래와 같이 복호화 시키면 평문값 (L0,R0)을 얻게 된다.

 

  • Ri=Li+1

  • Li=Ri⊕F(Li+1,ki)

 

이렇듯, 페이스텔 방식에서는 암복호화 과정이 키 순서를 제외하고는 같은 계산을 반복하기 때문에 예를 들어 키가 (k1,k2,...,kn,kn-1,...,k2,k1)이 주어질 경우 암호화를 두번 거치면 평문값이 나오게 된다. 대학원 다닐 때 암호학 퀴즈 문제 중 하나였다.

 

댓글

Designed by JB FACTORY