Home

오늘의 기억

[보안] 암호화 해시 (Cryptographic hash function)


해시 (Hash)

해시란 쉽게 말해 데이터를 텍스트 형식의 암호화 된 문장으로 만들어 주는 것을 의미한다. 이러한 해시는 단방향이며, 하나의 input에 대해 하나의 output이 출력되어 해시 함수라고도 부른다.


특징

  • 해시 함수에 입력되는 데이터의 길이가 달라도, 출력되는 해시 값의 길이는 모두 같다.
  • 입력 값의 아주 일부만 변경되어도 전혀 다른 해시 값을 반환한다.
  • 출력된 값을 토대로 입력 값을 유추할 수 없다.
  • 동일한 입력 값에 대해서는 항상 동일한 해시 값을 반환한다.

종류

해시를 제공하는 해시 함수들은 무척 많다. 또한 각각의 해시 함수들은 모두 알고리즘이 다르다. 대표적으로 MD5, SHA1, SHA256, SHA512 등이 있는데, 이 중에서는 보안에 취약한 해시 함수들도 존재한다. MD5와 SHA1이 이에 해당한다.
따라서 더욱 안전한 SHA256이나 SHA512를 사용하기를 권장한다.


활용

해시의 특징을 이용해 사용자 인증시 이용하는 경우가 많다. 비밀번호를 해시 값으로 저장한 뒤, 사용자가 입력한 값을 동일한 해시 함수를 이용해 출력 된 해시 값 끼리 비교하는 방식이다.
그러나 해시를 이용했다고 해서 100% 안전한 것은 아니다. 왜냐하면 해커가 무차별적으로 임의의 값을 입력하면서 비밀번호를 알아낼 수 있기 때문이다.
따라서 이런 점을 보완하기 위해 솔트(Salt) 를 이용하는 방법이 있고, 해시 함수를 여러번 수행 하는 방법이 있다.
솔트를 이용하는 방법은 사용자마다 고유의 솔트 값을 생성해 솔트 값과 비밀번호를 동시에 해시 값을 구하는 것이며, 해시 함수를 여러번 수행하는 방법은 하나의 값을 여러번 해시 함수를 수행하여 이를 해독하려면 시간이 배로 들게 하는 방법이다.


마치며..

이러한 해시를 이용하여 사용자 인증이나 데이터 무결성 검사, 요즘에는 블록 체인까지도 아주 중요한 개념으로 사용되고 있다. 어떻게 보면 가장 기초적인 개념이고 그만큼 간단한 내용이니, 만약 해시 함수를 사용한다면 이런 기본적인 내용은 알고 사용하는게 좋을 것 같다.

20190416 Charyum.Park