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

블로우피시(Blowfish) 암호화 알고리즘이란 무엇일까?

블로우피시(Blowfish)는 느리고 불확실성이 있던 기존 DES 알고리즘의 한계를 극복하기 위해 설계된 대칭 블록 암호입니다. 1993년 암호학자 브루스 슈나이어(Bruce Schneier)가 고안했으며, 특허 없이 누구나 자유롭게 사용할 수 있는 퍼블릭 도메인으로 공개되어 있습니다.

대칭 암호화와 블록 암호의 기본 원리

대칭 암호화는 하나의 암호화 키를 사용해 정보를 암호화하고 복호화하는 방식입니다. 민감한 정보와 대칭 암호화 키가 암호화 알고리즘 내에서 결합하여 원문을 암호문(ciphertext)으로 변환합니다. 블로우피시는 SplashID를 비롯한 수많은 암호 스위트와 암호화 제품에 채택되어 있습니다.

블록 암호(block cipher)는 일정량의 평문(plaintext)을 코드화된 텍스트, 즉 암호문으로 변환하는 컴퓨터 루틴입니다. 이 루틴은 '블록'이라 불리는 텍스트 덩어리 단위로 수행되며, 전송 반대편에서 암호문을 해독하려면 암호문을 여는 열쇠 역할을 하는 키가 반드시 필요합니다.

빠른 처리 속도와 폭넓은 활용

블로우피시는 공개된 블록 암호 중에서도 가장 빠른 편에 속합니다. 이러한 속도 덕분에 휴대폰, 노트북, 데스크톱 등 다양한 프로세서 환경에서 동작하는 SplashID 같은 제품에 이상적인 선택이 됩니다.

주요 기술 사양

블로우피시는 64비트 블록 크기를 사용하며, 키 길이는 32비트부터 448비트까지 가변적으로 설정할 수 있습니다. 16라운드로 구성된 파이스텔(Feistel) 암호 구조를 따르며, 키에 따라 달라지는 대형 S-박스(S-box)를 필요로 합니다. 이는 고정 S-박스를 사용하는 CAST-128과 구조적으로 유사하지만, S-박스 운용 방식에서 차이를 보입니다.

신경망을 활용한 구현 방안

블로우피시는 가장 널리 사용되는 알고리즘 중 하나지만, 상당한 연산 능력을 요구하고 일부 요소로 인해 공격자의 표적이 될 수 있습니다. 이를 보완하기 위해 S-박스 크기를 줄이고 이를 신경망(Neural Network, NN)으로 구현하는 접근법이 연구되고 있습니다.

신경망의 입력은 평문 또는 암호문 텍스트이며, 네트워크에서 얻는 출력 역시 동일한 텍스트입니다. 암호화와 복호화에 모두 사용되는 키는 역전파(backpropagation) 네트워크로 학습된 신경망의 초기 가중치입니다.

키 확장과 서브키 생성

블로우피시는 독특한 방식의 키 생성 과정을 거칩니다. 루틴의 핵심 요소인 키 확장(key expansion)은 최대 448비트의 단일 키를 4168바이트 크기의 서브키(subkey) 테이블로 변환합니다. 서브키 생성은 보안을 한층 강화하는데, 해커가 원래 키만이 아니라 그 이상을 깨야 하기 때문입니다.

블로우피시 알고리즘의 견고함은 서브키 생성과 기본적인 혼돈(confusion)·확산(diffusion) 설계에 기반합니다. 블로우피시는 파이스텔 네트워크에 기반한 대칭 마스터 암호 시스템입니다.

정리

브루스 슈나이어가 소개한 이 알고리즘은 64비트 블록 크기의 암호로, 완전한 버전은 블록 암호를 완성하기 위해 16라운드를 거치며 다수의 서브키와 32비트에서 448비트까지의 가변 길이 키를 사용합니다.