<Bcrypt>
Bcrypt는 비밀번호를 안전하게 해시하고 저장하기 위한 알고리즘으로, 보안이 중요한 애플리케이션에서 널리 사용됩니다. 다음은 Bcrypt의 장단점입니다.
장점
- 보안성: Bcrypt는 해시 알고리즘에 소금값(salt)을 추가해 같은 비밀번호라도 서로 다른 해시 값을 생성하여 레인보우 테이블 공격을 방어합니다.
- 계산 비용 조정 가능: Bcrypt는 작업 비용(work factor)을 조정할 수 있어, 하드웨어가 발전하더라도 해시를 생성하는 데 시간이 걸리도록 만들 수 있습니다. 이를 통해 시간이 지나도 안전한 비밀번호 관리를 할 수 있습니다.
- 사용 용이성: 많은 프로그래밍 언어와 라이브러리에서 Bcrypt를 쉽게 사용할 수 있도록 지원합니다.
- 평판: Bcrypt는 수년간 많은 보안 전문가에 의해 검증된 알고리즘이므로 신뢰할 수 있습니다.
단점
- 속도: Bcrypt는 의도적으로 속도가 느리도록 설계되어 있어, 비밀번호를 해시하거나 검증할 때 시간이 더 오래 걸릴 수 있습니다. 이는 보안상 좋은 점이지만, 많은 사용자가 동시에 인증을 시도하는 애플리케이션에서는 성능 문제가 발생할 수 있습니다.
- 메모리 사용량: Bcrypt는 Argon2와 같은 다른 최신 알고리즘에 비해 메모리 사용량이 적어, 일부 공격(예: GPU 기반 공격)에서 더 취약할 수 있습니다.
- 최대 비밀번호 길이 제한: Bcrypt는 72자까지만 해시할 수 있으며, 이보다 긴 비밀번호는 잘리므로 비밀번호가 손상될 수 있습니다.
- 미래 보장성: 기술이 계속 발전하면서 Bcrypt의 보안성이 약해질 수 있으며, Argon2와 같은 더 나은 알고리즘이 이미 존재하고 있습니다.
<BlowFish>
특히나 Bcrypt는 blowfish 라는 1993년 브루스 슈나이어가 설계한 키(key) 방식의 대칭형 블록 암호 를 기반으로 작동하는 알고리즘인데요 다음은 blowfish의 주요 특징들 입니다.
Blowfish의 주요 특징
- 블록 크기: Blowfish는 64비트 블록 크기를 사용합니다. 이는 데이터를 64비트 단위로 나누어 암호화 및 복호화를 수행함을 의미합니다.
- 키 길이: Blowfish는 32비트에서 448비트까지의 가변 키 길이를 지원합니다. 이를 통해 보안 요구 사항에 맞춰 유연하게 키를 설정할 수 있습니다.
- Feistel 구조: Blowfish는 Feistel 네트워크 구조를 사용하여, 여러 라운드에 걸쳐 데이터를 반복적으로 암호화합니다. 기본적으로 16라운드로 구성되어 있으며, 이 과정을 통해 높은 보안성을 제공합니다.
- 공개 알고리즘: Blowfish는 공개된 알고리즘으로, 누구나 접근하고 사용할 수 있어 보안 커뮤니티에 의해 검증되었습니다.
여기서 저는 정보보안 쪽으로 공부를 하고 있기 때문에, 취약점에 대해서 생각을 더 해보았는데요.
<Bycrypt의 취약점>
1. GPU 기반 공격에 대한 취약성
- 설명: Bcrypt는 비교적 적은 메모리를 사용하고, 주로 CPU 성능에 의존하는 구조입니다. 이는 현대의 GPU(그래픽 처리 장치)와 같은 병렬 처리가 가능한 하드웨어를 이용한 공격에 더 취약해질 수 있습니다.
- 문제점: GPU는 CPU에 비해 많은 코어를 가지고 있어 대량의 연산을 동시에 수행할 수 있습니다. Bcrypt의 낮은 메모리 의존성 덕분에 GPU가 Bcrypt 해싱을 병렬적으로 효율적으로 처리할 수 있어, 비밀번호 해시를 빠르게 브루트 포스(무작위 대입)로 풀 수 있는 가능성이 커집니다.
- 대안: Argon2와 같은 최신 알고리즘은 메모리 사용량을 조절할 수 있어, 메모리를 많이 사용하는 설정으로 GPU 공격에 더 강하게 방어할 수 있습니다.
- 결론: 위의 영상과 같이 높은 사양의 GPU로 병렬연산 공격을 하게 된다면 보안이 뚫린다는 취약점이 존재합니다.
2. SHA-2 기반 해시 구조의 한계
- 설명: Bcrypt는 원래 SHA-2와 같은 해시 함수 구조를 기반으로 설계되었습니다. SHA-2 자체는 안전한 해시 함수이지만, 최신 알고리즘에서 더 강력한 해시 구조와 보호 기법을 사용하는 경향이 있습니다.
- 문제점: 시간이 지나면서 공격 기술이 발전함에 따라 SHA-2 기반 구조가 더 이상 충분하지 않을 수 있습니다. 특히, 해시를 빠르게 계산하는 새로운 방식의 공격이 나올 경우 Bcrypt의 보안성에 취약점이 생길 수 있습니다.
- 대안: Argon2와 같은 알고리즘은 최신의 보안 요구 사항을 충족하도록 설계되었으며, GPU 및 기타 병렬 처리 기반의 공격에 더 강력한 방어를 제공합니다.
3. 리소스 사용의 비효율성
- 설명: Bcrypt는 비밀번호 해시를 생성하는 데 시간이 많이 소요되도록 설계되었기 때문에(의도적으로 느리게), 애플리케이션의 부하가 높은 환경에서 성능 문제가 발생할 수 있습니다.
- 문제점: 사용자가 동시에 많이 접속하는 시스템에서는 비밀번호를 검증하는 작업이 병목 현상을 일으킬 수 있으며, 특히 더 높은 ‘작업 비용’ 설정을 사용할 경우 이러한 문제가 더욱 두드러질 수 있습니다.
- 대안: 이를 완화하려면 시스템의 확장성을 고려하여 추가적인 리소스를 확보하거나, 보안 수준과 성능 간의 균형을 맞출 수 있는 최적의 ‘작업 비용’을 설정해야 합니다.
- 결론: 부하를 주는 DDOS공격과 브루트 포스 같은 무작위 대입 공격에 취약점이 존재합니다.
지금 Java를 사용한 Springboot에 대해서 공부중이었는데, Bcrypt로 암호를 생성하는 과정에서 이 암호법의 작동방식과 취약점에 대해서 궁금해져서 원래 알고 있던 지식들과 새로 알게된 사실들을 정리해봤습니다!
감사합니다 :)
728x90
'TIL(Today I Learned it)' 카테고리의 다른 글
TIL.33 Spring Security와 CSRF 보호 (2) | 2024.10.11 |
---|---|
TIL.32 JWT의 주의점 및 취약점 (1) | 2024.10.09 |
TIL.30 나는 코끼리가 싫어요 2 (3) | 2024.10.07 |
TIL.29 나는 코끼리가 싫어요 (0) | 2024.10.04 |
TIL.28 일정 관리 앱(웹페이지) Trouble Shooting (2) | 2024.10.02 |