본문으로 건너뛰기

해시 함수 — ETH.BUILD

ETH.BUILD 교육 도구를 사용하여 암호학적 해시 함수를 시연합니다. 해시 함수가 어떻게 작동하는지, 그리고 왜 이더리움의 계정 및 데이터 무결성 모델에 필수적인지 알아보세요.

Date published: 2021년 1월 14일

오스틴 그리피스(Austin Griffith)가 ETH.BUILD 시각적 프로그래밍 도구를 사용하여 암호학적 해시 함수가 어떻게 작동하는지 시연하는 튜토리얼로, 결정론, 고정 길이 출력, 단방향 속성 및 머클 트리를 다룹니다.

이 대본은 오스틴 그리피스가 게시한 원본 비디오 대본 (opens in a new tab)의 접근성 향상 버전입니다. 가독성을 위해 약간 편집되었습니다.

해시 함수 소개 (0:00)

이것은 ETH.BUILD라는 시리즈의 첫 번째 비디오입니다. eth.build에 접속하여 이 도구를 사용할 수 있지만, 이는 단지 이더리움에서 무언가를 구축할 때 어떻게 작동하는지 감을 잡고 테스트해 보기 위한 것입니다.

우리가 살펴볼 첫 번째 모듈은 해시 함수입니다. 해시 함수란 도대체 무엇일까요? 음, 지문과 비슷하다고 볼 수 있습니다. 입력값이 있는데, 무엇이든 될 수 있지만 지금은 "hello world"라는 텍스트를 사용해 보겠습니다. 반대편에는 출력값이 나오며, 그 출력값은 64자의 16진수 문자열입니다. "0x" 접두사 때문에 66자라고 표시되지만, 실제로는 64자의 16진수 문자열입니다.

해시를 색상으로 시각화하기 (0:50)

16진수를 보면 색상 코드와 비슷해 보입니다. 그래서 우리가 보고 있는 것을 색상으로 만들면 설명하기가 더 쉬울 수 있습니다. 따라서 문자열이 무엇이든 처음 6자를 가져와서 색상으로 표시해 보겠습니다. 확인해 보면 멋진 보라색인 것을 알 수 있습니다.

제 이름은 무슨 색인지 볼까요? 자, 멋진 포레스트 그린이네요. 이제 다시 "hello world"로 돌아가 보겠습니다. 다시 그 보라색이 나옵니다.

결정론과 고정 길이 출력 (1:38)

방금 우리가 발견한 것은 이것이 결정론적이라는 것입니다. 기본적으로 입력값으로 무엇을 넣든, 반대편에서는 항상 같은 결과가 나옵니다.

두 번째 속성은 임의의 크기를 가진 어떤 것이든 넣을 수 있다는 것입니다. 키보드를 마구 두드리면 색상이 변하는 것을 볼 수 있지만, 문자열은 66자 길이를 그대로 유지합니다. 여기에 무엇을 넣든, 심지어 파일이라도 상관없습니다. 제 아들 레오(Leo)의 사진 파일을 해시로 넣으면 멋진 주황색을 얻을 수 있습니다. 그런 다음 BIP 단어 목록 텍스트 문서를 넣으면 멋진 연한 파란색이 나옵니다. 레오 사진을 다시 가져오면 무슨 색이 될까요? 우리는 그 주황색이 될 것이라는 걸 알고 있습니다. 입력한 것에 대한 결정론적인 지문을 얻게 되는 것입니다.

단방향 속성 (2:37)

다음으로 가장 중요한 속성은 단방향이라는 것입니다. 다시 "hello world"를 넣으면 "4717"로 시작하는 해시를 얻게 됩니다. 이 해시를 누군가에게 보내면서 "이게 내 비밀의 해시야. 내 비밀을 맞히면 100달러를 줄게"라고 말해도, 그들은 근처에도 가지 못할 것입니다.

해시가 "4717"로 시작한다고 가정하고, 그들이 일치하는 것을 찾기 위해 이것저것 시도해 본다고 합시다. 문자를 조금씩 바꾼다고 해서 정답에 가까워질 수는 없습니다. 맞히거나 못 맞히거나 둘 중 하나입니다. 기본적으로 무차별 대입(brute-force) 방식으로 추측해야 합니다. 우연히 "hello world"를 추측해 낸다면 정답을 얻겠지만, 그렇지 않다면 결코 알아낼 수 없습니다. 정답에 가까워지고 있는지 알 방법이 전혀 없습니다.

암호학을 다루다 보면 개발자로서 때때로 답답함을 느낄 수 있습니다. 왜냐하면 작동하거나 안 하거나 둘 중 하나일 뿐, 정답에 가까워지고 있는지에 대한 힌트를 전혀 얻을 수 없기 때문입니다. 하지만 이는 좋은 현상입니다. 그것이 바로 우리가 해시 함수에서 원하는 속성이기 때문입니다.

해시 함수 속성 요약 (3:43)

정리하자면 다음과 같습니다. 어떤 크기의 데이터든 해시 함수에 입력할 수 있으며, 함수는 해당 데이터에 대한 정확히 64자의 16진수 지문을 출력합니다. 이는 결정론적입니다. 또한 단방향이므로 반대 방향으로 되돌릴 수 없습니다. 해시를 만드는 것은 매우 쉽지만, 해시의 비밀을 추측하는 것은 매우 어렵습니다.

머클 트리와 해시 결합 (4:06)

이를 활용하면 머클 트리와 같은 정말 멋진 것들을 할 수 있습니다. 세 개의 입력값이 있다고 할 때, 이를 하나로 합칠 수 있습니다. 모든 해시를 결합한 다음, 그 결합된 값을 다시 해시할 수 있습니다.

여기 있는 이 색상, 즉 보라색은 이 모든 해시들의 해시를 나타냅니다. "hello world"를 "hello world one"으로 바꾸면 보라색이 변할 것입니다. 입력값 중 어느 하나라도 조금만 변경되면 최종 해시가 변경됩니다. 다양한 방식으로 온갖 종류의 데이터를 가져올 수 있습니다. 해시들의 트리인 머클 트리를 만들거나 여러 블록을 일렬로 나열할 수도 있으며, 이 최종 해시는 이 모든 것들을 기반으로 생성됩니다. 중간에 아주 작은 것이라도 변경되면 최종 해시도 변경됩니다.

핵심 요약 (5:53)

핵심 요약은 해시 함수가 기본적으로 지문과 같다는 것입니다. 무언가를 입력하면, 결정론적으로 제가 예상하는 출력값을 제공합니다. 이것이 바로 해시 함수입니다. ETH.BUILD에 오신 것을 환영합니다. 멋진 것들을 만들면서 많은 것을 배워봅시다.

이 페이지가 도움이 되었나요?