티스토리 뷰

Web

해시 함수

Liiot 2020. 2. 11. 00:03

1. 해시 함수

: 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수. 다른 말로 체크섬(checksum)이라고 불린다.

 

다양한 해시 알고리즘이 존재하는데 대표적으로 MD5, SHA 등이 있으며 해시 알고리즘마다 출력되는 해시값의 길이가

 

다르다. 해시 알고리즘 중 보안이 뚫린 것도 있기 때문에 SHA-256, SHA-512 등을 사용하는 것이 권고된다.

 

특징

  • 동일한 입력값에 대한 동일한 출력값을 가지고 있음

    (즉, 입력값이 바뀌지 않으면 출력값도 바뀌지 않음)

  • 입력값이 조금만 변경되어도 출력값은 완전히 달라짐

  • 입력값의 길이에 상관없이 고정된 길이의 해시값(다이제스트)이 출력됨

  • 단방향 함수 (암호화는 가능하지만 복호화는 불가)

 

용도

  • 자료구조: 해시 테이블 - 검색을 빨리하기 위함
  • 비밀번호 암호화: 단방향 함수이기 때문에 복호화할 수 없음
  • 메시지 인증 및 무결성 체크

 

2. 해시 함수의 문제점

그러나 해시 함수에도 문제점은 있다.

 

2.1 인식 가능성(recognizability)

입력값이 같으면 출력값이 같다는 성질 때문에 비밀번호가 같은 유저라면 모두 털릴 수 있다.

 

또한 해커들은 미리 레인보우 테이블을 만들어 두기 때문에 비밀번호를 털었다면 이를 레인보우 테이블에서 비교

 

대조하여 원래의 비밀번호를 알아낼 수 있다.

 

  • 레인보우 테이블: 입력값과 해시값을 연결해놓은 테이블

 

2.2 속도

해시 함수의 처리 속도가 빠르기 때문에 무차별 대입 공격을 당할 수 있다.

 

즉, 고성능의 GPU 등을 이용해서 무차별적으로 해시 함수를 대입해보면 1초에 약 50억번 이상 대입이 가능하기 때문에

 

대입하다보면 뚫을 수도 있다는 것이다.

 

3. 문제 해결 방법

3.1 솔트(Salt)

: 일종의 랜덤 텍스트

 

사용하는 주된 목적은 비밀번호에 솔트를 섞은 후 함께 해시하여 레인보우 테이블 자체를 무의미하게 만드는 것이다.

 

즉, 해커가 해시값을 알아내어도 레인보우 테이블에서 일치하는 비밀번호를 찾기 어려워지며 유저들의 비밀번호가

 

같더라도 부여되는 솔트 값은 다르기 때문에 해시값도 달라지게 된다.

 

이 때, 솔트는 최소 128bit 정도는 되어야 안전하다.

 

3.2 키 스트레칭(Key Stretching)

: 해시 함수를 여러 번 반복하여 강제적으로 1회 대입에 걸리는 시간을 높이는 방법

 

대입에 걸리는 시간이 조금만 길어져도 50억 번 이상 시도하기 위해서는 어마무시한 시간이 걸리기 때문에 해커들이

 

시도조차 하지 않는다. 또한 보통 유저들은 비밀번호를 간단하게 혹은 예측하기 쉽게 만드는 경우가 많은데 이 방법을

 

사용하면 더 예측하기 어렵게 만들어 진다.

 

 

 

그러나 가장 좋은 방법은 이미 검증된 key derivation function를 사용하는 것이다.

 

괜히 어설프게 구현하다 쉽게 뚫려버리는 수가 있으니...

 

대표적으로 PBKDF2, bcrypt, scrypt 등이 있다.

 


 

참고 자료

 

해시(hash)와 암호화(Encryption) 차이점, 사용 용도

해시(Hash)와 암호화(Encryption)의 차이점이 무엇인가요? 둘 다 암호화 기법이지만 Hash는 단방향 암호화 기법이고 Encryption은 양방향 암호화 기법이다. 쉽게 설명하면 Hash는 평문을 암호화된 문장(텍스트)으..

jeong-pro.tistory.com

 

해시함수(Hash Function)의 문제점과 해결

해시함수(Hash Function) 해시함수는 다른 말로 체크섬(checksum)이라고 불린다. 해시함수는 메시지 인증과 무결성 체크를 위해 존재하며, 종류는 MD5, SHA가 있다. 해시함수의 특징은 입력 값의 길이에 상관 없이..

gbsb.tistory.com

 

'Web' 카테고리의 다른 글

세션과 쿠키  (0) 2020.02.08
GET과 POST의 차이  (0) 2020.01.27
댓글