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이란?

미리 계산된 해시값 목록을 활용하여 빠르게 원래 입력을 찾아내는 공격 방법 입니다.

해시함수 자체를 깨는 것이 아니라 해시값 -> 원래 입력을 빠르게 찾으려고 하는 사전 공격의 일종입니다.

 

레이보우 테이블 공격의 원리

  1. 공격자는 비밀번호 후보 리스트를 준비
    (ex. 123456, password, qerty, abc123..)
  2. 각 후보를 해시함수에 넣어 해시값을 미리 계산
  3. 해시값을 테이블에 저장. 이것을 레인보우 테이블이라고 함
  4. 추후 유출된 해시값이 있을 때 레인보우 테이블에 해당 해시값이 저장되어 있는지 검색하고, 해시값이 존재할 경우 입력 메시지를 알아낼 수 있음

 

레인보우 테이블의 장점

  • 한번 만들어놓으면 여러 공격에 재사용이 가능함
  • 계산을 미리 해놨으므로 매우 빠르게 공격이 가능함

 

레인보우 테이블 공격의 방어 방법

  • Salt를 사용
    • 비밀번호에 고유의 Salt(랜덤 데이터)를 추가하여 해시를 수행
    • 같은 비밀번호라도 다른 해시값이 생성되므로 레인보우테이블 공격을 무력화할 수 있음
비밀번호: 'password'
Salt: 'X8t!2'
해시값: H('passwordX8t!2')
  • 비밀번호 복잡도 강화
    • 복잡하고 긴 비밀번호를 사용하여 레인보우 테이블을 만들기 어렵도록 함

 

 

728x90

+ Recent posts