해쉬(알고리즘)

최근 편집: 2023년 1월 6일 (금) 15:46

개요

해쉬(영어: Hash) 알고리즘 또는 해쉬 함수는 어떤 데이터를 숫자로 나열하는 방법이다.

해쉬 알고리즘을 통해 나온 숫자를 해쉬 값, 해쉬 코드, 해쉬 체크섬 등으로 말한다. 해쉬 값은 보통 그 값이 8바이트 내로 표현하기에는 매우 크기 때문에 10진수 보다는 16진수로 표현하는 것이 일반적이다. 다만 해쉬 테이블에 사용하기 위한 해쉬 값의 크기는 보통 4바이트, 많으면 8바이트로 표현할 수 있을 만큼 작기 때문에 10진수로 표현하기도 한다.

용도

해쉬 테이블

컴퓨터 프로그래밍에서 데이터 컨테이너 객체에서 데이터에의 접근에 해쉬 값을 이용하는 것을 해쉬 테이블(영어: Hash Table), 맵(영어: Map), 딕셔너리(영어: Dictionary) 등으로 부르는데, 이 해쉬 값을 만들 때 해쉬 알고리즘이 사용된다.

단방향 암호화

암호화를 위한 해쉬 값은 역함수가 존재하지 않도록 만들어진다. 이 말은 해쉬 값을 통해 원래의 데이터를 알아내는 것이 불가능하다는 것을 말하며, 이는 단방향 암호화에 사용된다. 패스워드 등의 원본 데이터를 몰라도 무관한 암호화에 해쉬 알고리즘이 사용된다.

다만 역함수가 없다 뿐이지, 어떤 데이터에 따른 어떤 해쉬 값을 매핑하여 정리한 레인보우 테이블이라는 것이 존재한다.

단방향 암호화에 많이 사용되는 해쉬 알고리즘은 다음과 같은 것들이 있다.

데이터 무결성 검증

데이터의 크기는 무한정하지만 해시 값의 크기는 그에 비해 매우 짧을 수 있다. 특히나 해쉬 값은 숫자이므로 해쉬 값 저장에도 많은 바이트가 들어가지 않는다.

이를 응용해 데이터에 대한 해쉬 값을 만들어 다른 곳에서 사용될 때 무결성 검증에 사용할 수 있다.

무결성 검증에 많이 사용되는 해쉬 알고리즘은 다음과 같은 것들이 있다.