Blowfish는 대칭 블록 암호 알고리즘이며 한 번에 64비트의 블록 정보를 암호화합니다. Feistel 네트워크를 따르며 이 알고리즘의 작업 절차는 두 부분으로 나뉩니다.
-
하위 키 생성 − 이 프로세스는 최대 448비트 길이의 키를 4168비트를 추가하는 하위 키로 변환합니다.
-
데이터 암호화 − 데이터 암호화 과정에서 네트워크를 16번 반복합니다. 각 라운드에는 키 종속 순열, 키 및 데이터 종속 대체가 포함됩니다. 알고리즘의 연산은 XOR 또는 32비트 단어에 대한 추가입니다. 유일한 추가 작업은 라운드당 4개의 인덱싱된 배열 정보 조회입니다.
이 두 부분을 다음과 같이 논의해 보겠습니다. -
-
하위 키 생성 - Blowfish 암호화 알고리즘은 엄청난 수의 하위 키를 사용합니다. 이 키는 데이터 암호화 또는 암호 해독보다 먼저 생성됩니다.
p-어레이에는 18개의 32비트 하위 키가 포함됩니다. -
P1,P2,………….,P18.
각각 256개의 항목을 포함하는 4개의 32비트 S-Box가 있습니다. −
S1,0, S1,1, ...... S1,255
S2,0, S2,1, ........... S2,255
S3,0, S3,1,…….. S3,255
S4,0, S4,1, ..... S4,255
하위 키 생성 단계
-
먼저 고정 문자열로 P 배열과 4개의 S 상자를 순서대로 초기화하고 이 문자열도 π의 16진수를 포함합니다.
P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344 등
-
키의 처음 32비트와 XOR P1, 키의 모든 비트(최대 P14)에 대해 XOR P2(키의 32비트) 등. 전체 P 어레이가 키 비트와 XOR될 때까지 키 비트를 통해 절차를 반복적으로 순환합니다. (각 짧은 키에 대해 부분적으로 하나의 동등한 긴 키가 있습니다. 예를 들어 A가 64비트 키인 경우 AA, AAA 등은 동일한 키입니다.)
-
1단계와 2단계에서 정의된 하위 키를 사용하여 Blowfish 알고리즘으로 모두 0인 문자열을 암호화할 수 있습니다.
-
(3)번의 64비트 출력으로 P1과 P2를 복원할 수 있습니다.
-
변경된 하위 키로 알고리즘을 사용하여 단계 (3)의 출력을 암호화할 수 있습니다.
-
(5)번의 출력으로 P3와 P4를 복원할 수 있습니다.
-
계속해서 변화하는 알고리즘의 출력으로 P 배열의 모든 항목을 복원한 다음 4개의 S-box를 순서대로 복원하는 절차를 계속하는 데 사용할 수 있습니다.
-
-
필요한 모든 하위 키를 만드는 데 총 521번의 반복이 필요합니다. 애플리케이션은 이 파생 프로세스를 여러 번 실행하는 대신 하위 키를 저장할 수 있습니다.
-
데이터 암호화 − Blowfish는 16 라운드를 포함하는 Feistel 네트워크입니다.
입력은 64비트 데이터 요소 x입니다.
x를 두 개의 32비트 반으로 나눕니다. xL , xR .
그런 다음 i =1에서 16에 대해
xL =xL XOR Pi
xR =F(xL ) XOR xR
xL 교체 및 xR
16 일 이후 라운드, 스왑 xL 및 xR 마지막 스왑을 취소하려면 다시 한 번.
그런 다음 암호문 =xL의 연결 및 xR , xR =xR XOR P17 및 xL =xL XOR P18 .
마지막으로 xL을 다시 결합합니다. 및 xR 암호문을 얻기 위해. 복호화는 암호화와 동일하며 P1, P2, … P18은 역순으로 활용됩니다.