맨위로가기

블로피시

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

블로피시는 64비트 블록 크기와 32비트에서 448비트까지 가변적인 키 길이를 갖는 Feistel 암호 방식의 블록 암호이다. 16라운드의 암호화 과정을 거치며, 큰 키 의존적인 S-box를 사용한다. 암호화는 P-배열과 S-box를 초기화한 후, 16번의 라운드를 반복하며 진행된다. 복호화는 암호화와 동일하지만, P-배열을 역순으로 사용한다. 블로피시는 키를 변경할 때 사전 처리가 필요하며, OpenBSD의 bcrypt 비밀번호 해싱에 사용된다. 하지만 64비트 블록 크기로 인해 생일 공격에 취약하며, 개발자 브루스 슈나이어는 후속작인 투피시로의 전환을 권장한다.

더 읽어볼만한 페이지

  • 블록 암호 - 데이터 암호화 표준
    데이터 암호화 표준(DES)은 미국 국립표준기술연구소에서 개발되어 널리 사용되었던 대칭키 암호 알고리즘이지만, 짧은 키 길이와 취약점 때문에 고급 암호화 표준(AES)으로 대체되었고, 트리플 DES 형태로 일부 시스템에서 사용되며 암호학 발전에 기여한 역사적 의미가 있다.
  • 블록 암호 - 고급 암호화 표준
    고급 암호화 표준(AES)은 미국 국립표준기술연구소에서 제정한 대칭 키 암호화 블록 암호 표준으로, 치환-순열 네트워크 구조에 기반하여 128비트 블록 크기와 다양한 키 크기를 지원하며, 빠른 속도와 효율성으로 널리 사용된다.
블로피시
개요
이름블로피시
종류블록 암호
설계자브루스 슈나이어
발표 년도1993년
기반없음
파생투피시
키 크기32–448 비트
블록 크기64 비트
구조파이스텔 네트워크
라운드 수16
암호 해독블로피시 4라운드는 2차 차분 공격에 취약함 (Rijmen, 1997).
취약 키의 경우 14라운드 블로피시를 의사무작위 치환과 구별이 가능함 (Vaudenay, 1996).

2. 알고리즘

블로피시는 1993년 브루스 슈나이어가 개발한 대칭 블록 암호이다. 블록 크기는 64비트이며, 키 길이는 32비트에서 448비트까지 가변적이다. DES나 IDEA보다 빠른 것으로 알려져 있다. 특허가 취득되지 않아 라이선스 없이 사용할 수 있는 암호화 방식으로, SSH나 파일 암호화 소프트웨어 등에서 널리 사용되고 있다.

블로피시는 64비트 블록 크기와 32비트에서 448비트까지의 가변적인 키 길이를 가진다.[2] 16라운드의 파이스텔 암호이며, 큰 키 의존적인 S-box를 사용한다. 구조는 고정된 S-box를 사용하는 CAST-128과 유사하다.

블로피시의 파이스텔 구조


P-배열의 길이가 576 비트이고, 초기화 동안 키 바이트가 이 576 비트 전체에 걸쳐 XOR되기 때문에 많은 구현에서 최대 576 비트의 키 크기를 지원한다. 이는 448비트 키를 사용하는 원래 블로피시 설명과 576비트 키를 사용하는 레퍼런스 구현 간의 불일치 때문이다. 타사 구현을 검증하기 위한 테스트 벡터 역시 576비트 키로 생성되었다. 어떤 블로피시 버전이 올바른지 질문을 받았을 때, 브루스 슈나이어는 "테스트 벡터를 사용하여 유일하게 올바른 블로피시를 결정해야 한다"고 답했다.

P-배열의 마지막 네 값은 암호문의 모든 비트에 영향을 미치지 않으므로, 모든 하위 키의 모든 비트가 키의 모든 비트에 의존하도록 하기 위해 448 비트 제한이 있다는 견해도 있다.[2]

2. 1. 암호화 과정

블로피시는 16라운드의 파이스텔 암호 구조를 사용하며, 각 라운드는 다음과 같은 4가지 동작으로 구성된다.[3]

동작설명
동작 1데이터의 왼쪽 절반(L)을 r 번째 P-배열 항목과 XOR 한다.
동작 2XOR된 데이터를 블로피시의 F-함수의 입력으로 사용한다.
동작 3F-함수의 출력을 데이터의 오른쪽 절반(R)과 XOR한다.
동작 4L과 R을 교환한다.



F-함수는 32비트 입력을 8비트 4개로 분할하고, 이 4개를 S-box의 입력으로 사용한다. 각 S-box는 8비트 입력을 받아 32비트 출력을 생성한다. S-box의 출력은 모듈로 232로 더해지고 XOR되어 최종 32비트 출력을 생성한다.[3]

16번째 라운드 후, 마지막 교환을 취소하고 L을 P-배열의 18번째 요소(K18)와 XOR하고 R을 P-배열의 17번째 요소(K17)와 XOR한다 (출력 화이트닝).[3]

2. 2. 복호화 과정

블로피시의 복호화 과정은 암호화 과정과 거의 동일하며, P-배열(P1, P2, ..., P18)을 역순으로 사용한다는 차이점이 있다. 즉, 암호화 과정에서 P-배열을 P[0]부터 P[17]까지 순서대로 사용했다면, 복호화 과정에서는 P[17]부터 P[0]까지 역순으로 사용한다.

복호화 과정은 다음과 같다.

1. 초기화: 암호화된 텍스트를 32비트의 왼쪽 절반(L)과 오른쪽 절반(R)으로 나눈다.

2. 16 라운드 반복: 17부터 2까지 감소하는 각 라운드(round)에 대해 다음 과정을 반복한다.

  • L = L XOR P[round]
  • R = f(L) XOR R
  • L과 R의 값을 서로 바꾼다.


3. 마지막 단계:

  • L과 R의 값을 다시 한번 서로 바꾼다.
  • R = R XOR P[1]
  • L = L XOR P[0]


4. 결합: 최종적으로 L과 R을 다시 결합하여 복호화된 텍스트를 얻는다.

여기서 함수 f는 다음과 같이 정의된다.

1. 입력: 32비트 값 x를 입력으로 받는다.

2. 바이트 분리: x를 4개의 8비트 값으로 분리한다.

  • high_byte: x를 24비트 오른쪽으로 시프트
  • second_byte: x를 16비트 오른쪽으로 시프트한 후 0xff와 AND 연산
  • third_byte: x를 8비트 오른쪽으로 시프트한 후 0xff와 AND 연산
  • low_byte: x와 0xff를 AND 연산

3. S-box 적용:

  • h = S[0][high_byte] + S[1][second_byte]
  • h = (h XOR S[2][third_byte]) + S[3][low_byte]

4. 출력: h 값을 반환한다.

복호화 과정은 암호화 과정과 동일한 함수 f와 S-box를 사용하며, P-배열의 순서만 반대로 적용하여 원래의 평문을 복원한다.

2. 3. 키 스케줄링

블로피시의 키 스케줄링은 π의 16진법 숫자로 파생된 값으로 P-배열과 S-box를 초기화하는 것으로 시작하며, 이는 명확한 패턴을 포함하지 않는다(nothing up my sleeve number 참조).[18] 그 다음 비밀 키는 필요하다면 키를 반복하면서 바이트별로 모든 P-항목과 순서대로 XOR 연산한다. 그 다음 64비트의 모든 0 블록이 알고리즘으로 암호화된다. 결과 암호문은 P1과 P2를 대체한다. 같은 암호문은 새로운 하위 키로 다시 암호화되고, 새로운 암호문은 P3과 P4를 대체한다. 이 과정은 전체 P-배열과 모든 S-box 항목을 대체할 때까지 계속된다. 블로피시 암호화 알고리즘은 모든 하위 키를 생성하기 위해 총 521번 실행되며, 약 4KB의 데이터가 처리된다.[2]

3. 블로피시의 실제 활용

블로피시는 블록 암호의 하나로, 키 변경을 제외하면 속도가 빠르다. 새로운 키마다 약 4KB의 텍스트를 암호화하는 수준의 사전 처리가 필요한데, 이는 다른 블록 암호에 비해 매우 느린 편이다.[4]

OpenBSD는 블로피시의 이러한 느린 키 스케줄을 활용, bcrypt라는 비밀번호 해싱 방법을 사용한다. 이는 추가적인 계산을 통해 사전 공격에 대한 방어력을 높인다. 블로피시는 4KB 남짓한 RAM 메모리 사용량을 보인다. 특허에 저촉되지 않아 누구나 자유롭게 사용할 수 있다.

bcrypt는 변경 가능한 반복 횟수와 비밀번호 해싱 함수를 결합, 블로피시의 복잡한 키 설정 단계를 활용하여 해시 계산의 작업량과 시간을 늘려 무차별 대입 공격의 위협을 줄인다.[4][5][6][7]

4. 취약점 및 후속 알고리즘

블로피시는 64비트 블록 크기를 사용하므로, HTTPS와 같은 환경에서 생일 공격에 취약하다. (예: AES의 128비트 블록 크기와 비교)[18] 2016년 SWEET32 공격은 64비트 블록 크기를 가진 암호에 대해 평문 복구(암호문 해독)를 수행하기 위해 생일 공격을 활용하는 방법을 보여주었다.[8] GnuPG 프로젝트는 작은 블록 크기 때문에 블로피시를 4GB보다 큰 파일을 암호화하는 데 사용하지 않도록 권장한다.[9][10]

브루스 슈나이어는 그의 블로피시 후속작인 투피시로 이전할 것을 권장했다.[13]

참조

[1] 간행물 Cryptanalysis and Design of Iterated Block Ciphers https://www.cosic.es[...]
[2] 간행물 Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish) https://www.schneier[...] Springer-Verlag
[3] 웹사이트 Cryptography: Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish) https://www.schneier[...] 2015-12-31
[4] 웹사이트 Bcrypt - Blowfish File Encryption http://bcrypt.source[...] 2015-08-29
[5] 웹사이트 bcrypt Free Download - whodunnit.tools.bcrypt http://bcrypt463065.[...] 2018-05-07
[6] 웹사이트 T2 package - trunk - bcrypt - A utility to encrypt files. http://www.t2-projec[...] 2018-05-07
[7] 웹사이트 Oracle GoldenGateのライセンス https://docs.oracle.[...] 2018-05-07
[8] 웹사이트 On the Practical (In-)Security of 64-bit Block Ciphers — Collision Attacks on HTTP over TLS and OpenVPN https://sweet32.info[...] ACM CCS 2016 2016-08
[9] 웹사이트 GnuPG Frequently Asked Questions https://gnupg.org/fa[...] 2018-01-26
[10] 웹사이트 GnuPG Frequently Asked Questions https://gnupg.org/fa[...] 2018-01-27
[11] 웹사이트 A Reflection Attack on Blowfish http://karbalus.free[...] Journal of LATEX Class Files 2015-11-17
[12] 웹사이트 A New Class of Weak Keys for Blowfish https://www.iacr.org[...] FSE 2007 2007-03
[13] 웹사이트 Bruce Almighty: Schneier preaches security to Linux faithful https://www.computer[...] Computerworld 2018-01-26
[14] 웹사이트 Blowfish2 included in Feepascal https://gitlab.com/f[...]
[15] 웹사이트 Blowfish2 on Github https://github.com/r[...]
[16] 간행물 Cryptanalysis and Design of Iterated Block Ciphers https://www.cosic.es[...]
[17] 저널 Cryptanalysis and Design of Iterated Block Ciphers https://www.cosic.es[...]
[18] 저널 Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish) http://www.schneier.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com