이해의 편의를 돕기 위한 모네로 코인 백서 번역본(Monero Whitepaper)으로, 정확한 내용은 모네로 공식 홈페이지에 게시된 백서 원문을 참고해주시길 바랍니다.
소개
비트코인(Bitcoin)은 p2p 전자 현금의 개념을 성공적으로 구현한 경우입니다. 전문가들과 일반 대중 모두 공개적인 거래와 작업 증명(proof-of-work)을 신뢰 모델로 하는 편리한 조합을 높이 평가하고 있습니다. 오늘날 전자 현금의 사용자 기반이 꾸준한 속도로 성장하고 있으며, 고객들은 전자 현금이 제공하는 낮은 수수료와 익명성에 끌리고, 상인들은 예측 가능하고 분산된 발행을 가치 있게 여깁니다. 비트코인은 전자 현금이 종이 돈처럼 간단하고 신용카드처럼 편리할 수 있음을 효과적으로 증명했습니다.
그러나 비트코인은 여러 가지 결점을 가지고 있습니다. 예를 들어, 시스템의 분산된 성격은 네트워크 사용자 대부분이 클라이언트를 업데이트할 때까지 새로운 기능을 구현하는 것을 방해하는 불유연성을 가지고 있습니다. 신속하게 수정할 수 없는 몇 가지 중대한 결함은 비트코인의 널리 퍼진 전파를 저해합니다. 이러한 불유연한 모델에서는 원래 프로젝트를 지속적으로 수정하는 것보다 새 프로젝트를 출시하는 것이 더 효율적입니다.
이 논문에서는 비트코인의 주요 결점에 대해 연구하고 해결책을 제안합니다. 우리가 제안하는 해결책을 고려하는 시스템은 다양한 전자 현금 시스템 간의 건전한 경쟁을 이끌 것이라고 믿습니다. 또한, 우리는 전자 현금의 다음 돌파구를 강조하는 “CryptoNote”라는 이름의 우리만의 전자 현금을 제안합니다.
비트코인의 단점과 가능한 해결책
거래 추적성
개인 정보 보호와 익명성은 전자 현금의 가장 중요한 측면입니다. P2P 결제는 전통적인 은행 시스템과 비교할 때 제삼자의 시야에서 숨겨져야 한다는 점에서 명확한 차이점을 가집니다. 특히, T. Okamoto와 K. Ohta는 이상적인 전자 현금의 여섯 가지 기준을 설명했으며, 이 중 “개인 정보 보호: 사용자와 그의 구매 사이의 관계는 누구에 의해서도 추적할 수 없어야 한다”는 것을 포함했습니다. 그들의 설명에서 우리는 완전히 익명의 전자 현금 모델이 Okamoto와 Ohta가 제시한 요구 사항을 준수하기 위해 충족해야 하는 두 가지 속성을 도출했습니다:
불추적성: 각 수신 거래에 대해 모든 가능한 송신자가 동등한 확률을 가집니다.
비연결성: 어떤 두 개의 송금 거래라도 동일한 사람에게 전송되었다는 것을 증명할 수 없습니다.
불행히도, 비트코인은 추적 불가능성 요구사항을 만족시키지 못합니다. 네트워크 참가자들 간에 발생하는 모든 거래가 공개되어 있기 때문에, 어떤 거래든 명확하게 독특한 출처와 최종 수령인으로 추적될 수 있습니다. 두 참가자가 간접적인 방식으로 자금을 교환한다고 해도, 체계적으로 설계된 경로 찾기 방법을 통해 출처와 최종 수령인을 밝혀낼 수 있습니다.
비트코인 시스템은 모든 거래 내역을 블록체인에 기록하여 공개합니다. 이는 시스템의 투명성과 신뢰성을 높이는데 기여하지만, 동시에 사용자의 거래 추적 가능성을 높이고 개인의 익명성을 해칩니다. 이러한 특성 때문에 비트코인은 추적 불가능성을 보장하는 전자 현금 시스템으로서의 요구사항을 충족시키지 못하는 것입니다. 이는 비트코인의 핵심적인 한계 중 하나로, 사용자의 프라이버시와 익명성을 중시하는 경우 대안적인 솔루션을 모색해야 할 필요성을 제기합니다.
비트코인은 두 번째 속성인 연결성 불가능성도 만족시키지 못하는 것으로 의심됩니다. 일부 연구자들은 신중한 블록체인 분석을 통해 비트코인 네트워크 사용자와 그들의 거래 사이의 연결을 밝혀낼 수 있다고 주장했습니다. 비록 여러 방법이 논란의 대상이 되고 있지만, 공개 데이터베이스에서 많은 개인 정보를 추출할 수 있다고 의심됩니다.
비트코인이 위에서 언급한 두 가지 속성을 만족시키지 못한다는 사실은 이를 익명성이 있는 전자 현금 시스템이 아닌 익명성을 가장한(pseudo-anonymous) 전자 현금 시스템으로 결론지을 수 있습니다. 사용자들은 이러한 단점을 우회하기 위해 빠르게 해결책을 개발했습니다. 직접적인 해결책으로는 “세탁 서비스”와 분산 방법의 개발이 있었습니다. 두 해결책 모두 여러 공개 거래를 혼합하고 중간 주소를 통해 전송하는 아이디어에 기반을 두고 있으나, 신뢰할 수 있는 제삼자가 필요하다는 단점이 있습니다.
최근에는 I. Miers 등에 의해 보다 창의적인 방안인 “제로코인(Zerocoin)”이 제안되었습니다. 제로코인은 암호학적 단방향 누적기와 영지식증명을 사용하여 사용자가 비트코인을 제로코인으로 “변환”하고 명시적인 공개키 기반의 디지털 서명 대신 익명의 소유권 증명을 사용하여 지출할 수 있게 합니다. 그러나 이러한 지식 증명은 일정하지만 불편한 크기(오늘날 비트코인 한계를 기준으로 약 30kb)를 가지고 있어, 제안이 실용적이지 않다는 문제가 있습니다. 저자들은 이 프로토콜이 대다수의 비트코인 사용자에 의해 받아들여질 가능성이 거의 없다고 인정합니다.
작업 증명 기능
비트코인 창시자 사토시 나카모토는 “한 CPU-한 투표”라는 다수결 의사 결정 알고리즘을 설명하고, 그의 작업 증명 스킴을 위해 CPU 기반 가격 결정 함수(이중 SHA-256)를 사용했습니다. 사용자들이 트랜잭션 순서의 단일 역사에 대해 투표하기 때문에, 이 과정의 합리성과 일관성은 전체 시스템에 대한 중요한 조건입니다.
이 모델의 보안은 두 가지 단점으로 고통받습니다. 첫째, 네트워크의 채굴력의 51%가 정직한 사용자들의 제어 하에 있어야 합니다. 둘째, 시스템의 진행(버그 수정, 보안 수정 등)은 압도적 다수의 사용자들이 변경 사항을 지지하고 동의해야 합니다(이는 사용자들이 지갑 소프트웨어를 업데이트할 때 발생합니다). 마지막으로, 이 동일한 투표 메커니즘은 또한 일부 기능의 구현에 대한 집단 투표에도 사용됩니다.
이를 통해 작업 증명 가격 결정 함수가 만족해야 할 속성을 추측할 수 있습니다. 이러한 함수는 네트워크 참가자가 다른 참가자에 비해 중대한 이점을 가지지 못하게 해야 하며, 일반 하드웨어와 맞춤형 장치의 높은 비용 사이의 균형이 필요합니다. 최근 예시에서 볼 수 있듯이, 비트코인 아키텍처에서 사용되는 SHA-256 함수는 고성능 CPU에 비해 GPU와 ASIC 장치에서 채굴이 더 효율적이 되므로 이 속성을 갖고 있지 않습니다.
따라서 비트코인은 GPU와 ASIC 소유자가 CPU 소유자에 비해 훨씬 더 큰 투표권을 가짐으로써 “one-CPU-one-vote” 원칙을 위반하고 참가자 간의 투표력에 큰 격차를 만들어내는 유리한 조건을 만듭니다. 이는 파레토 원리의 전형적인 예로, 시스템의 20% 참가자가 80% 이상의 투표권을 통제합니다.
이러한 불평등이 네트워크의 보안에 영향을 미치지 않는다고 주장할 수 있습니다. 왜냐하면 중요한 것은 소수의 참가자가 대다수의 투표권을 통제하는 것이 아니라 이러한 참가자들의 정직성이기 때문입니다. 그러나, 이러한 주장은 다소 결함이 있습니다. 왜냐하면 위협이 참가자들의 정직성이 아니라 저렴한 전문 하드웨어의 가능성 때문입니다. 이를 증명하기 위해 다음 예를 들어봅시다. 악의적인 개인이 앞서 언급한 저렴한 하드웨어를 통해 자신만의 채굴 농장을 만들어 상당한 채굴력을 얻는다고 가정해 봅시다. 전 세계 해시율이 단기간에 현저히 감소한다면, 이제 그는 자신의 채굴력을 사용해 체인을 분기시키고 이중 지불을 할 수 있습니다. 이 글에서 나중에 볼 수 있듯이, 앞서 설명한 사건이 발생할 가능성은 전혀 낮지 않습니다.
불규칙한 방출
비트코인은 미리 정해진 발행 속도를 가지고 있습니다: 각 해결된 블록은 고정된 양의 코인을 생성합니다. 대략 매 4년마다 이 보상은 반으로 줄어듭니다. 원래 의도는 제한된 부드러운 발행과 지수적 감소를 만들기 위함이었지만, 실제로 우리는 분기점이 비트코인 인프라에 문제를 일으킬 수 있는 조각선형 발행 함수를 가지고 있습니다.
분기점이 발생할 때, 채굴자들은 이전 보상의 절반만을 받기 시작합니다. 2020년에 예상되는 12.5에서 6.25 BTC까지의 절대 차이는 감내할 수 있을 것처럼 보일 수 있습니다. 그러나 2012년 11월 28일에 일어난 50에서 25 BTC로의 감소는 채굴 커뮤니티의 상당수에게 부적절하게 느껴졌습니다. 그림 1은 11월 말, 바로 반감기가 일어났을 때 네트워크의 해시레이트에서 급격한 감소를 보여줍니다. 이 사건은 앞서 작업 증명 함수 섹션에서 설명된 악의적인 개인이 이중 지출 공격을 수행하기에 완벽한 순간이었을 수 있습니다.
하드코딩된 상수
비트코인은 원래 설계의 자연스러운 요소들(예: 블록 생성 빈도, 최대 화폐 공급량, 확인 횟수)과 인위적 제약처럼 보이는 몇 가지 하드코딩된 제한을 가지고 있습니다. 주된 문제는 필요할 때 이러한 제한을 빠르게 변경할 수 없다는 데 있습니다. 언제 상수들을 변경해야 할지 예측하기 어렵고, 그 변경이 끔찍한 결과를 초래할 수 있습니다.
하드코딩된 제한 변경이 재앙적인 결과로 이어진 좋은 예는 블록 크기 제한이 250kb1로 설정된 경우입니다. 이 제한은 약 10,000개의 표준 거래를 수용할 수 있었습니다. 2013년 초, 이 제한에 거의 도달했을 때 제한을 증가시키기로 합의가 이루어졌습니다. 변경은 지갑 버전 0.8에서 구현되었고 24블록 체인 분할과 성공적인 이중 지출 공격으로 끝났습니다. 버그는 비트코인 프로토콜에 있지 않고 데이터베이스 엔진에 있었지만, 인위적으로 도입된 블록 크기 제한이 없었다면 간단한 스트레스 테스트로 쉽게 발견될 수 있었습니다.
상수들은 또한 중앙집중화의 형태로 작용합니다. 비트코인이 피어 투 피어 성격을 가지고 있음에도 불구하고, 압도적 다수의 노드가 소수의 사람들이 개발한 공식 참조 클라이언트를 사용합니다. 이 그룹은 프로토콜에 변경을 구현하는 결정을 내리고 대부분의 사람들은 그 “정확성”에 상관없이 이러한 변경을 수용합니다. 일부 결정은 뜨거운 논의와 심지어 보이콧 요청까지 불러일으켰는데, 이는 커뮤니티와 개발자들이 몇몇 중요한 점들에 대해 동의하지 않을 수 있음을 나타냅니다. 따라서 문제를 피하기 위해 사용자가 구성할 수 있고 자체 조정이 가능한 변수를 가진 프로토콜을 갖는 것이 논리적으로 보입니다.
부피가 큰 스크립트
비트코인의 스크립팅 시스템은 복잡하고 무거운 기능을 가지고 있습니다. 이를 통해 복잡한 거래를 생성할 수 있는 잠재력이 있지만, 보안 우려로 인해 일부 기능이 비활성화되었으며 일부는 아예 사용되지 않았습니다. 비트코인에서 가장 인기 있는 거래의 스크립트(송신자와 수신자 부분 모두 포함)는 다음과 같습니다: <sig> <pubKey> OP DUP OP HASH160 <pubKeyHash> OP EQUALVERIFY OP CHECKSIG. 이 스크립트는 164바이트 길이며, 그 유일한 목적은 수신자가 자신의 서명을 검증하는 데 필요한 비밀 키를 소유하고 있는지 확인하는 것입니다.
이는 비트코인의 스크립팅 언어가 갖는 복잡성을 보여주는 한 예로, 이 시스템은 매우 다양한 거래 유형을 가능하게 하지만, 동시에 이러한 복잡성이 보안 문제를 야기할 수 있음을 시사합니다. 따라서, 비트코인 개발자들은 이러한 기능 중 일부를 비활성화하거나 제한하여 네트워크를 보호하려고 노력하고 있습니다.
크립토노트 기술
크립토노트는 비트코인 기술의 제한을 극복하기 위해 고안된 암호화폐 기술입니다. 이는 익명성과 거래의 비가역성에 중점을 두고 있으며, 몇 가지 주요 기능을 통해 이를 달성합니다. 여기에는 링 서명, 일회용 키, 그리고 블록체인의 양방향 추적 방지 등이 포함됩니다.
추적 불가능한 거래
이 섹션에서는 추적 불가능성과 연결 불가능성 조건을 모두 만족하는 완전히 익명의 거래 방식을 제안합니다. 우리 해결책의 중요한 특징은 그것의 자율성입니다: 송신자는 자신의 거래를 수행하기 위해 다른 사용자나 신뢰할 수 있는 제삼자와 협력할 필요가 없으멀로, 각 참여자는 독립적으로 커버 트래픽을 생산합니다.
문헌 검토
우리의 방안은 그룹 서명이라는 암호학적 원시에 의존합니다. D. Chaum과 E. van Heyst에 의해 처음 소개된 이 방법은 사용자가 그룹을 대표하여 자신의 메시지에 서명할 수 있게 합니다. 메시지에 서명한 후, 사용자는 검증 목적으로 자신의 단일 공개 키가 아닌 것을 제공합니다.
각주
- 1 이것은 이른바 “소프트 리미트”입니다. 새로운 블록을 생성하기 위한 참조 클라이언트의 제한입니다. 가능한 블록 크기의 하드 최대값은 1MB였습니다.
키를 제공하는 대신, 메시지를 서명한 사용자는 그의 그룹의 모든 사용자들의 키를 제공합니다. 검증자는 실제 서명자가 그룹의 구성원임을 확신하게 되지만, 서명자를 독점적으로 식별할 수는 없습니다.
원래의 프로토콜은 신뢰할 수 있는 제3자(그룹 관리자라고 함)를 필요로 했으며, 그는 서명자를 추적할 수 있는 유일한 사람이었습니다. 그 다음 버전인 링 서명은 Rivest et al.에 의해 소개되었으며, 그룹 관리자 없이도 자율적으로 작동하고 익명성 철회가 없는 방식이었습니다. 이 스킴의 다양한 수정 버전이 나중에 등장했습니다: 연결 가능한 링 서명은 같은 그룹 멤버가 두 서명을 생성했는지 여부를 결정할 수 있게 했고, 추적 가능한 링 서명은 동일한 메타정보(또는 [24]의 용어로 “태그”)에 대한 두 메시지의 서명자를 추적할 수 있는 가능성을 제공함으로써 과도한 익명성을 제한했습니다. 유사한 암호학적 구성은 ad-hoc 그룹 서명으로도 알려져 있으며, 이는 임의의 그룹 형성을 강조하는 반면, 그룹/링 서명 스킴은 보다 고정된 멤버 집합을 시사합니다.
우리의 해결책은 대부분 E. Fujisaki와 K. Suzuki의 “추적 가능한 링 서명” 작업을 기반으로 합니다. 원래 알고리즘과 우리의 수정을 구별하기 위해 후자를 일회용 링 서명이라고 부르며, 이는 사용자가 자신의 개인 키 하에 단 한 번의 유효한 서명만 생성할 수 있는 능력을 강조합니다. 우리는 추적성 속성을 약화시키고 일회성을 제공하기 위해서만 연결성을 유지했습니다: 공개 키는 많은 외부 검증 세트에 나타날 수 있고 개인 키는 고유한 익명 서명을 생성하는 데 사용될 수 있습니다. 이중 지출 시도의 경우 이 두 서명이 연결되지만, 우리의 목적을 위해 서명자를 밝힐 필요는 없습니다.
정의
타원 곡선 매개변수
우리가 기본 서명 알고리즘으로 선택한 것은 D.J. Bernstein 등에 의해 개발되고 구현된 빠른 스킴인 EdDSA입니다. 비트코인의 ECDSA와 마찬가지로, 이것은 타원 곡선 이산 로그 문제에 기반을 두고 있으므로, 우리의 스킴은 미래에 비트코인에도 적용될 수 있습니다. 공통 파라미터는 다음과 같습니다:
- q: 소수; q = 2^255 – 19; d: Fq의 요소;
- d = -121665 / 121666;
- E: 타원 곡선 방정식; -x^2 + y^2 = 1 + dx^2y^2;
- G: 기저점; G = (x, -4/5); l: 기저점의 소수 차수;
- l = 2^252 + 27742317777372353535851937790883648493;
- Hs: 암호학적 해시 함수 {0, 1}* → Fq;
- Hp: 결정론적 해시 함수 E(Fq) → E(Fq)입니다.
술어
개선된 개인 정보 보호를 위해 새로운 용어가 필요하며, 이는 비트코인 엔터티와 혼동되어서는 안 됩니다. 여기에 몇 가지 용어가 정의되어 있습니다.
- private ec-key는 표준 타원 곡선 개인 키로, [1, l − 1] 범위의 숫자 a입니다.
- public ec-key는 표준 타원 곡선 공개 키로, 점 A = aG입니다.
- one-time keypair는 개인 및 공개 ec-key의 한 쌍입니다.
- private user key는 두 개의 서로 다른 개인 ec-key (a, b)의 한 쌍입니다.
- tracking key는 개인 및 공개 ec-key (a, B)의 한 쌍입니다. 여기서 B = bG이며 a ≠ b입니다.
- public user key는 (a, b)에서 유도된 두 공개 ec-key (A, B)의 한 쌍입니다.
- standard address는 공개 사용자 키를 사람이 읽을 수 있는 문자열로 표현한 것이며, 오류 수정 기능이 포함되어 있습니다.
- truncated address는 공개 사용자 키의 두 번째 절반(점 B)을 사람이 읽을 수 있는 문자열로 표현한 것이며, 오류 수정 기능이 포함되어 있습니다.
거래 구조는 비트코인에서와 같이 유사하게 유지됩니다: 모든 사용자는 여러 개의 독립적인 수신 결제(거래 출력)를 선택하고, 해당하는 개인 키로 서명한 후 다른 목적지로 보낼 수 있습니다. 비트코인 모델에서 사용자가 고유한 개인 키와 공개 키를 소유하는 것과는 반대로, 제안된 모델에서 발송자는 수신자의 주소와 일부 무작위 데이터를 기반으로 일회용 공개 키를 생성합니다. 이런 의미에서, 동일한 수신자를 위한 수신 거래는 고유한 주소가 아닌 일회용 공개 키로 보내지며, 수신자만이 자신의 고유한 개인 키를 사용하여 자신의 자금에 해당하는 개인 부분을 복구하여 사용할 수 있습니다(자금을 회수하기 위해). 수신자는 링 서명을 사용하여 자금을 사용할 수 있으며, 이를 통해 소유권과 실제 지출을 익명으로 유지할 수 있습니다. 프로토콜의 세부사항은 다음 소제목에서 설명됩니다.
연결할 수 없는 결제
비트코인의 전통적인 주소는 한번 공개되면 들어오는 결제의 명확한 식별자가 되어, 이를 수령인의 가명과 연결시키고 결제들을 서로 연결시킵니다. 만약 누군가 “연결되지 않은” 거래를 받고 싶다면, 그는 자신의 주소를 비공개 채널을 통해 발송자에게 전달해야 합니다. 만약 그가 서로 다른 거래들을 받고 싶고 그 거래들이 같은 소유주에게 속한다는 것을 증명할 수 없게 하고 싶다면, 그는 모든 다른 주소들을 생성해야 하며, 이를 자신의 가명 아래에서 절대 공개해서는 안 됩니다.
우리는 사용자가 단일 주소를 공개하고 조건 없이 연결할 수 없는 지불을 받을 수 있는 해결책을 제안합니다. 각 CryptoNote 출력의 목적지(기본적으로)는 수신자의 주소와 발신자의 무작위 데이터로부터 파생된 공개 키입니다. Bitcoin에 대한 주요 장점은 발신자가 동일한 수신자에게 자신의 거래마다 동일한 데이터를 사용하지 않는 한, 모든 목적지 키가 기본적으로 고유하다는 것입니다. 따라서, 설계상 “주소 재사용”과 같은 문제가 없으며, 어떤 관찰자도 특정 주소로 거래가 전송되었는지 또는 두 주소를 연결할 수 있는지를 판단할 수 없습니다.
먼저, 발신자는 자신의 데이터와 수신자 주소의 절반을 이용하여 Diffie-Hellman 교환을 수행하여 공유 비밀을 얻습니다. 그런 다음 공유 비밀과 주소의 두 번째 절반을 사용하여 일회용 목적지 키를 계산합니다. 이 두 단계에는 수신자로부터 다른 두 개의 타원 곡선 키(ec-key)가 필요하므로, 표준 CryptoNote 주소는 비트코인 지갑 주소보다 거의 두 배 큽니다. 수신자도 Diffie-Hellman 교환을 수행하여 해당하는 비밀 키를 복구합니다.
표준 거래 순서는 다음과 같습니다:
- 앨리스는 보브에게 지불을 하고 싶어하며, 보브가 그의 표준 주소를 공개했다는 사실을 알고 있다. 그녀는 주소를 열어 보브의 공개키 (A, B)를 얻는다.
- 앨리스는 무작위의 r ∈ [1, l−1]을 생성하고 일회용 공개키 P = Hs(rA)G + B를 계산한다.
- 앨리스는 출력을 위한 목적지 키로 P를 사용하며, 또한 거래 내 어딘가에 디피-헬만 교환의 일부로서 R = rG 값을 포함시킨다. 주목할 점은, 그녀가 같은 r을 사용하더라도 다른 수신인의 키(Ai, Bi)는 다른 Pi를 의미한다는 것으로, 그녀는 독특한 공개키를 가진 다른 출력들을 생성할 수 있다.
- 앨리스는 거래를 전송합니다.
- 밥은 자신의 개인 키(a, b)를 사용하여 모든 거래를 확인하고 P’ = Hs(aR)G + B를 계산합니다. 만약 앨리스가 밥을 수령인으로 한 거래가 포함되어 있다면, aR = arG = rA이고 P’ = P가 됩니다.
- 밥은 해당하는 일회용 개인 키를 복구할 수 있습니다: x = Hs(aR) + b, 그래서 P = xG입니다. 그는 언제든지 x를 사용하여 거래에 서명함으로써 이 출력을 사용할 수 있습니다.
결과적으로, Bob은 관찰자에게 연결될 수 없는 일회용 공개 키와 연결된 수입 결제를 받게 됩니다. 추가적인 주의 사항들은 다음과 같습니다:
- Bob이 자신의 거래를 “인식”할 때(5단계에서 본 것처럼), 그는 사실상 자신의 개인 정보의 절반만을 사용합니다: (a, B). 이 쌍은 추적 키로도 알려져 있으며, 제3자(예: Carol)에게 전달될 수 있습니다. Bob은 새로운 거래의 처리를 Carol에게 위임할 수 있으며, Carol은 Bob의 전체 개인 키(a, b) 없이는 일회용 비밀 키 p를 복구할 수 없기 때문에 Bob은 Carol을 명시적으로 신뢰할 필요가 없습니다. 이 방식은 Bob이 대역폭이나 계산 능력이 부족할 때 유용합니다(스마트폰, 하드웨어 지갑 등).
- Alice가 Bob의 주소로 거래를 보냈다는 것을 증명하고 싶은 경우, r을 공개하거나 r을 알고 있음을 증명하기 위한 어떤 종류의 제로 지식 프로토콜을 사용할 수 있습니다(예: r로 거래에 서명함).
- Bob이 모든 들어오는 거래가 연결 가능한 감사 호환 주소를 원하는 경우, 추적 키를 공개하거나 축소된 주소를 사용할 수 있습니다. 그 주소는 단 하나의 공개 ec-키 B만을 표현하며, 프로토콜에 의해 요구되는 나머지 부분은 다음과 같이 그로부터 파생됩니다: a = Hs(B) 그리고 A = Hs(B)G. 양쪽 경우 모두 모든 사람이 Bob의 모든 들어오는 거래를 “인식”할 수 있지만, 물론 비밀 키 b 없이는 그 안에 포함된 자금을 사용할 수 없습니다.
일회성 링 서명
우리의 프로토콜은 일회용 링 서명에 기반하여 사용자들이 무조건적인 연결 불가능성을 달성할 수 있게 합니다. 안타깝게도, 일반적인 유형의 암호화 서명은 거래를 각각의 발송자와 수신자에게 추적할 수 있게 합니다. 이러한 결함에 대한 우리의 해결책은 전자 현금 시스템에서 현재 사용되고 있는 서명 유형과 다른 서명 유형을 사용하는 것입니다.
우리는 우선 전자 현금에 명시적으로 언급하지 않고 알고리즘에 대한 일반적인 설명을 제공할 것입니다.
한 번 사용되는 링 서명은 네 가지 알고리즘으로 구성됩니다: (GEN, SIG, VER, LNK):
GEN: 공개 파라미터를 받아 ec-쌍 (P, x)과 공개 키 I를 출력합니다.
SIG: 메시지 m, 공개 키의 집합 S0 {Pi}i≠s, 쌍 (Ps, xs)을 받아 서명 σ와 집합 S = S0 ∪ {Ps}를 출력합니다.
VER: 메시지 m, 집합 S, 서명 σ를 받아 “참(true)” 또는 “거짓(false)”을 출력합니다.
LNK: 집합 I = {Ii}, 서명 σ을 받아 “연결됨(linked)” 또는 “독립적(indep)”을 출력합니다.
프로토콜의 아이디어는 상당히 간단합니다: 사용자는 고유한 공개 키 대신 일련의 공개 키로 검증할 수 있는 서명을 생성합니다. 서명자의 신원은 동일한 키 쌍을 사용하여 두 번째 서명을 생성할 때까지 세트에 있는 다른 사용자들의 공개 키와 구별할 수 없습니다. 이 방식은 사용자의 익명성을 보장하는 데 핵심적인 역할을 합니다.
GEN: 서명자는 임의의 비밀키 (x)를 ([1, l – 1]) 범위에서 선택하고, 해당하는 공개키 (P = xG)를 계산합니다. 또한, “키 이미지”라고 부를 또 다른 공개키 (I = xH_p(P))를 계산합니다.
SIG: 서명자는 [21]에서의 기술을 사용하여 비대화형 제로 지식 증명을 포함하는 일회용 링 서명을 생성합니다. 그는 다른 사용자들의 공개키 (P_i) 중에서 임의의 부분집합 (S_0)을 (n)개 선택하고, 자신의 키 쌍 ((x, P)) 및 키 이미지 (I)를 선택합니다. (0 ≤ s ≤ n)을 서명자의 (S) 내의 비밀 인덱스로 하여, 그의 공개키는 (P_s)입니다.
서명자는 (i = 0 \ldots n)에 대해 임의의 ({q_i})와 (i = 0 \ldots n, i \neq s)에 대해 임의의 ({w_i})를 ((1 \ldots l))에서 선택하고 다음 변환을 적용합니다:
다음 단계는 비대화형 챌린지를 얻는 것입니다:
마지막으로 서명자는 응답을 계산합니다:
결과적으로 생성된 서명은 σ = (I, c1, . . . , cn, r1, . . . , rn).
VER : 검증자는 역변환을 적용하여 서명을 확인합니다.
최종적으로, 검증자는 다음을 확인합니다:
만약 이 등식이 맞다면, 검증자는 LNK 알고리즘을 실행합니다. 그렇지 않으면 검증자는 서명을 거부합니다.
LNK(Linkable Ring Signature) 프로토콜에서 검증자는 I가 과거 서명에서 사용되었는지 확인합니다. 이러한 값들은 I 집합에 저장됩니다. 하나의 비밀 키 아래에서 두 개의 서명이 생성되었다는 것을 의미하는 I의 다중 사용이 있습니다.
프로토콜의 의미는 다음과 같습니다: L-변환을 적용함으로써, 서명자는 적어도 하나의 (P_i = xG)인 (x)를 알고 있음을 증명합니다. 이 증명을 반복 불가능하게 만들기 위해, 키 이미지를 (I = xH_p(P))로 도입합니다. 서명자는 거의 같은 명제를 증명하기 위해 동일한 계수((r_i, c_i))를 사용합니다: 그는 적어도 하나의 (H_p(P_i) = I \cdot x^{-1})인 (x)를 알고 있습니다.
이러한 방식으로, LNK는 서명자가 특정 조건을 충족시키는 비밀 키를 알고 있음을 증명하면서도, 동일한 비밀 키를 사용하여 여러 번 서명할 경우 이를 추적할 수 있는 기능을 제공합니다. 이는 링 서명이 익명성을 제공하면서도 일정 수준의 연결 가능성(linkability)을 유지하도록 돕습니다.
x → I 매핑이 주입인 경우:
- 키 이미지에서 공개 키를 복구하여 서명자를 식별할 수 없습니다. 이것은 서명자의 익명성을 보장합니다. 키 이미지는 원래의 공개 키와 연결될 수 없으므로, 서명자의 신원은 보호됩니다.
- 서명자는 같은 (x)를 사용하여 서로 다른 (I)들을 가진 두 개의 서명을 만들 수 없습니다. 이것은 링 서명의 단일성을 보장합니다. 만약 서명자가 같은 (x)를 사용하여 두 개의 서명을 시도한다면, 이 두 서명은 같은 (I)를 가지게 될 것이므로, 이것은 서명이 링 내에서 연결될 수 있음을 의미합니다.
표준 CryptoNote 거래
밥은 링크할 수 없는 공개 키와 추적 불가능한 링 서명의 두 방법을 결합함으로써, 원래의 비트코인 스키마에 비해 새로운 수준의 프라이버시를 달성합니다. 이를 통해 밥은 오직 하나의 개인 키(a, b)만을 저장하고 공개 키(A, B)를 발행하여 익명 거래를 수신하고 발송할 수 있습니다. 각 거래를 확인하는 동안, 밥은 출력당 단 두 번의 타원 곡선 곱셈과 한 번의 덧셈만을 추가로 수행하여 거래가 자신에게 속하는지 검사합니다. 그의 모든 출력에 대해 밥은 일회용 키 쌍(pi, Pi)을 복구하고 그것을 자신의 지갑에 저장합니다. 어떤 입력도 단일 거래에 나타날 경우에만 같은 소유자를 가졌다고 추정적으로 증명될 수 있습니다. 실제로 이러한 관계를 설정하는 것은 일회용 링 서명으로 인해 훨씬 더 어렵습니다.링 서명을 사용함으로써, 밥은 모든 가능한 지출자들이 동등한 확률로 보이도록 자신의 모든 입력을 다른 사람의 것 사이에 효과적으로 숨길 수 있습니다; 이전 소유자(앨리스)조차도 어떤 관찰자보다 더 많은 정보를 가지지 않습니다.이 접근 방식은 트랜잭션의 익명성을 유지하면서도 사용자가 자신의 자산을 안전하게 관리할 수 있게 해주며, 전통적인 비트코인 시스템과 비교했을 때 뛰어난 프라이버시 보호를 제공합니다.
거래를 서명할 때, 밥(Bob)은 자신의 출력과 동일한 금액을 가진 외부 출력 n개를 지정하고, 다른 사용자의 참여 없이 모두 혼합합니다. 밥 자신(또는 누구든지)은 이러한 지불 중 어떤 것이 사용되었는지 알 수 없습니다. 출력은 모호성 요소로서 수천 번의 서명에 사용될 수 있지만, 숨김의 대상으로는 절대 사용되지 않습니다. 이중 지출 검사는 사용된 키 이미지 세트에 대한 확인 시 LNK 단계에서 발생합니다.밥은 모호성의 정도를 자유롭게 선택할 수 있습니다. n = 1일 경우 출력을 소비했을 확률이 50%, n = 99일 경우 1%의 확률을 의미합니다. 결과적으로 생성되는 서명의 크기는 O(n+1)로 선형적으로 증가하므로, 향상된 익명성은 밥에게 추가적인 거래 수수료를 비용으로 요구합니다. 그는 또한 n = 0으로 설정하고 자신의 링 서명을 단 하나의 요소로 구성할 수 있지만, 이는 즉시 그를 소비자로 드러내게 됩니다.이러한 방식으로 밥은 다른 사용자의 출력을 혼합하여 자신의 거래의 익명성을 높일 수 있으며, 사용자는 자신이 선호하는 익명성 수준을 선택할 수 있습니다. 그러나 익명성을 높일수록 거래의 크기가 커지고 이에 따른 수수료도 증가하게 됩니다. 이는 사용자가 더 높은 익명성을 원할 경우 감수해야 할 비용입니다.
평등주의적 작업 증명
이 섹션에서는 새로운 작업 증명 알고리즘을 제안하고 그 근거를 설명합니다. 우리의 주요 목표는 CPU(다수)와 GPU/FPGA/ASIC(소수) 채굴자 사이의 격차를 줄이는 것입니다. 일부 사용자가 다른 사용자보다 약간의 이점을 가질 수는 있지만, 그들의 투자는 적어도 성능과 선형적으로 증가해야 합니다. 보다 일반적으로, 특수 목적 장치를 생산하는 것은 가능한 한 수익성이 낮아야 합니다.
관련 작품
비트코인의 원래 작업 증명 프로토콜은 CPU 집약적인 가격 결정 함수인 SHA-256을 사용합니다. 이는 주로 기본 논리 연산자로 구성되어 있으며, 프로세서의 계산 속도에만 전적으로 의존하므로 멀티코어/컨베이어 실행에 완벽하게 적합합니다. 그러나 현대 컴퓨터는 초당 작업 수만으로 한정되지 않고 메모리 크기에도 제한을 받습니다. 일부 프로세서는 다른 프로세서보다 상당히 빠를 수 있지만, 컴퓨터 간에 메모리 크기가 다를 가능성은 적습니다.
메모리 바운드 가격 결정 함수는 아바디 등에 의해 처음 소개되었으며, “계산 시간이 메모리 접근 시간에 의해 지배되는 함수”로 정의되었습니다. 주요 아이디어는 상대적으로 느린 메모리(예: RAM) 내에 큰 데이터 블록(“스크래치패드”)을 할당하고 그 내부에서 “예측 불가능한 일련의 위치에 접근하는” 알고리즘을 구성하는 것입니다. 블록은 각 접근마다 데이터를 다시 계산하는 것보다 데이터를 보존하는 것이 더 유리하도록 충분히 커야 합니다. 이 알고리즘은 또한 내부 병렬성을 방지해야 하므로, N개의 동시 스레드는 한 번에 N배 더 많은 메모리가 필요해야 합니다.
Dwork 등은 이 접근법을 조사하고 정식화하여 가격 결정 함수의 또 다른 변형인 “Mbound”를 제안했습니다. 또한 F. Coelho[20]는 가장 효과적인 해결책인 “Hokkaido”를 제안한 작업도 있습니다.
우리가 알고 있는 바로는, 큰 배열에서의 유사 무작위 검색 아이디어를 기반으로 한 마지막 연구는 C. Percival(32)에 의해 알려진 “scrypt” 알고리즘입니다. 이전의 함수들과 달리, scrypt는 키 파생에 중점을 두고 있으며, 작업 증명 시스템에는 해당되지 않습니다. 그럼에도 불구하고, scrypt는 우리의 목적에 부합할 수 있습니다: Bitcoin에서 SHA-256과 같은 부분 해시 변환 문제에서 가격 결정 함수로 잘 작동합니다.
Scrypt는 이미 Litecoin과 몇몇 다른 Bitcoin 포크(forks)에서 사용되고 있습니다. 그러나 그 구현이 실제로 메모리 바운드(memory-bound)는 아닙니다. 왜냐하면 각 인스턴스가 단지 128KB만을 사용하기 때문에 “메모리 접근 시간 / 전체 시간”의 비율이 충분히 크지 않습니다. 이는 GPU 마이너들이 대략 10배 더 효율적이게 되고, 상대적으로 저렴하지만 매우 효율적인 마이닝 장치를 만들 가능성을 여전히 남겨둡니다.
또한, scrypt 구조 자체가 메모리 크기와 CPU 속도 사이의 선형적인 교환(trade-off)을 허용합니다. 이는 스크래치패드(scratchpad)의 모든 블록이 이전 블록으로부터만 파생되기 때문입니다. 예를 들어, 매 두 번째 블록을 저장하고 필요할 때만 다른 블록을 게으른 방식(즉, 필요할 때만)으로 재계산할 수 있습니다. 의사 랜덤 인덱스는 균등하게 분포되어 있다고 가정되므로, 추가 블록 재계산의 기대값은 1/2 · N이 됩니다. 여기서 N은 반복 횟수입니다. 전체 계산 시간은 스크래치패드 준비와 각 반복에서의 해싱과 같은 시간 독립적인(상수 시간) 연산이 있기 때문에 절반 미만으로 증가합니다. 메모리를 2/3 절약하는 것은 1/3 · N + 1/3 · 2 · N = N의 추가 재계산 비용이 듭니다; 9/10을 절약하면 1/10 · N + … + 1/10 · 9 · N = 4.5N이 됩니다. 모든 블록의 1/s만을 저장하는 것이 시간을 s−1/2의 요소만큼 덜 증가시킨다는 것을 쉽게 보일 수 있습니다. 이는 결국 현대 칩보다 200배 빠른 CPU를 가진 기계가 스크래치패드의 단지 320바이트만을 저장할 수 있음을 의미합니다.
제안된 알고리즘
로운 메모리 바운드 알고리즘을 제안합니다. 이는 느린 메모리에 대한 무작위 접근을 기반으로 하며, 지연 시간 의존성을 강조합니다. Scrypt와는 대조적으로, 모든 새로운 블록(64바이트 길이)은 이전의 모든 블록에 의존합니다. 결과적으로, 이론적인 “메모리 절약자”는 그의 계산 속도를 기하급수적으로 높여야만 합니다.
우리 알고리즘에는 다음과 같은 이유로 인스턴스당 약 2Mb가 필요합니다:
- 현대 프로세서의 코어당 L3 캐시에 맞을 정도의 크기로, 몇 년 내에 주류가 될 것입니다. 이는 알고리즘이 현대 프로세서의 L3 캐시를 효율적으로 활용할 수 있음을 의미합니다.
- 메가바이트 단위의 내부 메모리는 현대의 ASIC 파이프라인에 거의 받아들일 수 없는 크기입니다. 이는 ASIC 마이너들이 이 알고리즘을 효과적으로 사용하기 어려울 수 있음을 시사합니다.
- GPU는 수백 개의 동시 인스턴스를 실행할 수 있지만, GDDR5 메모리는 CPU의 L3 캐시보다 느리고, 대역폭이 뛰어나지만 랜덤 액세스 속도에서는 뒤떨어집니다. 이는 GPU가 이 알고리즘에서 효율적으로 작동하기 어려울 수 있음을 의미합니다.
- 스크래치패드의 크기를 크게 확장하려면 반복 횟수가 증가해야 하고, 이는 전체 시간 증가를 의미합니다. 신뢰할 수 없는 P2P 네트워크에서 “무거운” 호출은 심각한 취약점을 초래할 수 있습니다. 왜냐하면 노드는 새로운 블록의 작업 증명을 확인해야 하기 때문에, 각 해시 평가에 상당한 시간을 소비하게 되면, 임의의 작업 데이터(Nonce 값)를 가진 가짜 객체의 홍수로 쉽게 DDoS 공격을 받을 수 있습니다.
추가 장점
원활한 방출
CryptoNote 디지털 코인의 총량 상한은 MSupply = 264 – 1의 원자 단위입니다. 이는 “N개의 코인이면 누구에게나 충분하다”는 직관이 아닌 구현의 한계에만 기반한 자연스러운 제한입니다. 배출 과정의 원활함을 보장하기 위해 우리는 다음과 같은 공식을 블록 보상에 사용합니다:
기본 보상(BaseReward) = (MSupply – A) >> 18 입니다.
여기서 A는 이전에 생성된 코인의 양입니다.
조정 가능한 매개변수
어려움
CryptoNote는 네트워크 해시율이 급격히 증가하거나 감소할 때 시스템의 반응 시간을 줄이고, 일정한 블록 생성 속도를 유지하기 위해 각 블록의 난이도를 변경하는 타겟팅 알고리즘을 포함하고 있습니다. 원래 비트코인 방법은 마지막 2016개 블록 사이의 실제 및 목표 시간 간격의 관계를 계산하고 현재 난이도에 대한 곱셈 요소로 사용합니다. 이 방법은 큰 관성 때문에 빠른 재계산에 적합하지 않으며, 결과적으로 진동을 일으킵니다.
우리 알고리즘의 기본 아이디어는 노드들이 완료한 모든 작업을 합산하고 그들이 소비한 시간으로 나누는 것입니다. 작업의 척도는 각 블록의 해당 난이도 값입니다. 그러나 부정확하고 신뢰할 수 없는 타임스탬프로 인해 블록 간의 정확한 시간 간격을 결정할 수 없습니다. 사용자는 자신의 타임스탬프를 미래로 옮길 수 있으며, 다음 시간 간격은 비현실적으로 작거나 심지어 음수일 수 있습니다. 이러한 종류의 사건이 몇 건 있을 것으로 가정하고, 타임스탬프를 정렬하고 이상치(예: 20%)를 제거할 수 있습니다. 나머지 값의 범위는 해당 블록의 80%에 대해 소비된 시간입니다.
크기 제한
블록체인 저장 비용을 지불하는 사용자는 그 크기에 대한 투표 권리를 가질 수 있습니다. 모든 채굴자는 수수료로부터 얻는 이익과 비용 사이의 균형을 맞추며 자신만의 “소프트-리밋”을 설정하여 블록을 생성합니다. 또한, 블록체인이 가짜 거래로 범람하는 것을 방지하기 위한 최대 블록 크기에 대한 핵심 규칙이 필요하지만, 이 값은 하드코딩되어서는 안 됩니다.
최근 N개 블록 크기의 중앙값을 MN이라고 할 때, 수용 가능한 블록 크기의 “하드-리밋”은 2 · MN입니다. 이는 블록체인이 팽창하는 것을 방지하지만, 필요한 경우 시간이 지남에 따라 한계가 서서히 증가할 수 있도록 허용합니다.
거래 크기를 명시적으로 제한할 필요는 없습니다. 이는 블록의 크기에 의해 제한되며, 만약 누군가 수백 개의 입력/출력(또는 링 서명에서 높은 모호성 정도)을 가진 거대한 거래를 생성하고자 한다면, 충분한 수수료를 지불함으로써 이를 수행할 수 있습니다.
크기 초과 페널티
광부는 여전히 자신의 수수료 없는 거래로 최대 크기인 2 · Mb까지 블록을 채울 수 있습니다. 비록 대다수의 광부만이 중간값을 변경할 수 있지만, 여전히 블록체인을 부풀리고 노드에 추가적인 부하를 줄 수 있는 가능성이 있습니다.
악의적인 참여자들이 큰 블록을 생성하는 것을 방지하기 위해 우리는 벌칙 함수를 도입합니다:
이 규칙은 BlkSize가 최소 무료 블록 크기보다 클 때만 적용됩니다. 이 최소 크기는 max(10kb, MN·110%)에 가까워야 합니다. 채굴자들은 “통상적인 크기”의 블록을 생성할 수 있으며, 전체 수수료가 벌금을 초과할 경우 이익을 얻으며 그 크기를 초과할 수도 있습니다. 그러나 수수료는 벌금 값처럼 제곱적으로 증가하기 어렵기 때문에 균형점이 있을 것입니다.
트랜잭션 스크립트
CryptoNote는 매우 간소화된 스크립팅 부시스템을 가지고 있습니다. 송신자는 표현식 Φ = f(x1, x2, …, xn)를 지정하는데, 여기서 n은 목적지 공개 키 {Pi}의 수입니다. 지원되는 이진 연산자는 min, max, sum, mul, 그리고 cmp의 오직 다섯 가지입니다. 수신자가 이 지불을 사용할 때, 그는 0 ≤ k ≤ n의 서명을 생성하고 이를 트랜잭션 입력으로 전달합니다. 검증 과정은 단순히 xi = 1일 때 Φ를 평가하여 공개 키 Pi에 대한 유효한 서명을 확인하고, xi = 0입니다. 검증자는 Φ > 0일 경우 증명을 수락합니다.
단순함에도 불구하고 이 접근 방식은 가능한 모든 경우를 포괄합니다:
- 다중/임계값 서명. 비트코인 스타일의 “M-out-of-N” 멀티시그니처(즉, 수신자는 최소 0 ≤ M ≤ N의 유효한 서명을 제공해야 함)의 경우, Φ = x1 + x2 + … + xN ≥ M으로 표현됩니다(명확성을 위해 일반 대수학적 표기법을 사용합니다). 일부 키가 다른 키보다 더 중요할 수 있는 가중치 임계값 서명은 Φ = w1 · x1 + w2 · x2 + … + wN · xN ≥ wM으로 표현될 수 있습니다. 그리고 마스터 키가 Φ = max(M · x, x1 + x2 + … + xN) ≥ M에 해당하는 시나리오입니다. 이러한 연산자들은 기초를 형성한다고 즉, 어떤 복잡한 경우도 이 연산자들로 표현될 수 있음을 쉽게 보여줄 수 있습니다.
- 비밀번호 보안. 비밀번호 s의 소유는 비밀번호로부터 결정론적으로 유도된 개인 키, 즉 k = KDF(s)를 알고 있다는 것과 동일합니다. 따라서 수신자는 키 k 아래에서 다른 서명을 제공함으로써 비밀번호를 알고 있음을 증명할 수 있습니다. 송신자는 단순히 해당 공개 키를 자신의 출력에 추가합니다. 이 방법은 Bitcoin에서 사용되는 “트랜잭션 퍼즐”보다 훨씬 더 안전한데, 이 경우 비밀번호가 입력값에 명시적으로 전달됩니다.
- 퇴화 사례. Φ = 1이면 누구나 돈을 사용할 수 있음을 의미하고, Φ = 0은 해당 출력이 영원히 사용할 수 없음을 나타냅니다.
만약 출력 스크립트와 공개 키의 결합이 송신자에게 너무 크다고 판단될 때, 송신자는 특별한 출력 유형을 사용할 수 있습니다. 이 유형은 수신자가 그의 입력에 이 데이터를 포함시키고 송신자는 이 데이터의 해시만을 제공한다는 것을 나타냅니다. 이 접근 방식은 비트코인의 “지불-대-해시” 기능과 유사하지만, 새로운 스크립트 명령어를 추가하는 대신 데이터 구조 수준에서 이 경우를 처리합니다.
결론
우리는 비트코인의 주요 결함을 조사하고 몇 가지 가능한 해결책을 제안했습니다. 이러한 유리한 기능들과 우리의 지속적인 개발은 새로운 전자 현금 시스템인 CryptoNote를 비트코인의 심각한 경쟁자로 만들며, 그 모든 포크들을 능가합니다.
노벨상 수상자 프리드리히 하이에크는 그의 유명한 저작에서 동시에 독립적으로 존재하는 여러 화폐들이 매우 긍정적인 효과를 가져온다는 것을 증명했습니다. 각 화폐 발행자(또는 우리 사례에서는 개발자)는 자신의 제품을 개선함으로써 사용자를 끌어들이려고 합니다. 화폐는 상품과 같습니다: 독특한 이점과 단점을 가질 수 있으며, 가장 편리하고 신뢰할 수 있는 화폐가 가장 큰 수요를 가집니다. 비트코인보다 우수한 화폐가 있다고 가정하면, 이는 비트코인이 더 빠르게 발전하고 더 나아질 것임을 의미합니다. 오픈 소스 프로젝트로서 가장 큰 지원은 그것에 관심을 가진 자신의 사용자들로부터 올 것입니다.
CryptoNote를 비트코인의 완전한 대체재로 생각하지 않습니다. 반대로, 두 개(또는 그 이상)의 강력하고 편리한 화폐를 가지고 있는 것이 단 하나만 있는 것보다 낫습니다. 서로 다른 두 개 이상의 프로젝트를 병행해서 진행하는 것은 전자화폐 경제의 자연스러운 흐름입니다.
보안
우리는 우리의 일회용 링 서명 스킴에 대한 증명을 제공할 것입니다. 어느 정도에서 이 증명은 [24]의 증명 부분과 일치하지만, 독자가 여러 논문을 오가며 읽어야 하는 번거로움을 피하기 위해 참조를 포함하여 다시 작성하기로 결정했습니다. 확립해야 할 속성은 다음과 같습니다:
- 연결성(Linkability): 주어진 모든 비밀 키 {xi}에 대해 집합 S에서 n + 1개의 유효한 서명 σ1, σ2, …, σn+1을 생성하는 것이 불가능하며, 이들 모두 LNK 단계를 통과해야 합니다(즉, n + 1개의 다른 키 이미지 Ii를 가짐). 이 속성은 CryptoNote의 이중 지출 보호를 의미합니다.
- 비배제성(Exculpability): 집합 S와 대응하는 최대 n-1개의 비밀 키 xi (i = j 제외) 및 키 xj의 이미지 Ij가 주어졌을 때, Ij를 사용한 유효한 서명 σ를 생성하는 것이 불가능합니다. 이 속성은 CryptoNote의 도난 보호를 의미합니다.
- 위조 불가능성(Unforgeability): 공개 키 집합 S만 주어진 상태에서 유효한 서명 σ를 생성하는 것이 불가능합니다.
- 익명성(Anonymity): 서명 σ 및 해당하는 집합 S가 주어졌을 때, 서명자의 비밀 인덱스 j를 확률 p > 1/n으로 결정하는 것이 불가능합니다.
연결성
정리 1. 우리의 일회성 링 서명 체계는 무작위 오라클 모델에서 연결 가능합니다.
증명. 만약 적이 모든 i, j ∈ [1…n]에 대해 Ii ≠ Ij인 n + 1개의 유효한 서명 σi를 생성할 수 있다고 가정해 보자. #S = n이므로, 적어도 하나의 Ii ≠ xiHp(Pi)가 모든 i에 대해 성립한다. 해당 서명 σ = (I, c1, …, cn, r1, …, rn)을 고려해 보자. VER(σ) = “true”라면, 이는
첫 두 개의 등식이 시사하는 바는
여기서 logA B는 비공식적으로 기본 A에 대한 B의 이산 로그를 나타냅니다. @i : xi = logHp(Pi) I는 모든 ci가 고유하게 결정됨을 의미합니다. 세 번째 등식은 공격자가 공격에 성공하기 위해 Hs의 선행 이미지를 찾도록 강제하며, 이 사건의 확률은 무시할 수 있을 정도로 작다고 간주됩니다.
면제 가능성
정리 2. 무작위 오라클 모델에서 이산 로그 가정 하에 우리의 일회용 링 서명 스킴은 면책성을 가진다.
증거. 공격자가 유효한 서명을 생성할 수 있다고 가정합니다. σ = (I, c1, . . . , cn, r1, . . . , rn) 와 I = xjHP (Pj) 주어진 {xi | i = 1, . . . , j −1, j +1, . . . , n}. 그런 다음, 이산 로그 문제를 해결하는 알고리즘 A를 구성할 수 있습니다. E(Fq).
가정해보자 = (tt, P ) ∈ E(Fq) s는 DLP의 특정 인스턴스이며 목표는 s를 얻는 것입니다. P = stt. 표준 기술 사용(as in [24]), A 무작위로 시뮬레이션하고 오라클에 서명하고 적이 다음과 같은 두 개의 유효한 서명을 생성하도록 만듭니다.
Pj = P in the set :σ = (I, c1, . . . , cn, r1, . . . , rn) and σj = (I, cj1, . . . , cjn, r1j , . . . , rnj ).
내가 이래로 = xjHp(Pj)두 서명 모두에서 우리는 x를 계산하다j = logHp(Pj )I = rj −rjtctj −cj mod l
A는 Lj 때문에 xj를 출력합니다. = rjtt + cjPj = rjj tt + cjj Pj and Pj = P .
위조 불가능
연결성(linkability)과 면책성(exculpability)의 두 가지 특성이 모두 있을 때, 위조 불가능성(unforgeability)이라는 결과가 도출된다고 보여졌습니다.
정리 3. 만약 일회용 링 서명 체계가 연결 가능하고 면책 가능하다면, 그것은 위조할 수 없습니다.
증명. 주어진 집합 S에 대해 적대자가 서명 σ0 = (I0, …)을 위조할 수 있다고 가정해 봅시다. 동일한 메시지 m과 집합 S에 대해 정직한 서명자들이 생성한 모든 유효한 서명들을 고려해보겠습니다: σ1, σ2, …, σn. 두 가지 가능한 경우가 있습니다:
- I0 ∈ {Ii}ni=1. 이는 면제 가능성과 모순됩니다.
- I0 ∈ {Ii}ni=1. 이는 연결성과 모순됩니다.
익명
정리 4. 우리의 일회용 링 서명 스킴은 랜덤 오라클 모델에서 결정적 디피-헬만 가정 하에 익명성을 제공합니다.
Hp 해시 함수에 대한 메모
우리는 Hp를 결정론적 해시 함수 E(Fq) → E(Fq)로 정의했습니다. 어떤 증명도 Hp가 이상적인 암호학적 해시 함수일 필요는 없습니다. 그것의 주요 목적은 어떤 결정된 방식으로 이미지 키 I = xHp(xG)에 대한 의사-랜덤 기반을 얻는 것입니다. 고정된 기반(I = xG2)을 가진 다음 시나리오가 가능합니다:
- 앨리스는 두 개의 표준 거래를 밥에게 보내면서 일회용 거래 키를 생성합니다: P2 = Hs(r1A)G + B 및 P1 = Hs(r2A)G + B.
- 밥은 해당하는 일회용 개인 거래 키 x1과 x2를 복구하고 유효한 서명과 이미지 키 I1 = x1G2 및 I2 = x2G2로 출력물을 사용합니다.
- 이제 앨리스는 서명을 연결할 수 있으며, I1−I2의 동등성을 확인합니다: I1−I2 ?= (Hs(r1A)−Hs(r2A))G2.
문제는 Alice가 공개 키 P1과 P2 사이의 선형 상관관계를 알고 있으며, 고정된 기저 G2의 경우에는 키 이미지 I1과 I2 사이에도 동일한 상관관계를 얻게 된다는 것입니다. 선형성을 유지하지 않는 Hp(xG2)로 G2를 대체하는 것이 그 결함을 해결합니다. 결정적인 Hp를 구성하기 위해 우리는 다음에 제시된 알고리즘을 사용합니다.
참고자료
[1] http://bitcoin.org.
[2] https://en.bitcoin.it/wiki/Category:Mixing Services.
[3] http://blog.ezyang.com/2012/07/secure-multiparty-bitcoin-anonymization.
[4] https://bitcointalk.org/index.php?topic=279249.0.
[5] http://msrvideo.vo.msecnd.net/rmcvideos/192058/dl/192058.pdf.
[6] https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki#Specification.
[7] https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki#Backwards
Compatibility.
[8] https://en.bitcoin.it/wiki/Mining hardware comparison.
[9] https://github.com/bitcoin/bips/blob/master/bip-0050.mediawiki.
[10] http://luke.dashjr.org/programs/bitcoin/files/charts/branches.html.
[11] https://bitcointalk.org/index.php?topic=196259.0.
[12] https://en.bitcoin.it/wiki/Contracts.
[13] https://en.bitcoin.it/wiki/Script.
[14] http://litecoin.org.
[15] Mart´ın Abadi, Michael Burrows, and Ted Wobber. Moderately hard, memory-bound functions. In NDSS, 2003.
[16] Ben Adida, Susan Hohenberger, and Ronald L. Rivest. Ad-hoc-group signatures from hijacked keypairs. In in DIMACS Workshop on Theft in E-Commerce, 2005.
[17] Man Ho Au, Sherman S. M. Chow, Willy Susilo, and Patrick P. Tsang. Short linkable ring
signatures revisited. In EuroPKI, pages 101–115, 2006.
[18] Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, and Bo-Yin Yang. High-speed
high-security signatures. J. Cryptographic Engineering, 2(2):77–89, 2012.
[19] David Chaum and Eug`ene van Heyst. Group signatures. In EUROCRYPT, pages 257–265,
1991.
[20] Fabien Coelho. Exponential memory-bound functions for proof of work protocols. IACR
Cryptology ePrint Archive, 2005:356, 2005.
[21] Ronald Cramer, Ivan Damg˚ard, and Berry Schoenmakers. Proofs of partial knowledge and
simplified design of witness hiding protocols. In CRYPTO, pages 174–187, 1994.
[22] Cynthia Dwork, Andrew Goldberg, and Moni Naor. On memory-bound functions for fighting
spam. In CRYPTO, pages 426–444, 2003.
[23] Eiichiro Fujisaki. Sub-linear size traceable ring signatures without random oracles. In CTRSA, pages 393–415, 2011.
[24] Eiichiro Fujisaki and Koutarou Suzuki. Traceable ring signature. In Public Key Cryptography, pages 181–200, 2007.
[25] Jezz Garzik. Peer review of “quantitative analysis of the full bitcoin transaction graph”.
https://gist.github.com/3901921, 2012.
[26] Joseph K. Liu, Victor K. Wei, and Duncan S. Wong. Linkable spontaneous anonymous
group signature for ad hoc groups (extended abstract). In ACISP, pages 325–335, 2004.
[27] Joseph K. Liu and Duncan S. Wong. Linkable ring signatures: Security models and new
schemes. In ICCSA (2), pages 614–623, 2005.
[28] Ian Miers, Christina Garman, Matthew Green, and Aviel D. Rubin. Zerocoin: Anonymous
distributed e-cash from bitcoin. In IEEE Symposium on Security and Privacy, pages 397–
411, 2013.
[29] Micha Ober, Stefan Katzenbeisser, and Kay Hamacher. Structure and anonymity of the
bitcoin transaction graph. Future internet, 5(2):237–250, 2013.
[30] Tatsuaki Okamoto and Kazuo Ohta. Universal electronic cash. In CRYPTO, pages 324–337,
1991.
[31] Marc Santamaria Ortega. The bitcoin transaction graph — anonymity. Master’s thesis,
Universitat Oberta de Catalunya, June 2013.
[32] Colin Percival. Stronger key derivation via sequential memory-hard functions. Presented at
BSDCan’09, May 2009.
[33] Fergal Reid and Martin Harrigan. An analysis of anonymity in the bitcoin system. CoRR,
abs/1107.4524, 2011.
[34] Ronald L. Rivest, Adi Shamir, and Yael Tauman. How to leak a secret. In ASIACRYPT,
pages 552–565, 2001.
[35] Dorit Ron and Adi Shamir. Quantitative analysis of the full bitcoin transaction graph.
IACR Cryptology ePrint Archive, 2012:584, 2012.
[36] Meni Rosenfeld. Analysis of hashrate-based double-spending. 2012.
[37] Maciej Ulas. Rational points on certain hyperelliptic curves over finite fields. Bulletin of
the Polish Academy of Sciences. Mathematics, 55(2):97–104, 2007.
[38] Qianhong Wu, Willy Susilo, Yi Mu, and Fangguo Zhang. Ad hoc group signatures. In
IWSEC, pages 120–135, 2006