언뜻 봐서는 해시태그랑 관련이 있을 것 같은데 해시태그는 해시(#)를 태그여서 해시 태그이고, 여기서 말하려고 하는 해시와는 완전히 다르다. 해시(Hash)
는 해시 함수(Hash Funtion)/해시 알고리즘(Hash Algorithm)을 지칭하는 말이고, 이 함수는 임의 길이의 데이터를 고정 데이터 길이로 매핑하는 함수를 말한다. 이 함수에 의해서 얻어지는 값을 해시 값이라고 하는데 이러한 알고리즘을 이용한 암호화 해시 함수(Cryptographic Hash Function)이 탄생했다!
SHA
나 DSA
등 현재도 해시 함수를 이용한다.
(다이제스트는 해시 함수를 통해서 암호화된 메시지를 말한다.)
말 그대로... 정보를 암호화된 형태로 변경하는데 그때 특정 알고리즘을 이용해서 암호화한다는게 중요한 특징이라고 할 수 있다. 암호화한 정보는 이것을 짚어가면서 풀어가는 복호화 과정을 거쳐야 다시 읽을 수 있다.
암호화에는 단방향 암호화와 양방향 암호화가 있다.
왜 굳이 암호화 방식을 설명했냐면 해시 함수가 바로 단방향 암호화 방식이기 때문이다.
그건 또 아니다. 위에서 언급한 SHA
의 경우 미국의 NIST(미국 국립표준기술연구소)에서 제정한 암호화 해시 함수로 Secure Hash Algorithm, 즉 안전한 해시 알고리즘이라는 뜻인데... 굉장히 활발하게 쓰였으나 안전하지 않은 것이 판명되어서 새로운 버전인 SHA-1
이 나왔을 즈음에는 연구소에서 사용을 중지시킨 역사가 있다.
그러면 왜 안전하지 않다고 판명되었나? 왜냐면 최근엔 컴퓨터 성능이 너무 좋아져서 비밀번호의 길이가 짧은 경우 이 다이제스트를 추측하고 암호화된 비밀번호를 해독하기 위해 다이제스트를 하나하나 대입하는 무식한 방법이 일반 컴퓨터로도 그다지 짧지 않은 시간이 걸리기 때문이었다고 한다.
또한 이 암호화 알고리즘의 대부분이 공개되어있기 때문에 위의 방법처럼 맘먹고 시도를 하면 비밀번호 탈취가 충분히 가능하다. (그렇다고 함부로 시도했다가는 형사처벌 될 수 있으니 주의)
해시 함수의 취약점을 보완하기 위한 방법이 두 가지가 있다. 하나는 솔트(Salt),
나머지 하나는 키 스트레칭(Key Stretcing)
이다.
bcrypt
알고리즘이 쓰인다고 하는데 잘 모른다... 강력한 해시 알고리즘이라고 한다...