OP_RETURN
이 글은 성균관대학교 블록체인 네트워크 Skkrypto 브런치에도 연재가 되어 있습니다.
UTXO를 다른사람의 소유권으로 넘겨주는 방식으로 크게 2가지 방법(P2PKH, P2SH)이 있었다.
하지만 과연 무조건 다른사람의 '주소'로 보내는 구조로만 거래가 생성되어야 할까?
필자가 제일 의미있게 생각하는 script 마지막 구조, OP_RETURN을 살펴보자.
앞서 언급했던 script의 2가지 구조는 모두 다른 사람으로의 소유권을 이전하는 구조였다. 하지만 그 누구의 소유도 아닌 UTXO를 생성할 수 있다. 즉, 다른사람의 공개키로 잠그지 않는 과정을 거친다면, 새로 형성된 해당 UTXO는 그 누구도 그에 맞는 개인키로 잠금을 풀 수 없기 때문에 소비할 수가 없다.
과연 그러한 과정이 왜 필요할까? 내 소량의 BTC가 담긴 UTXO를 소모하며 영원히 쓸 수 없는 UTXO로 만들까? 특별한 구조를 지니고 있는 만큼 특별한 역할을 수행할 수 있다.
OP_RETURN은 P2SH와 P2PKH의 출력값과 같은 잠그는 과정이 생략되어 있기때문에 40바이트 공간이 비어있어 다른 데이터(메타 데이터)를 삽입할 수 있다. 출력값이 정상적이지 않은 종류 중 가짜 UTXO와 다르게 OP_RETURN 출력값은 '명백히 지출 될 수 없음'이 확인되기 때문에 UTXO 메모리 풀에 저장되지 않아 풀 노드에게 부담을 주지 않는 다는 장점이 있다. 이는 비트코인 코어 클라이언트 버전 0.9에서 도입되었다.
이러한 방식의 UTXO는 더이상 지출될 수 없기에 대게 매우 소량의 BTC를 사용하며, 이와 같은 OP_RETURN을 사용시 흔히 사용하는 용도에 따라 40바이트의 앞부분에 명시를 한다. 예를 들어 존재증명(Proof of Existence)의 경우 'DOCPROOF'가 ASCII 인코딩 된다.
OP_RETURN을 통해서 비트코인은 단순한 화폐 거래의 기능을 넘어설 수 있게 되었다.
하지만 이러한 비지불 데이터(Non-Payment data)의 사용에 대한 의견은 분분하다. 블록체인 기술의 장점을 보여주는 것이라는 의견과 달리 불필요한 데이터로 인한 블록체인 팽창이 일어난다고 주장한다. 이를 활용한 메타코인, 컬러드코인(colored-coin), 카운터파티 등 다양한 활용사례가 존재하며 화폐의 전송만으로서의 역할을 넘어서고 있다. (해당 기술에 대한 설명글)
이러한 쓰임새가 어떻게 적용되며 확장될 수 있을까?
실례로 OP_RETURN을 이용하여 MIT(Massachusetts Institute of Technology)는 졸업증명서를, 카카오페이는 인증서 보안을 위하여 비트코인 블록체인을 이용하여 보관한다.
MIT Media Lab의 J. Philipp Schmidt 와 Learning Machine은 Blockcerts라는 open source tool kit을 개발했다. Blockcerts는 증명서(certificate) 저장을 위해 비트코인 블록체인과 이더리움 블록체인을 사용한다. 이더리움에는 졸업증명서를 Smart contract을 통해 저장하지만, 비트코인 블록체인에는 OP_RETURN을 이용한다.
비트코인 블록체인에서의 적용 방식은 다음과 같다.
머클 트리(Merkle Tree)를 통해 여러 인증서를 한꺼번에 모아 머클 루트(Merkle Root)를 계산한다.
해당 결과값의 머클 루트를 비트코인 거래(Transaction)에서 OP_RETURN값과 함께 담아 거래를 전파하게 된다. 잔돈을 받기위한 본인의 주소를 입력하는 것은 선택적으로 작성한다.
BlockCerts는 '증명서'와, 'Receipt'를 동시에 제공한다. Receipt의 구성은 다음과 같다.
Receipt는 다음과 같은 내용을 포함하고 있다.
머클 루트를 담고 있는 비트코인 트랜잭션 ID
블록체인에서의 머클루트
증명서의 해시값
머클 패스
해당 Reciept를 통해 '본인의 증명서'가 블록체인에 잘 저장 되어있는지 쉽게 확인할 수 있다.
또한, 기업과 같은 제3자가 학교의 확인을 요청하지 않고 직접, 빠르게 졸업장을 확인 할 수 있는 장점이 있다.
(저장 확인 과정과 머클트리에 관한 전반적인 설명은 '블록 구조편'에서 살펴보겠다.)
OP_RETURN은 데이터 저장용으로 비트코인 블록체인을 이용시 많이 사용되어왔다. 흥미로운 사실은, 카카오페이 또한 보안을 위하여 비트코인 블록체인을 이용해왔다.(현재는 하이퍼렛져 패브릭을 이용하고 있다.)
카카오페이는 2016년 인증서에 대한 보안을 강화(정확히 말하자면 안전성 확보) 시키고자 블록체인을 활용하였고, 이에 사용할 수 있었던 퍼블릭 블록체인인 비트코인 블록체인을 활용하였다. 이들은 앞서 언급했던 방식과 동일하게 OP_RETURN의 여유공간을 활용하였고 인증서들의 해시값을 저장하는 방식을 사용하였다. 이들은 finality(확정성)와 scalability(확장성)의 문제로 하이퍼렛져 패브릭을 활용하는 방안으로 대체하였다.
왜 이러한 과정을 거치며 졸업증명서를 굳이 블록체인에 보관할까?
MIT는 이더리움과 비트코인 블록체인이 검열저항성을 지니며 위변조를 막을 수 있고, 안전한 데이터베이스라고 생각하여 해당 블록체인에 졸업증명서를 저장하는 것이다. 블록체인의 쓰임새는 이와 같은 역할로 쓰일 수 있는것이다. 가장 안전한 데이터베이스로.
'탈중앙화를 위한 블록체인'이라고 외치는 경우가 많지만 필자는 '검열저항성(censorship resistance)을 지니기 위한 블록체인'을 위해 탈중앙화를 선택했다는것을 모두가 꼭 인지했으면 좋겠다.
이러한 검열저항성을 보여준 주요 사건들이 있다.
2018년 4월 23일, 이더리움에 트랜잭션 하나가 생성되었고, 이는 영원히 이더리움에 저장되었다.
Input 데이터를 보면 매우 긴 값이 저장되어 있음을 확인할 수 있는데 이를 UTF-8인코딩 시켜서 변환하면 다음과 같다.
북경대 한 학생이 input 데이터로 적은 내용을 번역하면 다음과 같다. (원문)
저는 북경대에 재학 중인 위에신(岳昕)입니다. 지난 9일, 다른 7명의 학생들과 함께 대학 측에 성폭행 사건에 관한 정보공개청구서를 제출했습니다. 그러나 정보공개청구서의 제출 이후 학교 측으로부터 "네가 졸업할 수 있을 것 같냐", "엄마와 할머니가 네가 이러고 있는 것 아느냐" 등 협박에 가까운 지속적인 압박과, 정보를 공개할 수 없다는 실망스러운 답변을 받았습니다. 23일 새벽 1시, 한 교직원 분이 저의 어머니와 함께 갑자기 기숙사에 찾아와 저의 핸드폰과 컴퓨터에 있는 정보공개청구서와 관련된 정보를 모두 삭제하라고 요구했습니다. 어머니는 큰 충격을 받으신 상태고, 저는 이러한 학교의 대응에 화가 나, 다음의 다섯 가지 내용을 요구합니다. (후략)
여학생을 성폭행하여 자살에 이르게 했다는 혐의로 대학에서 사임 했던 선양(沈阳) 교수에 대한 학생들의 정보공개청구에도 불구하고 대학측은 해당 교수의 사임 사실을 제외한 나머지 정보를 일절 공개하지 않고 위와 같이 협박성 전화와 통보를 해왔다고 한다. 특히 웨이보·위챗 등의 대형 SNS 서비스와 북경대 게시판 등지에 공유되던 관련 글들이 빠르게 삭제되고 있던 상황이었다.
이러한 지속적인 검열을 막기위해 이더리움 트랜잭션을 이용하여 영원히, 그 누구도 검열할 수 없는 기록을 남기는 사건이 있었다.
이처럼 검열을 막기위한 목적은 아니지만 국내에서 역사적인 기록을 남기기 위해 이더리움 트랜잭션을 이용한 사건이 있었다. 바로 2018년 4월 27일 남북 정상이 합의한 '판문점 선언'을 이더리움 블록체인 상에 저장을 한 사건이다. 원문은 여기서 변환을 통해 확인할 수 있다. (한글, 영문)
블록체인의 검열저항성이 좋은 방식으로 쓰일 수 있지만, 이를 악용하는 사례가 우려되고 있는 현실이다. 리벤지 포르노(Revenge porn)의 블록체인 악용 가능성에 관한 좋은 글을 첨부하며 '비트코인 블록체인의 거래 편'을 마치겠다.
참고자료
https://github.com/blockchain-certificates/cert-issuer
http://www.hashedpost.com/2018/04/hashed-report-4-23.html
https://news.bitcoin.com/mit-issue-diplomas-using-bitcoin-blockchain/
http://certificates.media.mit.edu/
손동하 / sohn@skkrypto.io