지난 포스팅에서는 현실에서 사용하는 암호화 알고리즘들과 그 장단점을 살펴보고, 로그인 기능에 적합한 해시 알고리즘에 대해 알아보았는데요. 이번에는 해시 알고리즘들이 어떤 종류가 있고, 각각의 장단점에 대해 알아보도록 하겠습니다.
목차
1. 문제 시나리오 분석
2. 해시 알고리즘 종류
3. BruteForce 공격 방어 알고리즘
4. 분석
#1 문제 시나리오 분석
시나리오 : 한 회사가 SHA-2 알고리즘을 이용하여 로그인 시스템을 구축함. 해시 알고리즘을 사용했기 때문에 보안 취약점을 간과하고 운영을 계속함. 악의적인 사용자가 BruteForce 공격을 통해 비밀번호를 유출시킴. 위에 대응하기 위해 해시 알고리즘을 다른 종류의 알고리즘으로 대체하려고 함.
요약
- 해시 알고리즘이더라도 보안 취약점이 존재함.
- BruteForce 공격으로 일부 해시 알고리즘을 무효화시킬 수 있음.
BruteForce라는 단어를 들어보셨는지요? 아마 컴퓨터 계열 전공생이시거나 관련 분야를 공부하고 계신 분이라면 한 번쯤 들어보셨을 것 같습니다. BruteForce란 모든 경우의 수를 계산하여 결과를 도출해 내는 일종의 알고리즘입니다.
즉, BruteForce 공격이란 보안 취약점을 찾아내기 위해 가능한 모든 비밀번호의 조합을 시도하는 방식입니다. BruteForce 공격의 원리는 다음과 같습니다.
- 악의적인 사용자가 데이터베이스에 접근하여 해시 값을 수집함.
- 비밀번호를 만들 수 있는 모든 경우의 수로 조합을 시도함. (000000 ~ 999999)
- 각 비밀번호를 해시 알고리즘을 사용하여 해시 값을 생성함.
- 생성된 해시 값을 수집했던 해시 값과 비교함.
비교했을 때, 두 값이 서로 일치하면, 공격자가 생성한 비밀번호 조합이 수집한 해시 값의 평문 비밀번호임을 알 수 있습니다. 이와 같은 상황을 방지하기 위해서는 새로운 해시 알고리즘을 사용해야 합니다. 해시 알고리즘들 중에서는 브루트포스 공격을 방어하는 알고리즘이 일부 존재합니다. 먼저, 해시 알고리즘들의 종류와 각각의 특성을 알아보도록 하겠습니다.
#2 해시 알고리즘 종류

🔑 SHA 해시 알고리즘
SHA 해시 알고리즘은 총 세 가지의 버전으로 존재합니다.
- SHA-1 : 160비트의 해시 값을 생성함. 보안 취약점이 다수 존재하여 거의 사용 안 함.
- SHA-2 : 256비트, 512비트 등의 다양한 비트의 해시 값을 생성함. 보안성이 우수하지만 완전히 취약점이 없는 것이 아니기 때문에 서명, 무결성 검사 등에 사용함.
- SHA-3 : 다양한 비트의 해시 값을 생성함. 위 두 버전보다 비교적 더 안전함.
SHA 해시 알고리즘은 가장 널리 사용되는 암호화 알고리즘입니다. 하지만 취약점이 어느 정도 존재하기 때문에, 개인정보를 저장하는 용도나 큰 프로젝트에서는 사용하기가 적절하지는 않습니다. 제가 이전에 포스팅했던 웹 로그인 보안 및 성능 개선 프로젝트에서는 SHA-256 알고리즘을 사용했었지만, 실제로 운영되고 사용되기 위해서는 더욱 안전한 해싱 알고리즘이 필요합니다.
🔑 MD5 해시 알고리즘
옛날에 사용되었던 128비트 해싱 알고리즘이지만, 해싱 알고리즘들 중에서 가장 보안성이 낮아 최근에는 거의 사용을 하지 않습니다.
🔑 Bcrypt, Scrypt, Argon2 해시 알고리즘
위 세 해시 알고리즘은 모두 공통점을 가지고 있습니다.
- Bcrypt : 해시 생성에 비용 인자를 사용하여 비용을 높임.
- Scrypt : 해시 생성에 많은 메모리를 사용함.
- Argon2 : 해시 생성에 메모리와 계산 시간을 조절함.
세 해시 알고리즘들은 #3에서 설명해 드리겠습니다. :)
이렇게 다양한 해싱 기법들이 존재합니다. 그렇다면 지금까지 설명드렸던 해시 알고리즘들 중, 가장 보안성이 뛰어난 알고리즘은 무엇일까요?
#3 BruteForce 공격 방어 알고리즘
가장 보안성이 뛰어난 해싱 기법은 바로 Bcrypt, Scrypt, Argon2입니다. 다들 공통점을 찾으셨을까요? 공통점은 바로 해시 생성에 비용(cost)을 늘린다는 점입니다. 비용을 늘리기 때문에 복호화를 하는데 더 많은 시간을 소요하게 되는데요. 이는 BruteForce 공격에 더욱 많은 시간을 걸리게 함으로써 방어합니다. 위 세 알고리즘은 현재 운영되고 있는 웹 사이트들이 사용하고 있는 알고리즘들입니다.
그럼 저 해시 알고리즘들만 쓰면 BruteForce 공격에는 안심해도 되겠네요?라고 하실 수도 있어요. 물론 BruteForce 공격에는 확실히 내구성이 좋지만, 계산이 비교적 빠른 컴퓨터에게는 여전히 취약할 수 있습니다. 또한 BruteForce 공격만이 아닌 사전 공격(Dictionary Attack), 레인보우 테이블 공격(Rainbow Table Attack) 등이 존재해요. 그럼 어떻게 해야 할까요? 실제로 많은 기업들은 세 해싱 알고리즘에 추가 보안 조치를 합니다.
- 솔트(Salt) : 동일한 비밀번호가 다른 해시 값을 가지도록 함.
- 페퍼(Pepper) : 비밀 값을 추가하여 해싱을 함.
솔트와 페퍼 같은 기법들을 활용하여 보안성을 더욱 끌어올립니다. 이외에도 사용자에게 더욱 복잡한 비밀번호와 특수문자 조건 등을 요구하는 방법도 존재합니다.
#4 분석
해싱 알고리즘들을 뚫는 BruteForce 공격, 레인보우 테이블 공격, 사전 공격 등의 여러 해킹 방식이 존재합니다. 이것을 방어하기 위해서는 보안성이 우수한 Bcrypt, Scrypt와 같은 해싱 알고리즘을 사용하고, 추가적인 방어를 위해 솔트(Salt)와 페퍼(Pepper)와 같은 부가적인 보안 요소도 추가해야 합니다. 그러나 컴퓨터의 속도와 성능이 발전하고 있기 때문에, 100% 방어를 보장할 수 없습니다. 따라서 기업과 사용자는 주기적인 비밀번호 변경과 이중 인증, 보안 점검, 모니터링 등과 같은 방어 체계를 추가적으로 구축해야 합니다.
'Computer Science' 카테고리의 다른 글
| 데이터 불균형 문제 해소를 위한 SMOTE와 SMOTEENN 샘플링 기법 (0) | 2025.08.26 |
|---|---|
| B+트리를 활용하여 DB 인덱싱하기 (0) | 2024.07.23 |
| 대규모 데이터베이스 성능 향상을 위한 샤딩 알고리즘 (0) | 2024.07.14 |
| 데이터베이스 정규화와 성능 최적화 전략 (0) | 2024.07.04 |
| BruteForce 공격 방어를 위한 해싱 알고리즘 #1 (0) | 2024.07.02 |