Feistel 암호는 블록 암호 기반 알고리즘 및 구조의 구성에 사용되는 암호 접근 방식입니다. Feistel 네트워크는 정보 블록에 대해 일련의 반복 암호를 구현하며 대량의 데이터를 암호화하는 블록 암호용으로 자주 설계됩니다.
Feistel 네트워크는 데이터 블록을 두 개의 동일한 조각으로 분할하고 여러 라운드에서 암호화를 사용하여 작동합니다. 각 라운드는 기본 기능 또는 키에서 파생된 순열 및 시퀀스를 구현합니다. Feistel 네트워크를 구현하는 각 암호마다 라운드 수가 변경됩니다.
Feistel 암호는 암호의 현재 비공개 상태를 두 부분으로 나누고 암호화 또는 암호 해독의 각 라운드에서 개별 부분에서만 작동하는 다중 라운드 암호입니다.
Feistel은 두 개 이상의 단순 암호를 순차적으로 실행하여 최종 결과나 산출물이 어떤 구성 요소 암호보다 암호학적으로 우수하도록 하는 곱 암호 개념을 사용하여 개념적 블록 암호를 근사화할 수 있다고 제안했습니다. .
이 방법의 핵심은 키 길이가 k 비트이고 블록 길이가 n 비트인 블록 암호를 생성하여 2n 대신 총 2k 변환이 가능하도록 하는 것입니다! 이상적인 블록 암호로 변환 가능.
Feistel은 대체 및 순열을 대체하는 암호의 사용을 제안했으며, 여기서 이러한 방법은 다음과 같이 정의됩니다. -
대체 - 각 일반 텍스트 구성 요소 또는 구성 요소 집합은 해당 암호 텍스트 구성 요소 또는 구성 요소 집합에 의해 고유하게 복원됩니다.
순열 - 일반 텍스트 구성 요소의 순서는 해당 순서의 순열에 의해 다시 저장됩니다. 즉, 시퀀스에서 요소가 나타나는 순서가 변경되는 대신 시퀀스에서 요소가 삽입되거나 제거되거나 대체되지 않습니다.
Feistel 암호는 암호의 각 라운드에 대한 입력으로 용이하게 하는 키 일정으로 알려져 있습니다. 주요 일정에는 두 가지 선택 사항이 있습니다.
첫 번째는 암호화의 각 라운드에 대한 키(또는 "라운드 키")가 두 당사자가 공유하는 비밀 키에 포함되어 있다는 것입니다(높은 공유 비밀 키가 생성됨).
다른 대안은 공유 비밀 키가 다음 라운드 키를 생성하기 위해 이전 라운드 키 또는 키 생성 알고리즘의 현재 내부 상태에 대한 일부 작업을 구현하는 "키 확장" 기능에 대한 입력으로 사용된다는 것입니다.
K 기능은 각 암호화 라운드에 대해 원래 비밀 키를 라운드 키로 변환합니다. 암호화 기능의 키 공간을 지원하려면 이 기능을 선택해야 합니다.
64비트 비밀 키가 필요하지만 비슷한 지점에서 유효 키 공간이 32비트로 줄어들면 공격자는 암호문을 해독하기 위해 32비트 키 공간만 검색하면 됩니다.