Hash란?
hashCode는 아무리 긴 문자열이라도 일정한 길이로 압축하는 함수입니다.
원리
해시의 원리의 예를 들어보자면,
저는 World라는 값을 암호화할 겁니다.
그리고 제가 임의로 만든 표로 값을 구해보죠.
해시 함수에 World를 넣으면, 일정한 알고리즘에 따라 암호화됩니다.
W | O | R | L | D |
7 | 2 | 4 | 3 | 9 |
위 표를 따라 W+O+R+L+D는
25가 됩니다. 이것은 WORLD의 해시값이 됩니다.
물론 저 표처럼 알고리즘이 쉽지는 않을 거예요.
하지만 이 알고리즘만으로도 25는 무슨 문자를 뜻하는지 모를 거예요.
그리고 해시 함수에 WORLD를 집어넣어도 똑같은 숫자가 나올 거고요.
그러므로 복호화가 불가능한 암호화 함수가 만들어진 거예요.
HELLO --> E2918LT92MF346MWWERT238이가 되면
E2918LT92MF346MWWERT238 -->????? 가 되는 것이죠.
하지만, 치명적인 단점이 있습니다.
바로 비둘기집 원리 때문인데요.
설명해보자면, 비둘기집은 x개인데, 비둘기는 x+1이라면,
어떤 비둘기집에는 1마리 이상의 비둘기가 들어가야 하는 것입니다.
자세한 설명은 아래 링크를 참고해주세요.
비둘기집 원리
그리고 또 다른 단점이 있습니다.
바로 다른 값을 해시함수에 넣었는데 같을 수도 있다는 건데요.
WORLD를 해시함수에 넣으면 25이지만 WWWR도 계산해보면 25입니다.
하지만 저렇게 알고리즘이 쉽지는 않을 테니,
어렵다면 겹칠 확률이 매우 낮겠죠.
많이 사용하는 용도.
많은 웹사이트가 왜 비밀번호 찾기를 했는데 비밀번호를 알려주지 않는지 아세요?
바로 웹사이트 DB에서도 찾을 수 없기 때문이에요. 왜냐하면 웹사이트 DB에 해시 함수에 넣지 않고 저장하게 된다면
웹사이트 관리자는 물론 그 웹사이트가 해킹당했을 때 당신의 정보를 모두 가져갈 수 있기 때문이에요.
만약 해시 함수로 저장하게 된다면, 웹사이트도 비밀번호를 모르고 잊어버렸다면
그저 바꿀 비밀번호를 다시 해시 함수에 넣어서 DB를 수정하면 되니까요.
혹시나 여러분들의 사이트에는 비밀번호 찾기를 했는데 비밀번호를 알려준다면 그 사이트를 이용하지 말아야 합니다.
Hash를 사용하면 제 비밀번호는 안전한 게 아닌가요?
- 아니요. 안전하지 않습니다. Hash로 사용해도 보안이 뚫리니 요즘은 SALT라는 것을 사용하고 있습니다. SALT에 대해서는 나중에 따로 공부해서 알려드리겠습니다.
저도 공부한 다음 여러분께 알려드렸기 때문에 내용이 조금 부실할 수 있으니 양해 부탁드립니다.. 나중에 SALT도 공부해서 알려드릴게요. 잘못된 정보가 있다면 댓글에 꼭 알려주세요!
'코딩 💻 > JavaScript' 카테고리의 다른 글
라즈베리파이에서 디스코드 봇 만들기 환경설정(node, pm2) (0) | 2021.12.05 |
---|