곧 제안될 세그리게이티드 위트(Segregated Witness) 소프트 포크는 비트코인의 잠재력을 여러 가지 방법으로 확장할 예정입니다. “세그윗(SegWit)”에 의해 가능해진 잠재적으로 유망한 혁신 중 하나는 MAST로, 머클화된 추상 구문 트리(Merkelized Abstract Syntax Trees)의 약자입니다. 주로 스마트 계약의 유연성을 증가시키기 위해 설계된 MAST는 동시에 플랫폼의 확장성과 프라이버시를 증가시킬 것입니다. MAST의 아이디어는 블록스트림 개발자 러셀 오코너(Russell O’Connor), 블록스트림 및 비트코인 코어 개발자 피터 뷰일(Dr. Pieter Wuille), 비트코인 코어 개발자 피터 토드(Peter Todd)에서 비롯되었습니다. 최근 비트코인 코어 개발자 드. 존슨 라우(Dr. Johnson Lau)에 의해 초기 비트코인 개선 제안(BIP)으로 초안이 작성되었습니다. 그 잠재력을 고려할 때, MAST는 놀랍도록 간단합니다.
P2SH: 개요
MAST 퍼즐의 한 부분은 P2SH에 기반하고 있으며, 이는 몇 년 동안 특정 비트코인 거래에서 사용되어 왔습니다.
모든 비트코인 거래는 사실상 비트코인을 출력에 “잠그는” 방식으로 이루어집니다. 이는 일반적으로 비트코인 주소를 가리킵니다. 이러한 비트코인은 나중의 거래에서 잠금 해제(그리고 다시 잠금)되도록 잠겨 있습니다. 이것이 비트코인이 주소에서 주소로 효과적으로 이동하는 방식입니다.
이 잠금은 실제로 스크립트 — 몇 줄의 코드로 수행됩니다. 표준 거래의 경우, 스크립트는 출력에 포함되어 비트코인을 나중의 거래에서 사용하는 데 필요한 조건을 정의합니다.
대부분의 비표준 비트코인 거래, 예를 들어 멀티시그(multisig) 또는 체크 잠금 시간 확인(CheckLockTimeVerify)은 “P2SH”(스크립트 해시로 지불하는 것의 약자)라고 불리는 약간 더 복잡한 방식을 사용합니다. P2SH에서는 비트코인이 여전히 스크립트에 잠겨 있습니다. 그러나 이 스크립트는 거래 출력에 포함되지 않습니다. 대신, 스크립트는 해시화되어 짧고 무작위로 보이는 숫자 문자열로 압축됩니다. 이 숫자 문자열은 원래 스크립트를 재생성하는 데 사용될 수 없습니다. 그러나 원래 스크립트가 있으면, 이 숫자 문자열은 단순히 다시 해시함으로써 재생성될 수 있습니다. 스크립트의 해시는 거래 출력에 포함됩니다.
P2SH 출력을 다음 거래에서 잠금 해제하려면, 스크립트에 정의된 요구 사항을 충족하는 것만으로는 충분하지 않습니다. 결국, 네트워크의 비트코인 노드는 스크립트의 해시만 알고 있으며, 실제 스크립트는 알지 못합니다. 따라서 이러한 노드는 스크립트에 정의된 요구 사항이 충족되었는지 확인할 수 없습니다. 그들은 거래를 확인할 수 없습니다.
그래서 비트코인을 사용하는 다음 거래는 전체 스크립트와 함께 스크립트에 정의된 요구 사항을 포함해야 합니다: 잠금(스크립트) 자체와 이를 잠금 해제하는 키(요구 사항)입니다.
실제 스크립트를 해시함으로써 비트코인 노드는 포함된 스크립트가 이전 출력에 포함된 스크립트 해시와 일치하는지 확인할 수 있습니다. 일치하면, 노드는 비트코인이 실제로 해당 특정 스크립트에 잠겨 있었음을 알 수 있습니다. 그런 다음 그들은 스크립트에 정의된 요구 사항이 충족되었는지 확인할 수 있으며, 거래가 확인될 수 있습니다.
머클 트리: 개요
MAST 퍼즐의 다른 부분은 머클 트리(Merkle tree)라는 암호화 기술입니다.
머클 트리는 기본적으로 서로 다른 데이터 세트를 단일의 압축된 해시인 머클 루트(Merkle root)로 해시하는 수학적 구조입니다. 다른 해시와 마찬가지로, 이 머클 루트는 머클 트리의 데이터를 재생성하는 데 사용될 수 없습니다.
그러나 머클 트리는 독특한 이점을 제공합니다. 머클 트리의 데이터 중 어떤 것이든 알려져 있다면, 머클 루트를 사용하여 해당 특정 데이터가 실제로 머클 트리 어딘가에 존재하는지 확인할 수 있습니다 — 머클 트리의 모든 데이터가 알려져 있지 않더라도 말입니다.
간단한 예를 들어보면, 앨리스가 “123”과 “456” 데이터 세트를 결합하여 머클 트리를 만들었다고 가정해 보겠습니다. 이 머클 트리의 머클 루트는 “789”로 나타납니다. 앨리스는 이제 밥에게 데이터 패키지 “123”이 이 머클 트리 어딘가에 있다고 말합니다. 이제 머클 루트(“789”)만으로도 밥은 “123”이 실제로 머클 트리 어딘가에 포함되어 있다는 것을 확인할 수 있습니다. 비록 그가 “456”이 그 안에 있다는 것을 전혀 알지 못하더라도 말입니다. 사실, 그가 아는 한, 머클 트리에는 수천 개의 데이터 패키지가 있을 수 있으며, 그는 그 중 어떤 것도 해독할 수 없습니다.
MAST: P2SH + 머클 트리
MAST는 본질적으로 P2SH의 잠재력을 머클 트리가 제공하는 것과 결합합니다.
비트코인을 단일 스크립트에 잠그는 대신, MAST를 사용하면 동일한 비트코인을 여러 개의 서로 다른 스크립트에 잠글 수 있습니다. 즉, 동일한 비트코인을 서로 다른 상호 배타적인 조건 세트에 잠글 수 있습니다. (예를 들어, 앨리스만의 암호화 서명을 요구하거나, 밥과 캐롤 각각의 서명을 요구하거나, 특정 시간이 경과한 후에만 캐롤의 서명을 요구하는 등의 방식입니다.)
이러한 조건 중 어떤 것이 (확인된) 거래에서 먼저 충족되면 비트코인이 어떻게 사용될지가 결정됩니다. (앨리스가 출력을 사용하는 거래에 가장 먼저 서명하면 그 거래는 유효합니다. 밥과 캐롤이 앨리스보다 먼저 서명하면 그 거래가 유효합니다. 또는 특정 시간이 경과하고 캐롤이 가장 먼저 서명하면 그것이 유효한 거래입니다.)
P2SH와 마찬가지로, 이러한 다양한 스크립트는 해시화됩니다. 그러나 이번에는 머클 트리로 결합됩니다. 그리고 이 머클 트리의 머클 루트가 거래 출력에 포함되어 궁극적인 잠금 역할을 합니다.
따라서 자금을 사용하는 것은 P2SH와 유사합니다. 머클 루트에서 자금을 잠금 해제하는 거래를 생성하려면, 사용된 전체 스크립트를 새로운 거래에 포함해야 하며, 그 스크립트를 잠금 해제하는 요구 사항도 포함해야 합니다. (잠금과 키.)
하지만 중요한 점은: 모든 잠재적 스크립트(잠금)를 포함할 필요는 없습니다. 실제로 사용되는 것만 포함하면 됩니다. (앨리스가 자금을 먼저 사용하면, 밥과/또는 캐롤이 자금을 사용할 수 있게 해주는 스크립트를 포함할 필요가 없습니다. 사실, 앨리스는 밥과/또는 캐롤이 자금을 사용할 수 있었는지조차 알 필요가 없습니다.)
비트코인 노드는 머클 트리 기술을 활용하여 포함된 스크립트가 유효한지 확인할 수 있습니다. 그들은 출력에 포함된 머클 루트를 사용하여 사용된 스크립트가 실제로 머클 트리에 포함되어 있는지 확인합니다. 만약 그렇다면, 이 노드는 포함된 스크립트가 비트코인을 사용하는 옵션 중 하나로 유효하다는 것을 알고 새로운 거래를 검증할 수 있습니다.
이점
MAST는 비트코인을 세 가지 주요 방식으로 개선합니다: 스마트 계약의 유연성을 확장하고, 확장성을 개선하며, 프라이버시를 증가시킵니다.
MAST가 제공하는 스마트 계약의 유연성 유형은 완전히 새로운 것은 아닙니다 — 이미 P2SH만으로도 일부 “둘 중 하나” 구조가 가능했습니다. (앨리스만의 서명을 요구하거나, 밥과 캐롤의 서명을 요구하는 등.) 그러나 현재 프로토콜에 의해 DoS 공격을 방지하기 위해 다양한 옵션에 대한 크기 제한이 있습니다.
MAST는 이러한 제한을 제거하여 스마트 계약의 유연성을 확장합니다. 비트코인을 사용하는 방법이 두 가지이든 20가지이든 1000가지이든, 네트워크에는 차이가 없으며, 필요한 거래에 포함되는 스크립트는 하나뿐입니다. 이는 현재 너무 큰 1-of-1000 멀티시그 거래와 같은 새로운 복잡한 가능성을 가능하게 합니다. 또는 특정 시점에 특정 비트코인을 사용할 수 있는 사용자 목록이 길어질 수 있습니다.
게다가, 이러한 “둘 중 하나” 구조는 P2SH를 사용하여 궁극적으로 모든 스크립트를 공개해야만 잠금 해제할 수 있었습니다 — 사용된 것뿐만 아니라 말입니다. 이는 데이터 측면에서 큰 거래를 만들고, 수수료 측면에서도 비싼 거래를 만듭니다. 최종적으로 실제로 사용된 스크립트만 포함하도록 요구함으로써, MAST는 확장성을 개선합니다. 이는 네트워크의 모든 노드가 전송하고 검증하며 저장해야 하는 데이터 양을 줄입니다.
추가적인 보너스로, MAST는 사용되지 않은 스크립트를 영원히 숨김으로써 프라이버시를 개선합니다. 이는 예를 들어, 두 거래 당사자가 2-of-2 멀티시그 스크립트를 사용하여 절대적으로 사용되지 않는 경우, 에스크로 거래에서 중재자를 숨길 수 있습니다. 또는 공개에서 결코 사용되지 않은 타임아웃 보호 장치를 숨길 수 있습니다.
저자 주: MAST는 여전히 진행 중인 작업입니다; 구현 세부 사항은 이 기사에서 설명한 것과 다를 수 있습니다.