진갑선생님과 이런저런 이야기를 나누다, 해시코드에 대한 이야기가 나왔습니다. 해시코드가 무엇인지 찾아봤는데, 검색자료로는 이해가 안 되어 질문했지요. 우리의 진갑선생님께서 해시부터 시작해서 관련된 16진수, 헥사코드까지 이야기해주셨습니다. 그 대화 내용을 옮겨봅니다.
블록에 대한 정확한 값을 가지고 있는 것이 Hash야.
블록이 만들어지잖아. 블록이 좌푯값이 있어야 하잖아 그 좌푯값에 대한 정보가 있는 것을 해시라고 하는 거야.
글 하나가 블록이야?
(한숨 쉬고) 그 글이~ 글을 종이에 써서 서랍 안에 종이를 넣으면, 몇 번째 서랍에 어디쯤에 종이가 있다 좌표값이 나오지. 근데 이 블록체인에서는 글자 하나 하나를 쪼개어서 암호화시켜서 분산해서 저장을 해.
글자 하나하나를..
어. 글자 하나하나를 쪼개서. ‘ㄱ' 따로 자음 모음 따로 따로 쪼개서 저장을해. 그래서 이 ‘ㄱ'이 이 글에서 몇 번 쓰였다는 숫자까지 암호화 알고리즘 시켜서 분산해서 저장을 해. 그럼 보려고 할 때는 쪼개서 분산시킨 얘(숫자 또는 글자)를 모아서 봐야 할 거 아냐. 그럼 얘(글자)가 어디 어디 저장되었는지 값이 있어야 할 거 아냐. 그 값을 저장해놓은 것이 해시야.
<출처: 구글>
해시가 그렇게 큰 의미야. 그 해시가 없으면 아무것도 못 찾잖아.
어, 해시가 없으면 아무것도 못 찾는 거야. 우리가 쓰는 키값이라는 것도 해시의 하나야. 큰 의미로 놓고 보면.
<출처: “영남대학교 공과대학 정보통신공학과 김영탁교수 Hash Map 설명자료> 원문 소스
근데 왜 그걸 다 뿔뿔이 흩어놨어?
(글 또는 자료) 수정을 하려고 해봐.
다 불러와서 수정해야 하잖아.
어, 그러니까. 다 불러서 수정하고 그 자리에 그대로 뿌려놔야 하잖아. 이걸 거의 불가능하게 만들어놓는 거야.
아~ 그래서 수정하면 안 된다고.
어, 그래서 원래 스팀잇에서도 글 쓰면 수정 못 했어. 그러다가 수정이 가능하게 한 방법은, 그건(저장은) 그거대로 하고, 블럭을 또하나 만들은 거야. (그러니까) 최초의 글 수정하기 전 버전을 찾아볼 수 있어.
그럼 내가 삽질한 거 다 나오겠네.
그지, 푹 주세요도 나오고 다 나와. 푹 주세요는 푹 주무세요의 오타였습니다. 굉장히 다른 느낌이죠^^
(다시 설명할게) 사이버알엔이 글을 쓰면, 그럼 이거를 코드별로 다 쪼개. 각각의 디지털 코드가 나올 거 아냐, ‘대'자에 대한 디지털 코드…… 이걸 막 암호화 알고리즘으로 막 쪼개. 그리고 이걸 (쪼갠 걸) 엉뚱한데다가 막 따로 따로 저장해놔. 그럼 여기저기 흩어져있겠지, 그럼 이걸 보려면은, 링크에서 딱 클릭하면 글자가 딱 조립되어서 보여야 할 거 아냐. 보이려면은 얘(글자)가 어디 어디에 있는지 좌푯값을 알아야 할 거 아냐. 그 좌푯값이 해시야.
이 디지털 코드가 '09AB3g……' 이런 거야?
어. 그런 식으로 저장을 해, 일반인들은 그걸 읽으면 쪼개져서 못 읽지. 16진수로 저장된 거거든, 헥사코드로.
그럼 저 코드가 헥사코드야?
그렇지. 16진 코드가 뭐야? 숫자가 0~9까지. 10개지. 그리고 영문으로 A, B, C, D, E, F 6개, 숫자 0부터 9까지 해서 10개 그것이 16진수야. 영문은 A부터 F까지만 쓰이는 거고.
아~
그래서 이 코드를 보면 A, B, C, D, E, F 외에 H, I, J, K 코드가 안 나와. 그런 문자가 없어. 있으면 이상한거야. 16진수니까. 근데 이걸 딱 보면서 읽히는 놈이 있어. 그걸 읽으면서 분석을 하는 거야. 그런 사람이 있다. 많이 보다보면 규칙성 때문에 알아볼 수 있어. 그런데 그 규칙성을 꼬면 꼬을수록 암호화를 잘했다고 하는 거야. 암호화시키는 것을 인코딩, 암호화 해독하는 것을 디코딩 하는 거야. 가륏??