해시, 해시 함수가 무엇인지 알아보자! 9살에게 설명하기
해시 함수 혹은 해시 알고리즘이란?
이미 온라인에 많은 설명이 있지만, 저처럼 쉽게 설명해줘야 이해하는 분들
혹은 아직 어린 분이 있을 수 있으니 조금 더 쉽게 써보려고 합니다.
함수는 뭔가를 집어넣으면 어떤 과정을 거친 후 결과를 내보내는 상자라고 생각하면 됩니다.
그렇다면 해시 함수는 무엇일까요? 해시 함수도 상자라고 생각해보죠.
상자는 상자인데, 무엇이든 집어넣을 수 있는 상자입니다. 파일이든, 이미지든,
'안녕하세요' 혹은 'hello' 등 모든 문자들을 다 집어넣을 수 있습니다. 이 상자는
자신에게 들어온 것을 마구 분해하여 섞어버린 후 정해진 길이를 가진 값으로 내보냅니다.
바로 이렇게 말입니다. 이 결과는 실제 MD5라는 해시 알고리즘을 사용하여 만든 것입니다.
좀 더 많은 예제를 볼까요? 이 상자(함수)에는 어떤 사이즈의 숫자나 문자도 다 넣을 수 있습니다.
심지어는 책 한권에 달하는 텍스트를 통째로 넣을 수 있습니다.
하지만 상자는 항상 동일한 크기의 알파벳과 숫자로 이루어진 랜덤해보이는 값을 내보냅니다.
(여기서 말하는 동일한 크기는 해시함수, 즉 상자의 종류마다 다릅니다)
뭐에 써먹는지는 잘 모르겠지만 해시함수가 무엇인지는 조금 감이 오시나요?
이 해시함수는 몇가지 매우 중요한 특징이 있습니다.
- 결과값을 보고 상자에 무엇이 들어왔었는지 알 수 없습니다. 즉, 결과를 도로 넣어 원상복귀 시킬 수 없습니다.
- 같은 값을 넣으면 항상 같은 결과를 만들어 냅니다.
- 항상 같은 크기의 결과값을 내보냅니다.
- 결과값의 크기는 정해져 있다면, 다른 값 2개를 넣어서 같은 결과를 만들어낼 수도 있을까요? 그렇습니다. 하지만 같은 결과를 만들어내는 값을 찾기는 매우 힘들게 설계되어 있습니다. (다른 값 2개를 해시함수에 넣어 같은 결과를 가지는 것을 어려운 말로 충돌 collision 이라 합니다)
- 상자에 들어가는 값을 아주 조금만 바꿔도 결과는 완전히 달라집니다. 즉, 상자에 들어가는 값과 나오는 값은 전혀 상관이 없어보입니다. (random해 보입니다)
이제 슬슬 해시 함수가 무엇인지 감이 잡히나요? 그래도 아직 정확히 와닿지 않을 거에요.
이제 anders.com/blockchain/hash.html로 가서 1분만 놀아봅시다.
데이터에 이것 저것 넣어보며 결과값이 어떻게 바뀌는지 유추할 수 있는지도 보고요. ㅎㅎ
해시 함수는 그럼 어디에 쓰나요?
해시 함수는 사실 비교를 위해 쓰입니다. 이렇게 말하면 어려우니 다시 예제를 볼까요?
- 웹사이트 등에서 비밀번호를 저장할 때
이렇게 웹사이트나 게임 서버 등은 비밀번호를 해시값으로 바꾸어 저장합니다.
유저가 비밀번호를 입력하면 그 값을 해시 상자에 넣어서 나온 결과값과
서버에 저장된 해시값을 비교하는 것이죠.
이렇게 하면, 사이트를 운영하는 사람도 비밀번호를 알 수 없고 해커에 의해 서버가 털려도
해커가 비밀번호를 알아낼 수 없습니다. 왜냐? 해시 결과값은 원 상태로
(처음 박스에 넣은 값으로) 되돌릴 수 없기 때문이죠.
참고로 해시함수의 결과값을 hash 혹은 digest (다이제스트) 라고 합니다.
- 파일 전송 등이 제대로 됬는지를 확인할 때
해시값 (박스에서 나온 결과값)이 일종의 디지털 지문처럼 작동한다는 것을 알아차렸다면
당신은 센스가 아주 뛰어난 사람입니다! 물론 동일한 결과값이 나올 수도 있긴 하지만
(어려운 말로 충돌) 그럴 가능성은 매우 희박하기에 결과값은 고유하다고 보고 해쉬값으로
동일한지 아닌지를 판단하는 것입니다.
파일이 조금이라도 누락되었다면 해시 값은 완전히 달라지는 거죠.
공식 홈페이지가 아닌 다른 곳에서 파일을 받은 경우 파일이 원본인지 혹은
누가 파일에 장난을치고 유포하는 것인지 확인할 수 있습니다.
단, 해커가 공식홈에서 파일을 변조한 경우라면 의미가 없겠죠.
(해커가 사이트에 올라와있는 해시값도 변경하면 되잖아...)
그 외에도 해시함수의 쓰임새는 무궁무진합니다. 비트코인이나 이더리움
등의 블록체인에서 블록들을 연결할 때도 쓰이고 말이에요.
하지만 이 포스트를 이해했다면 다 쉽게 이해할 수 있을 거에요.
이것으로 해시 함수, 해시 알고리즘에 대한 설명을 마칩니다. 나름대로
쉽게 써 보려고 했는데 잘 됐는지 모르겠네요 ㅜ
의문점이 많이 생기실텐데 댓글 남겨주시면 성심성의껏 답변 드리겠습니다!
다음 번에는 블록체인이 무엇이고 어떻게 작동하는지 9살에게 설명하듯이 써 보겠습니다.
읽어주셔서 감사합니다!
✅ @nanummer, I gave you an upvote on your first post! Please give me a follow and I will give you a follow in return!
Please also take a moment to read this post regarding bad behavior on Steemit.
정말 알기쉽게ㅜ설명해주시는군요
좋은글 감사합니다
과찬이십니다 ㅋㅋ 읽어주셔서 정말 감사드립니다!
좋은 설명입니다.
감사합니다!! 제가 아는 한에서 다른 글도 많이 올리겠습니다!
오호! 일반인도 쉽게 이해할 수 있는 내용이네요
좋은글 감사합니다.
읽어주셔서 감사합니다!
좋은글 감사합니다~ 해시 함수Box아래 SHA-256라고 써 놓으셨는데 이것은 어떤 기능을 하나요~? ㅎㅎ
읽어주셔서 감사합니다! 그 부분 설명을 못 했네요 죄송합니다 ㅜ
제가 해시함수를 "상자" 라고 표현하였는데 SHA-256은
그러한 상자 중 하나입니다. 즉, 해시 함수의 종류 중 하나입니다.
제가 해시함수는 항상 같은 크기의 결과값을 내보낸다고 했는데 SHA256
함수의 결과값의 크기는 몇일까요? 이름에서 보시다시피 항상 256비트 입니다!
참고로 비트코인도 SHA-256 알고리즘을 씁니다.
웹사이트의 SSL 인증서 등도 SHA-256 알고리즘을 쓰고 있지요!
크롬에서 우클릭 - 검사후에 Security 탭을 누르시고 View Certificate
버튼을 누르시면 보실 수 있습니다 ㅎㅎ
다음 번엔 블록체인을, 그리고 기회가 된다면 SSL에 대해서도 써보겠습니다!
잘 이해 했네요. 감사합니다^^
읽어주셔서 감사합니다!! ^^
잘읽었습니다.
꾹꾹~
감사합니다!! ^^