전자 서명이 무엇인가요?
Last updated
Last updated
지난 편에서는 공개키 암호와 특징에 대해서 알아보았습니다. 이번 편에서는 공개키 암호를 이용하는 대표적인 사례인 전자 서명에 대해서 알아보겠습니다.
서명은 살아가면서 누구나 경험하는 일반적인 작업입니다. 여러분이 카드 결제를 하거나 각종 계약서를 쓸 때에도 서명을 작성합니다. 서명을 통해 얻을 수 있는 효과는 크게 두 가지로 볼 수 있습니다. 첫 번째는 인증성(Authenticity)이고, 두 번째는 부인 방지(Non-Repudiation)**입니다. (무결성도 중요한 요소이지만, 이해에 필수 요소는 아니므로 생략하겠습니다)
여러분이 졸업한 학교에서 졸업증명서를 발급해서 회사에 제출한다고 가정해봅시다. 졸업 증명서에는 학교 기관의 서명(직인)이 포함됩니다. 증명서를 회사에 제출하면, 회사는 증명서가 진짜로 학교에서 발급한게 맞는지 확인을 서명을 통해 알 수 있습니다 . 여러분의 입장에서는 학교에서 발급한 증명서임을 회사에게 확인시키기 위한 목적으로 사용되는 것이지요. 이러한 특징을 인증성(Authenticicity)라고 합니다.
여러분이 인터넷 뱅킹에서 거래를 할 때도 서명을 하게 되는데요. 이 때 서명의 목적은 은행 입장에서 여러분이 거래에 승인했다는 용도, 즉 이 후에 "나는 돈을 보낸 적이 없다"는 것을 부인할 수 없도록 하기 위한 목적으로 사용됩니다. 은행 입장에서는 여러분이 이체한 내역을 확인했는데, 나중에 부인할 경우 자신들이 금액을 조정한 행위에 당위성을 잃어버리기 때문에 이 같은 부인 방지(Non-Repudiation) 특징이 중요합니다.
전자 서명은 블록체인에서도 매우 중요한 역할을 합니다. 자산을 이체할 수 있는 사람은 소유주에 한해서 가능해야 하며, 인증과 동시에 부인 방지를 위한 수단이 필요하기 때문입니다. 블록체인 네트워크로 전송되는 거래 내역에는 "A가 B에게 1BTC를 보냅니다"에 대한 정보와 함께 전자 서명이 추가됩니다. 그러면 네트워크를 구성하는 참여자들(채굴자와 같은)은 유효한 거래내역에 대해서 판단한 후 블록체인에 저장합니다.
아래 그림은 사용자가 개인키로 거래내역에 서명하여 네트워크에 전파하면, 네트워크에서 거래내역의 유효성을 확인 후 블록체인에 저장하는 과정을 나타냅니다. 거래 내역이 유효한지를 판단할 때, 서명을 검증하기 위해 공개키가 사용됩니다. 공개키는 공개되는 정보이기 때문에 네트워크에서 알고 있는 정보입니다.
만약 누군가가 실제 보유하지 않은 자산에 대해서 이체하려는 거래내역을 작성하고 전자서명을 하면 어떻게 될까요? 전자 서명에는 공개키 정보가 포함되어 있는데, 공개키 정보로부터 사용자를 식별하는 정보인 주소를 알 수 있습니다. 거래내역의 서명자와 송신자는 일치 해야 하며 송신자가 자산을 가지고 있지 않다면, 전자 서명을 하더라도 네트워크에는 받아주지 않고 블록체인 상에 올라가지 않습니다. 전자 서명은 유효하지만 서명의 대상이 되는 거래내역이 유효하지 않기 때문에 거래내역이 받아들여지지 않는 것입니다.
이제 블록체인 환경에서 이체를 하기 위해서 전자서명이 필요하다는 것과 전자 서명을 작성하기 위해 개인키가 필요하다는 것을 알게되었습니다. 이를 통해 블록체인에서 자산을 이체하기 위해서는 기존에 블록체인에 저장된 서명자의 자산이 존재해야 하고, 이를 증명하기 위해서 개인키를 사용하여 서명된 거래내역을 네트워크에 제출하여 수신자에게 보내는 과정을 이해할 수 있습니다.
그렇다면, 이체를 받은 대상인 수신자는 자신이 받은 자산을 어떻게 확인할 수 있을까요? 또 어떻게 이체 받은 금액에 대한 '사용의 권한'을 넘겨 받을 수 있는 것일까요? 단순히 은행이라면, 은행에서 데이터베이스에서 A의 잔액을 감소시키고 B의 잔액을 증가시켜서 관리하면 되지만, 블록체인에서는 '주소'에 대해서 이해해야 합니다. 다음편에서는 '주소'의 개념과 주소를 만들 기 위한 암호 시스템인 해시 함수에 대해서 알아보겠습니다.