해시 함수는 무엇인가요? (2)

주소의 의미와 원리 이해하기

블록체인에서는 송신자와 수신자를 식별하는 특별한 체계인 주소를 사용합니다. 보통 은행 시스템에서는 사용자의 이름과, 정보, 계좌번호와 같은 것을 데이터베이스로 관리하지만, 블록체인에서는 모든 정보가 주소로 관리됩니다. 앞에서 말한 A나 B를 나타내는 정보 역시 주소입니다.

이를 통해 알 수 있는 것은 주소는 블록체인 환경에서 마치 은행의 계좌번호와 같은 역할을 한다는 것입니다. 차이점은 계좌번호는 은행에서 발급해주는 반면, 블록체인의 주소는 자신이 스스로 생성해야 합니다. 발급해주는 중앙화된 주체가 없기 때문이지요.

내가 은행의 계좌에서 돈을 인출하고자 할 때, 내가 통장의 주인이라는 것을 증명하는 것처럼, 블록체인 환경에서도 이러한 절차가 필요합니다. 앞에서 공개키 암호를 통해 배웠던 전자서명을 활용하는 것이지요. 그런데 은행에서는 계좌번호와-소유주에 대한 정보를 가지고 있기 때문에, 확인을 해서 잔액을 변경하면 되지만, 블록체인 환경에서는 중앙화된 관리자가 없으니 어떻게 할 수 있을까요?

여기서 주소의 생성 방법이 필요합니다. 소유주라는 정보인 전자서명과 주소는 밀접한 관계가 있는데요. 공개키 암호 시스템에서 개인키가 전자서명을 하기 위해 필요한 정보인 것과 마찬가지로, 주소 또한 개인키에서 파생된 정보입니다. 주소는 아래 그림처럼, 개인키를 검증할 때 사용되는 공개키의 해시 값입니다. 수신자인 B의 입장에서 보면, A로부터 받은 금액을 자신이 다른 곳으로 이체하기 위해서 자신의 주소인 B로 전달받아야 하고, 이 후 이체를 할 때 소유권을 증명하기 위해 개인키로 전자 서명을 하기 위해선 같은 주소로 사용되어 져야 합니다.

해시 함수의 특징으로 인해, 개인키로부터 파생된 공개키의 해시값은 개인키와 일대일로 대응됩니다. (입력 결과가 조금만 달라도, 출력 결과가 다른 특징이 적용) 따라서, 계좌번호와 같은 주소에 대해 저장된 자산은 개인키의 소유주만 이체 가능한 권한을 부여하도록 설계된 것이지요. 블록체인은 은행 시스템처럼 제3자가 확인해주는 시스템이 아니기 때문에 자신의 개인키를 만들고, 주소로 자산을 받아서 스스로 증명(전자 서명)하여 이체하도록 구성되었습니다.

만약, 여러분이 원래 이체하려는 주소가 아니라 다른 주소로 보낸다면 어떻게 될까요? 40자리 숫자의 주소 중, 1자리만 달라져도 전혀 다른 주소가 됩니다. 잘못된 주소의 개인키를 가진 사람이 아니라면 이체할 수 가 없고, 또 누군가가 관리해주는 시스템이 아니기 때문에 돈을 돌려받을 수가 없습니다. 따라서, 거래를 하기 전에 주소의 원리를 꼭 알고 신중하게 확인하여 거래를 해야합니다.

블록체인에서 사용되는 해시 함수

이외에도, 해시 함수는 블록체인의 연결에도 사용되는 데요. "블록체인이란 무엇인가요?" 편에서 알아본 내용 중, 거래내역에 대해 조금만 변경되어도 알아 낼 수 있는 정보를 포함한다고 했었는데, 이 때 거래내역들을 입력 데이터로 하여 출력 데이터인 해시 값을 함께 블록에 저장하여서 알 수 있도록 하는 것입니다. 조금만 거래내역이 달라져도 해시값이 다르기 때문에 알아차릴 수 있는 것이지요.

또한 "비트코인은 어떻게 탈중앙화를 이루었는가?" 편에서 설명드린 작업 증명이라는 퀴즈에서도 해시 함수가 사용됩니다. 출력된 값으로 부터 입력 데이터를 추정할 수 없는 특징을 이용하여 시간이 오래 걸리는 문제를 만드는데 사용할 수 있습니다. 퀴즈는 해시 값의 입력을 모르는 상태에서 출력 값만 알고 있을 때 입력을 맞추는 것으로, 마치 스마트폰의 비밀 번호를 모르는 상태에서 여러가지를 입력해가며 로그인을 시도하는 것과 비슷한 원리입니다. (자세한 설명은 추후 작업 증명 편에서 설명할 예정입니다.)

요약하면, 비트코인에서 해시 함수는 3가지 용도로 사용되었습니다.

  1. 사용자를 식별하는 주소를 생성할 때

  2. 거래내역 위변조를 쉽게 알아낼 수 있도록 블록을 연결 할 때

  3. 채굴자의 퀴즈(작업 증명)를 만들기 위해서

이제 우리는 공개키 암호와 전자서명, 해시의 개념에 대해서 알았습니다. 이 3가지는 기본적으로 블록체인을 구성하는 암호 기술입니다.

그런데 블록체인 환경에서는 스스로 개인키를 생성하고 주소도 직접 만들어야 되는데, 그러다보면 전 세계에서 나랑 동일한 주소를 가진 사람이 나타면 어떻게 해야 될까요? 만약, 나의 주소에 암호 화폐를 보관하고 있는데 다른 누군가가 나랑 동일한 주소와 개인키를 만들어서 이체해 버린다면 나는 암호 화폐를 잃어버리게 되지 않을까요? 이에 대한 답은 다음편 암호 시스템의 안전성과 함께 알아보도록 하겠습니다.

Last updated