Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

정보 보안에서 파이스텔(Feistel) 암호란 무엇일까?

파이스텔 암호(Feistel Cipher)의 개념

파이스텔 암호는 블록 암호 기반 알고리즘과 구조를 설계할 때 사용되는 암호화 방식입니다. 파이스텔 네트워크는 하나의 데이터 블록에 여러 단계의 반복 암호를 순차적으로 적용하며, 대량의 데이터를 암호화하는 블록 암호 설계에 널리 활용됩니다.

파이스텔 네트워크의 동작 원리

파이스텔 네트워크는 데이터 블록을 크기가 같은 두 조각으로 나눈 뒤, 여러 라운드에 걸쳐 암호화를 수행합니다. 각 라운드에서는 주 함수 또는 키에서 유도된 치환과 순열이 적용되며, 라운드 수는 해당 암호 알고리즘마다 서로 다르게 설정됩니다.

파이스텔 암호는 다중 라운드 구조를 가진 암호로, 현재 암호의 내부 상태를 두 부분으로 나누고 매 라운드마다 그중 한 부분에만 암호화 또는 복호화 연산을 수행한다는 특징이 있습니다.

곱 암호(Product Cipher)와 이상적 블록 암호

파이스텔은 곱 암호(product cipher) 개념을 활용하면 이상적인 블록 암호에 근사할 수 있다고 제안했습니다. 곱 암호란 두 개 이상의 단순한 암호를 순차적으로 실행하여, 최종 결과물이 어떤 개별 구성 암호보다도 암호학적으로 더 강력해지도록 만드는 방식입니다.

이 방식의 핵심은 키 길이 k비트, 블록 길이 n비트를 가지는 블록 암호를 만드는 것입니다. 이를 통해 이상적 블록 암호에서 가능한 2n!개의 변환이 아니라, 2k개의 변환을 실현할 수 있습니다.

치환과 순열의 교차 적용

파이스텔은 치환(substitution)과 순열(permutation)을 번갈아 적용하는 암호 구조를 제안했으며, 두 가지 방법은 다음과 같이 정의됩니다.

치환(Substitution)

각 평문 요소 또는 요소 집합이 고유하게 대응하는 암호문 요소 또는 요소 집합으로 대체됩니다.

순열(Permutation)

평문 요소들의 순서가 재배열됩니다. 즉, 요소를 삽입하거나 삭제하거나 교체하지 않고, 요소들이 나타나는 순서만 변경합니다.

키 스케줄(Key Schedule)

파이스텔 암호에서는 각 라운드에 입력으로 제공되는 키 스케줄(key schedule)이 사용됩니다. 키 스케줄에는 두 가지 방식이 있습니다.

첫 번째 방식은 각 라운드의 키(라운드 키)가 통신 당사자 간에 공유된 비밀키 안에 포함되는 것입니다. 이 경우 공유 비밀키의 길이가 상당히 길어집니다.

두 번째 방식은 공유 비밀키를 '키 확장(key expansion)' 함수의 입력으로 사용하는 것입니다. 이 함수는 이전 라운드 키 또는 키 생성 알고리즘의 현재 내부 상태에 일정한 연산을 수행하여 다음 라운드 키를 생성합니다.

K 함수와 유효 키 공간

K 함수는 원래의 비밀키를 각 암호화 라운드에 필요한 라운드 키로 변환하는 역할을 합니다. 이 함수는 암호화 함수의 키 공간을 충분히 지원하도록 신중하게 선택해야 합니다.

예를 들어 64비트 비밀키가 필요한 상황에서 유효 키 공간이 32비트로 축소된다면, 공격자는 암호문을 해독하기 위해 32비트 키 공간만 탐색하면 됩니다. 따라서 키 확장 과정에서 유효 키 공간이 줄어들지 않도록 설계하는 것이 매우 중요합니다.