이번 코인 플러그의 특허도 인증에 관련된 것입니다.
이전 글에서 말씀드린 바와 같이 코인플러그의 특허 중 많은 특허가 아래의 원칙에 기초하고 있습니다.
개념1: A의 개인키(Private Key)로 암호화된 메시지는 오직 A의 공개키(Public Key)로만 복호화 할 수 있다.
개념2: A의 공개키(Public Key)로 암호화된 메시지는 오직 A의 개인키(Private Key)로만 복호화 할 수 있다.
이번 특허에서는 추가적으로 퍼블릭 키를 기반으로 한 주소(address)의 생성이라는 개념이 추가로 사용됩니다.
개념3: 퍼블릭 키는 주소를 생성하기 위해 사용된다.
이러한 개념도 블록체인에 관심이 있으신 분이라면 이러한 개념도 익숙하실 텐데요,
비트코인 주소는 프라이빗키, 퍼블릭키를 기반으로 만들어집니다. 우리가 비트코인 지갑 주소라고 부르는 것입니다.
프라이빗 키는 1에서 n-1 사이의 수이고, n은 2의 256 승보다 작은 값입니다. 좀 더 구체적으로 설명하면, 프라이빗 키는 암호학적으로 안전한 엔트로피 소스를 통해 수집된 무작위 비트 문자열 중에서 크기가 큰 것들을 SHA256 해시 알고리즘에 넣어 생성된 256비트의 숫자입니다. 이 숫자는 굉장히 큰 숫자인데 10의 77 승 정도라고 합니다. 우주를 구성하는 원자가 10의 80승개라고 하니, 같은 값을 가지기가 수학적으로는 불가능에 가까울 정도라고 합니다.
퍼블릭 키는 타원곡선 곱셈 함수를 이용해 개인키로부터 결정됩니다. 프라이빗 키를 기반으로 곡선 위에 미리 정해진 값인 생성 포인트를 곱하여 곡선 상의 다른 곳에 위치한 포인트를 얻고 이값이 바로 퍼블릭 키가 됩니다.
주소는 퍼블릭 키를 입력 값으로 하는 해시 함수를 기반으로 생성됩니다. 퍼블릭 키를 기반으로 SHA25 해시를 산출한 후 그 결과값의 RIPEMD160 해시를 산출하면 160비트의 크기의 숫자가 생성되고, 이것이 주소입니다. 우리가 보는 주소값은 생성된 160비트의 숫자에 Base58Check 인코딩을 적용한 값이 우리가 보는 지갑 주소입니다.
위의 그림에서 보듯이 프라이빗 키->퍼블릭 키->주소의 순서로 진행이 되나, 역으로 주소를 기준으로 퍼블릭 키를 알수 없고 퍼블릭 키를 이용해서 프라이빗 키도 알 수 없습니다.
또한, 본 발명에서는 multi-address라는 개념이 사용됩니다.
개념4: 다중 서명 주소의 경우, 총 N개의 키 중 M개의 서명(M of N)의 요건을 만족하는 경우, 트랜잭션이 발생된다.
예를 들어, 공동 명의 계좌의 경우, 공동 명의자가 모두 동의할 때에만 비트코인을 전송할 수 있도록 설정하는 것이 필요합니다. 이러한 경우, 다중 서명 주소가 사용될 수 있습니다.
본 특허의 등록된 청구항 제1항은 아래와 같습니다.
청구항 1
파일에 대한 공증을 수행하는 방법에 있어서,
(a) 특정 파일에 대한 공증 요청이 획득되면, 서버가, hash 함수를 사용하여 상기 특정 파일의 message digest를 생성하거나 생성하도록 지원하는 단계,
(b) 특정 사용자의 private key로 인코딩된 message digest가 획득되고, 상기 특정 사용자의 private key로 인코딩된 message digest를 상기 특정 사용자의 public key로 디코딩한 정보(A)와 상기 (a) 단계에서 생성된 message digest(B)가 일치하면, 상기 서버가, 상기 특정 사용자의 public key 및 상기 서버의 public key를 사용하여 multisig address를 생성하거나 생성하도록 지원하는 단계,
(c) 상기 서버가, 상기 생성된 multisig address로 소정 액수의 가상 화폐를 전송하는 transaction을 수행하거나 수행하도록 지원하는 단계,
(d) 상기 transaction이 승인이 되어 상기 multisig address가 데이터베이스 상에 기록되면, 상기 서버가, 상기 소정 액수의 가상 화폐 및 상기 message digest와 관련된 unsigned transaction(UST)을 생성하거나 생성하도록 지원하는 단계,
(e) 상기 서버가, 상기 생성된 unsigned transaction을 상기 특정 사용자의 private key 및 상기 서버의 private key로 서명한 fully signed transaction(FST)을 상기 데이터베이스로 전송하거나 전송하도록 지원하는 단계, 및
(f) 상기 서버가, 상기 fully signed transaction이 상기 데이터베이스 상에 기록된 위치 정보를 나타내는 transaction ID를 획득하는 단계를 포함하는 방법.
구체적으로 살펴보면 아래와 같습니다.
단계 (a)는 이전 특허와 동일하게 아래의 그림과 같이 서버가 파일에 대한 해시 값(MESSAGE DIGEST(B))를 생성하는 단계입니다.
단계 (b)에서는 이전 특허와 동일하게 공증 대상 파일에 대한 사용자 장치의 해시값((MESSAGE DIGEST(A))와 서버의 해시값((MESSAGE DIGEST(B))의 동일 여부를 비교합니다.
이번 특허에서는 추가되는 개념이 퍼블릭키를 기반으로 한 주소 생성 및 다중 서명 주소인데,
단계 (b)와 같이 특정 사용자의 public key 및 상기 서버의 public key를 사용하여 multi-sig address를 생성될 수 있습니다. multi-sig address는 복수자의 서명이 필요한 경우에 사용될 수 있고, 본 발명과 같이 복수자의 전자서명이 필요한 공증 절차에서 활용 가능합니다.
단계 (c), (d) 및 (e)는 Multi-sig address를 등록하고, 서버 및 사용자의 프라이빗 키로 서명이 되기 전인 Unsinged transaction을 생성한 후, Unsinged transaction에 사용자의 프라이빗 키(Private Key A) 및 서버의 프라이빗 키(Private Key B)로 서명하여 FST(full signed transaction)을 생성하는 절차에 관한 것입니다. 서버는 서명을 받기 위해 공증파일의 해시값이 담긴 UST를 생성하고, 서버 및 사용자 각각의 전자서명을 받아서 FST를 생성합니다. 본 발명은 비트코인 블록체인을 전제로 한 발명이기에 트랜잭션 생성을 위해 가상화폐(비트코인)이 사용되는 것으로 추정됩니다.
이러한 방법을 통해 서버 및 사용자 양측의 전자 서명으로 파일에 대한 공증이 수행될 수 있습니다.
이전에 설명들인 특허들과 유사하나, 본 발명에서는 Multi-sig Address를 이용한 방법으로서 개별적인 서명을 별도로 받아 공증 절차를 이용한다는 점에서 차별화됩니다.
또한, 복잡해보이나, 원래 기존에 존재하였던 비트코인 블록체인에서 사용되던 개념들을 활용한 특허입니다.
ECM특허법률사무소
김시우 변리사
[email protected]