해시(Hash), 솔트(Salt), 레인보우 테이블(Rainbow Table) 정리
해시(Hash), 솔트(Salt), 레인보우 테이블(Rainbow Table) 정리
회원가입 시 비밀번호를 입력하면, 서버는 이를 그대로 저장하지 않는다.
만약 누군가 데이터베이스를 털어갔을 때 사용자 비밀번호가 그대로 노출된다면 큰 사고로 이어지기 때문이다.
그래서 대부분 해시(Hash)라는 방법을 이용해 비밀번호를 암호화하고, 추가 보안으로 솔트(Salt)를 사용하며, 이를 무력화하기 위한 공격 기법으로 레인보우 테이블이 활용된다.
이번 글에서는 이 세 가지를 깔끔하게 정리해본다.
해시(Hash)란?
해시는 임의의 데이터를 고정된 길이의 문자열로 변환하는 암호학적 함수다. 원본 데이터가 조금만 바뀌어도 전혀 다른 값이 출력되며, 같은 입력값에는 반드시 같은 결과가 나온다.
주요 특징
- 일방향성 : 해시값만으로 원본 값을 복원할 수 없음
- 충돌회피성 : 서로 다른 데이터가 같은 해시값을 갖지 않도록 설계
- 고정 길이 출력 : 입력 데이터 길이와 상관없이 고정된 크기의 값 반환
많이 쓰는 해시 알고리즘
- MD5 / SHA-1 (이제 보안상 취약해 잘 안 씀)
- SHA-256, SHA-512 (현재 많이 사용)
- bcrypt, scrypt, Argon2 (비밀번호 해싱 전용)
해시값 변환 사이트
SHA1 online
sha-1 md5 md2 md4 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 ha
www.sha1-online.com
솔트(Salt)란?
솔트는 비밀번호에 무작위 값(임의 문자열)을 추가해 해싱하는 방법이다. 같은 비밀번호라도 서로 다른 해시값이 나오게 만들어서 레인보우 테이블 공격을 방지할 수 있다.
솔트를 쓰는 이유
만약 같은 비밀번호를 가진 사용자가 여러 명 있을 경우, 같은 해시 알고리즘만 적용하면 결과가 똑같아진다. 이를 노리고 공격자는 dictionary attack이나 레인보우 테이블로 손쉽게 해시값을 역으로 추정할 수 있다.
그래서 비밀번호마다 고유한 솔트를 붙여 해싱하면, 동일한 비밀번호도 전혀 다른 해시값이 생성된다.
비밀번호 저장 예시
비밀번호 1234에 asdf1234라는 솔트를 붙여서 1234asdf1234를 해싱하면, 아까와는 전혀 다른 해시값이 나온다.
이때 솔트 값은 일반적으로 함께 저장하고, 비밀번호 검증 시에도 같은 솔트를 붙여 해싱 후 비교한다.
레인보우 테이블(Rainbow Table)이란?
레인보우 테이블은 미리 다양한 비밀번호와 그에 대한 해시값을 계산해놓은 해시값-원본값 사전이다.
해시값만 보고 빠르게 원본 값을 찾기 위한 공격 기법이다.
작동 방식
- 공격자가 자주 쓰이는 비밀번호 목록을 준비함
- 이 목록을 해시 알고리즘으로 변환
- 해시값 - 원본값 쌍으로 테이블 구축
이렇게 만들어진 테이블을 이용해 서버에서 탈취한 해시값과 대조하여 비밀번호를 알아낸다
위험한 이유
해시값만 있으면 빠르게 원본을 추정 가능
특히 솔트가 없거나 고정값이면 쉽게 역산 가능
'Security > 보안 용어' 카테고리의 다른 글
RokRAT 악성코드 (0) | 2025.08.01 |
---|---|
백도어 & BPFdoor (0) | 2025.07.15 |
SEO(검색 엔진 최적화)와 SEO Poisoning 공격 (0) | 2025.07.09 |
사이버 공격 정리 (1) | 2025.07.07 |
악성코드의 종류와 특징 (1) | 2025.07.07 |