728x90
1. 해시함수란?
해시함수는 임의의 길이를 가진 입력 데이터를 고저오딘 길이의 해시값으로 변환하는 함수입니다.
입력: "Hello World"
해시 값: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
출력 크기는 해시함수 알고리즘에 따라 설정됨
2. 해시함수의 특징
- 일방향성(One Way Function)
- 입력 -> 해시값은 쉽게 계산 가능
- 해시값 -> 입력으로 되돌리는 것은 어려움
- 충돌저항성(Collision Resistance)
- 서로 다른 입력이 동일한 해시값을 가질 확률이 극도로 낮음
- 하지만 이론적으로 가능
- 변경 민감성(Avalanche Effect)
- 입력데이터가 1bit만 변경되어도 출력 해시값은 완전히 달라짐
- 빠른 연산 속도
- 해시 계산은 매우 빠르게 이루어짐
- 2차 선이미지 회피성
- 주어진 입력 M1에 대해 같은 해시값을 가지는 다은 입력 M2를 찾는 것은 매우 어려움
3. 해시함수의 주요 용도
- 비밀번호 저장
- 비밀번호를 해시해서 저장 -> 원래 비밀번호는 서버에 없음
- 해시값만 저장 -> 탈취되어도 원래 비밀번호는 알수 없음
- 데이터 무결성 검증
- 파일이나 메시지가 변경되었는지 확인
- 해시값으로 비교 -> 다르면 변조된 것
- 디지털 서명
- 메시지의 해시값을 서명하여 인증
- 전체 메시지를 서명하는 것보다 빠르고 효율적
- 블록체인
- 블록의 연결, 작업 증명(Proof of Work)에 해시 사용
4. 주요 해시함수 종류
해시 함수 | 출력 길이 | 특징 |
MD5 | 128bit | 빠르지만 충돌 발생 보안상 매우 취약 |
SHA-1 | 160bit | 충돌 발생 사용이 권장되지 않음 |
SHA-256 | 256bit | 현재 가장 널리 사용되는 안전한 해시 |
SHA-3 | 256, 512bit | SHA-2와 구조적으로 다름 차세대 표준으로 여겨짐 |
5. 해시 함수 관련 주의사항
- 절대로 비밀번호를 해시없이 저장하지 말것
- Salt를 추가하여 Rainbow Table Attack을 방어해야 함
- 해시는 암호화가 아니라 지문 생성이라고 생각해야 함. 복호화가 불가능
* Rainbow Table Attack이란?
미리 계산된 해시값 목록을 활용하여 빠르게 원래 입력을 찾아내는 공격 방법 입니다.
해시함수 자체를 깨는 것이 아니라 해시값 -> 원래 입력을 빠르게 찾으려고 하는 사전 공격의 일종입니다.
레이보우 테이블 공격의 원리
- 공격자는 비밀번호 후보 리스트를 준비
(ex. 123456, password, qerty, abc123..) - 각 후보를 해시함수에 넣어 해시값을 미리 계산
- 해시값을 테이블에 저장. 이것을 레인보우 테이블이라고 함
- 추후 유출된 해시값이 있을 때 레인보우 테이블에 해당 해시값이 저장되어 있는지 검색하고, 해시값이 존재할 경우 입력 메시지를 알아낼 수 있음
레인보우 테이블의 장점
- 한번 만들어놓으면 여러 공격에 재사용이 가능함
- 계산을 미리 해놨으므로 매우 빠르게 공격이 가능함
레인보우 테이블 공격의 방어 방법
- Salt를 사용
- 비밀번호에 고유의 Salt(랜덤 데이터)를 추가하여 해시를 수행
- 같은 비밀번호라도 다른 해시값이 생성되므로 레인보우테이블 공격을 무력화할 수 있음
비밀번호: 'password'
Salt: 'X8t!2'
해시값: H('passwordX8t!2')
- 비밀번호 복잡도 강화
- 복잡하고 긴 비밀번호를 사용하여 레인보우 테이블을 만들기 어렵도록 함
728x90
'암호' 카테고리의 다른 글
메시지인증코드 GMAC 알고리즘 개념 및 동작과정 (0) | 2025.05.28 |
---|---|
블록암호 운영모드의 종류(ECB, CBC, CTR, CFB, OFB) (0) | 2025.05.05 |
한국암호모듈검증제도 KCMVP 개요 (0) | 2025.04.21 |
양자내성암호 Open Quantum Safe 프로젝트 (0) | 2025.04.19 |
블록암호 패딩알고리즘 개념 (0) | 2025.04.16 |