본문 바로가기

security/crypto

[암호학 이론] Feistel cipher

 

 

 

 

 

- 페이스텔 구조 (Feistel cipher)

 

Feistel cipher

 

다음과 같은 구조를 페이스텔 구조(Feistel cipher)라고 합니다. 이를 바탕으로 다양한 블록 암호들이 파생되는 설계 모델입니다. 입력으로 들어오는 평문을 P(plaintext block), 평문을 암호화와 복호화 할 때 사용되는 키값을 K라고 둡니다.

 

- 암호화 과정 (encryption process)

1. 입력으로 들어온 평문 P를 절반으로 두 블록으로 나누고 각각을 L과 R이라고 합니다.

2. 현재 라운드의 R은 다음 라운드의 L이 됩니다.

3. 현재 라운드의 L은 현재 라운드의 K와 R을 파라미터로 가진 함수 F를 실행한 결과 값과 XOR 연산을 하고 이 값이 다음 라운드의 R이 됩니다. 즉 L은 F(K,R)과 XOR한 뒤 다음 라운드의 R이 됩니다.

 

Feistel encryption process

 

암호화 과정을 수식으로 다음과 같이 나타낼 수 있습니다. 블록 암호는 복호화가 필요하므로 암호화 때 쓰인 각 함수들의 역함수가 존재하는데 이런 페이스텔 구조를 띌 경우 복호화 과정에서 역함수를 필요로 하지 않습니다. 왜냐하면 XOR 연산은 같은 값으로 두 번 할 경우 상쇄가 되는 성질이 있기 때문입니다.

 

XOR 연산 상쇄 예시

 

다음의 간단한 예시를 보면 상쇄가 되는 것을 눈으로 확인 할 수 있습니다. 따라서 페이스텔 구조에서는 복호화에 역함수가 필요하지 않고 암호화의 과정을 다시 거꾸로 한번 더 해줄 경우 XOR 연산이 두번으로 상쇄되므로 평문을 구할 수 있습니다.

 

Encryption and Decryption

 

페이스텔 구조의 암호화와 복호화의 과정은 다음과 같이 거꾸로임을 확인할 수 있습니다.