본문 바로가기

Computer/ETC

Feistel 암호

반응형

페이스텔 구조에서 네트워크라는 이름은 그 구성도가 그물을 짜는 것과 같이 교환되는 형태로 구성되어 있기 때문에 붙여진 것이다.

Feistel구조는 3라운드 이상이며, 짝수 라운드로 구성된다. 이러한 Feistel 구조는 라운드 함수와 관계없이 역변환이 가능하며, 두번의 수행으로 블록간의 완전한 확신(diffusion)이 이루어진다. 알고리즘의 수행속도가 빠르고, 하드웨어 및 소프트웨어 구현이 용이하고, 아직 구조상에 문제점이 발견되고 있지 않다는 장점을 지니고 있다.

Feistel 구조는 입력을 좌우블록으로 분할하여 한 블록을 라운드 함수에 적용시킨 후의 출력 값을 다른 블록에 적용하는 과정을 좌우블록에 대해 반복적으로 시행하는 방식이다. 라운드 키가 역순으로 작용한다는 점을 제외하면 암/복호화 과정이 동일하고 라운드 함수에 대한 제약 조건이 없어 DES를 비롯한 대부분의 블록암호에 채택되어 사용되고 있다.

Feistel 암호 특징

Feistel 구조에서 입력 n 비트를 두개의 블록 (L₀, R₀)으로 나누어 라운드 함수를  F, 라운드키를 Ki라 할때, ⅰ번째 라운드 과정은 다음과 같다. 주의할 점은 최종 라운드에서는 좌우 블록을 한 번 더 교환해야 한다.
Li = Ri-1
Ri = Li₋₁ ⨁ Fi(Ri₋₁, Ki)

페이스텔 네트워크는 많은 블록 암호 알고리즘에서 이용되고 있다. AES 최종 후보로 남은 5개 중에 3개의 알고리즘(MARS, RC6, Twefish)에서 사용되고 있다. (단, AES로 최종 선정된 Rijndael은 사용안함)

Feistel 암호방식의 암호 강도를 결정짓는 요소는 평문 블록의 길이, 키 K의 길이, 라운드의 수이다. 그러므로 충분한 안정성을 보장받기 위해서는 평문 블록의 길이는 64비트 이상, 키 K의 길이는 64비트 내외, 라운드 수는 16회 이상이어야 한다. 그러나 최근에는 128비트의 키 길이를 권장하고 있다.

Feistel 암호 방식의 복호화 과정은 암호화 과정과 동일하다. 복호화 과정의 입력은 암호문과 보조키 Ki 이며 복호화 과정의 보조키 Ki의 입력 순서는 암호화 과정의 입력 순서와 반대가 된다. 즉, 복호화 과정의 첫 라운드에 Kn-1, 마지막 라운드에 Ki의 보조키를 입력시킨다.

대칭블록 암호 구현

1. 블록크기(Block size): 블록 길이가 크다는 것은 더 강한 보안을 의미하지만(다른 조건이 같다는 가정 하에) 길이가 길면 암 · 복호화 속도는 떨어진다. 128비트의 블록 크기는 이 두가지를 조화시키는 합리적인 크기이고, 블록암호 설계에서는 거의 공통적으로 이 크기의 블록을 사용한다.
2. 키 길이(Key size): 키 길이가 길다는 것은 더 강한 보안을 의미하지만 암 · 복호화 속도는 떨어진다. 현대 알고리즘에서 쓰이는 가장 보편적인 키 길이는 128비트이다.
3. 라운드 수(Number of rounds): 단일 과정으로는 보안이 부족하지만 라운드 수를 증가시켜 여러 번 수행하면 보안을 강화할 수 있다는 것이 Feistel 암호의 핵심이다. 전형적인 라운드 수는 16이다.
4. 서브키 생성 알고리즘: 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워진다.
5. 라운드 함수: 이 함수 역시 복잡하면 복잡할수록 암호해독이 어려워진다.

반응형

BLOG Version/ 1.1.2.1 _22.05.26
Copyright © 2002-2020 EIGHTBOX. All Rights Reserved.
Behold the fowls of the air: for they sow not, neither do they reap, nor gather into barns; yet your heavenly Father feedeth them. Are you not much better than they?