O(1) Block Propagation

비트코인 마이너가 블록 생성에 성공하고 나면 네트워크에 빠르게 전파해야 합니다. 블록의 크기가 커질수록 블록 전파에 걸리는 시간도 늘어나기 때문에, 블록 전파 시간을 줄이는 최적화가 중요해집니다. 블록 전파 시간을 줄이는 방법 중에 하나로 비트코인 코어 개발자인 Gavin Andresen이 제안한 O(1) Block Propagation이 있습니다.

마이너가 채굴해서 전파하는 블록에는 트랜잭션들이 포함되어 있습니다. 그런데 블록을 전파 받는 노드들도 사실은 트랜잭션 풀에 마이닝된 트랜잭션을 이미 대부분 가지고 있음에도 불구하고, 정확히 어떤 트랜잭션이 마이닝되었는지 알 수 없기 때문에 블록에 포함된 트랜잭션들을 다시 다운로드 받아야 합니다.

그런데 새로 생성된 블록에 들어있는 트랜잭션의 목록과 트랜잭션 풀에 들어 있는 트랜잭션의 목록의 차이를 바로 알 수 있는 데이터 구조가 있다면, 노드 입장에서 이미 가지고 있는 트랜잭션은 굳이 다시 다운로드 받지 않아도 됩니다.

이러한 문제를 Set reconciliation이라고 하는데, IBLT(Invertible Bloom Lookup Tables)라는 데이터 구조가 이에 대한 해법을 제공합니다. Gavin Andresen의 O(1) Block Propagation 제안은 IBLT를 이용하여 이미 트랜잭션 풀에 있는 트랜잭션을 전파하지 않고도 다른 노드에게 블록을 전파하는 방법을 제안하고 있습니다.

현재 비트코인 마이너들은 별도의 고속 블록 릴레이 네트워크를 사용하고 있기 때문에 O(1) Block Propagation는 받아들여지지 않은 것 같은데, 블록체인 새로 설계하는 분들에게는 재미있는 시도일 수 있을 것 같습니다.

자세한 내용이 궁금하신 분은 원글을 읽어보세요.

리플의 키 관리 방법

리플은 다른 블록체인과 달리 key를 master key와 regular key로 구분합니다. master key는 비트코인과 마찬가지로 주소와 수학적으로 연결된 (ECDSA secp256k1) key pair를 말하고, regular key는 SetRegularKey를 이용하여 블록체인 상에 등록할 수 있는 추가적인 key입니다.

regular key pair를 등록하고 나면 master key의 private key가 아닌 regular key의 private key를 이용하여 transaction을 authorize할 수 있습니다. master key는 리플 주소와 묶여 있기 때문에 바꿀 수 없지만, regular key는 원하는 시점에 언제든 교체할 수 있다는 특징이 있습니다. 비트코인의 경우 key를 도난 당하면 찾을 방법이 없지만, 리플에서는 regular key가 도난 당했을 경우 master key를 이용해 도난 당한 regular key를 무효화시키고 새로운 regular key를 등록할 수 있습니다.

관련 설명은 리플 기술 문서에서 확인하실 수 있습니다.

Commitment Scheme

commitment scheme은 암호학적인 방법을 이용하여 다른 사람에게 값을 공개하지 않고서도 어떤 값을 약속하고 나중에 약속했던 값을 공개하는 방법입니다. 한 번 선택한 값을 나중에 임의로 바꿀 수 없게 하는 특징을 binding이라고 하는데, commitment scheme은 binding을 제공해야 합니다.

일례로 sha256 같은 해시 함수를 이용하면 간단한 commitment scheme을 만들 수 있습니다. 어떤 값 x를 선택한 후에 c = sha256(x) 값만 먼저 공개하고, 나중에 x 값을 밝히면 다른 사람들은 sha256(x) = c인지를 검증하여 x가 실제로 commit했던 값인지 검증할 수 있습니다. 그리고 해시 함수의 특징 때문에 sha256(x’) = c인 x’를 쉽게 찾을 수 없어 binding 속성이 보장됩니다.

비트코인의 micro payment channel, secure multi-party lottery 등 블록체인의 여러 기법이 commitment scheme에 기초하고 있으므로 관심 있는 분들은 아래 강의 노트 참고하시기 바랍니다.

Confidential Transaction

Confidential Transaction은 additively homomorphic commitment scheme과 ring signature 등의 암호학적인 방법을 이용해 트랜잭션의 금액을 숨기는 기술입니다. 비트코인은 public 블록체인이기 때문에 모든 full node가 input이 총합이 output의 총합 (수수료 포함)과 같다는 사실을 확인해야 하는데, 이러한 암호학적인 방법을 이용하면 제 3자 입장에서 input, output 값들을 몰라도 validation을 할 수 있게 됩니다.

Blockstream이 Alpha라는 사이드체인 프로젝트를 통해 비트코인에 Confidential Transaction을 구현했습니다. (메인 브랜치에 반영되지는 않았습니다.) 관련 내용은 아래 링크에서 확인하실 수 있습니다.

https://elementsproject.org/elements/confidential-transactions/

추가로 CT에 구현에 사용된 구체적인 암호학적인 방법에 대해 공부하고 싶으신 분은 Grex Maxwell의 글을 참고하시기 바랍니다.

https://people.xiph.org/~greg/confidential_values.txt