準備金保有の証明
監査
弊社の監査プロセスについて
イントロダクション
このページではKrakenでの監査プロセスとその背景について知る事が出来ます。
Krakenは準備金を充分に保有しており、お客様の資産が適切に管理されていることをお客様を含む第三者に証明するため、独立した、暗号法によって検証された監査を行なっております。透明性と独立性を保った監査を行うことは、お客様の資産を全て維持している事を保証するためには必要不可欠です。 準備金スキームを公開実証することは技術的には可能ですが、実行する前にはプライバシーの保護など、外部性に関わる懸念を注意深く考慮しなくてはなりません。取引所やウォレットは、その責任を通じて信頼を得るべきだと考えます。 そして、透明性に対するコミュニテイからの要求に応えるのが弊社の責任です。
弊社では過去数週間に渡り、業界トップレベルの、独立した、暗号法によって検証された監査方法を開発し、完了しました。 そのプロセスの概要を、世界の仮想通貨コミュニテイにお知らせ出来る事を誇りに思います。仮想通貨業界は、伝統的な金融サービス業界よりも優れたレベルの保証、責任を提供出来ると弊社は信じており、究極の透明性を求めて業界をリードして行きます。
最近の市況
きっかけとなったのは、取引所/ウォレットはビットコイン準備金を証明するべきだというGreg Maxwellの提案です。 [1]
今日まで仮想通貨業界における監査は、不透明で、表面的なものにとどまり、公的に検証可能な暗号法による検証ではありませんでした。弊社での監査についての概念実証をすることにより、仮想通貨エコシステムの透明性、責任に関する業界スタンダードを設定し、他社も追随し向上していければ、というのがKrakenの願いです。
品質 プロセス
Maxwellの提案によると、すべてのビットコイン関連業者が残高のあるアドレスを開示する必要があるということでした。この方法を用いると、取引所もしくはウォレットサービス提供者のビットコインウォレットや総額等の機密情報を開示することとなり、企業とユーザーへのセキュリティリスクを高めることとなります。さらには、ユーザーのプライバシー侵害に繋がり、適正な手続き無しで第三者が個人の保有残高や金融活動を追跡することができるということになります。
弊社のプロセスでは、残高やアドレス、鍵を公にする必要がありません。信頼ある監査人および公的に確認可能な暗号法の両方を用いることで、弊社の監査ではプライバシーと透明性の理想的なバランスを示すことが可能です。
ビットコインが主要な仮想通貨であることから、弊社の監査はビットコインの準備金から開始します。将来的には他の通貨の監査も予定しております。
プロセス概要
-
第1段階 - 監査人はKrakenのウォレット 内の全資金を調査します。
Krakenは監査人に全ての公開アドレスを渡し、署名します。署名した時点でのブロックハッシュは署名したメッセージの一部となり、 署名時点でのタイムスタンプとなります。公開アドレスの署名は検証され、監査人はビットコインのブロックチェーンより、当該アドレス内のある時点での合計資金を抜粋します。
本段階で使用されるコードは、Payward社の最高経営責任者(COO)であるMichael Gronagerによって書かれており、将来全てオープンソースになる可能性があります。しかしコードはlibcoinを使って書かれているので、その大部分は既にオープンソースです。 [2]
-
第2段階 - 監査人は、Krakenのお客様の資金残高とKraken ウォレット内の資金額が一致することを確認します。
Krakenは監査人に個々のお客様のビットコイン残高を知らせ、マークルツリーを作成します。監査人はツリーのルートノードのハッシュを公開し、ルートハッシュの値がブロックチェーン上の弊社ウォレットの残高とほぼ一致しているかどうかを確認します。このプロセスにより、Krakenがルートに繋がるどのノードに何も隠していないことを証明出来ます。
本段階では、監査人はマークルツリー作成用のコードと、個々のアカウント残高に関するデータファイルにアクセス出来ます。Krakenはこの段階に使われるC++コードをMITライセンスの元リリースしています。https://github.com/payward/krakendb
-
第3段階 - お客様が、監査人が使用したデータに、自身のアカウント残高が含まれていることを確認します。
弊社は、お客様に監査人に伝えた資金額をお伝えし、また、お客様のアカウントからルートまでのノード(付随するノードも含む)もお伝えします(監査人によって公開されたものと一致するはずです)。 弊社はお客様のノードに使われたハッシュ方法も開示しますので、ノードが確かに弊社が主張する金額を示していることを検証出来ます。
これによりお客様は、お客様のアカウントが確かに監査対象に含まれていたという事をご自分で確認する事が出来ます。
短所
このページでは監査の脆弱性について言及します。これは脆弱性の完全なリストではありません。しかしながら、弊社はお客様への透明性を重要視しており、監査プロセスでこれまでに確認された脆弱性について背景をご説明します。
物的資産とは異なり、資産の移行に伴う名義変更の必要はありません。その為、この監査方法を採用している弊社および他社は、秘密鍵が攻撃者により複製されていないという確証を得ることは出来ません。また、弊社は監査対象の資金の独占所持を証明することは出来ません。唯一確証できることは、弊社が監査の時点で秘密鍵を所有していた取引所のうちの一つであるということです。
要求に応じ全面監査を実施することは、予告なくして出来ません。必要な情報、監査体系、現在の業界のスタンダードであるコールドウォレットのセキュリティ対策を考慮に入れると、突然の監査は実行可能ではありません。弊社では全面監査の前に、以前作成された署名を頼りにした簡易な監査を頻繁に実施する可能性を考えています。
監査人は信頼でき、有能である必要があります。コミュニティは監査人がその評判に重きを置いていること、また技術的に能力があることを信頼できなければなりません。この監査プロセスにおいて、技術面に乏しい監査人および猜疑心が少ない監査人が、被監査人により騙される可能性もあります。また、監査人が故意に、もしくは誤って企業や顧客の機密情報を流出してしまう可能性もあります。監査人も被監査人も、コンピューター、監査を行う場所、ブロックチェーン、インターネットの接続、ルーター、DNS等の提供者を考慮に入れる必要があります。目的が10億ドルの詐欺を隠蔽することだとしたら、監査を侵害するのに多くの時間を費やしなければならないことが予想されるでしょう。
監査はリアルタイムで継続更新されるわけではありません。最後の監査が実行された日から、鍵を紛失しまっていたり、資金が盗まれている可能性もあります。全面監査により鍵の紛失がなかったことの確証を再確認できますが、この監査にはコールドウォレットの鍵を使用する必要があるため、より大きな脅威にさらされることになります。
被監査人は、監査に通るために資金の保持者から一時的に資金を借り入れたり、鍵をシェアする場合があります。
監査人は被監査人と共謀したり、被監査人からの脅威に屈する場合もあります。
継続的に
弊社では継続的に監査を実施する予定です。世界的に信頼されている監査人が存在しないため、弊社では毎度異なる監査人、もしくは複数の監査人を使用する場合もございます。これにより監査人に対する信用性を疑われることはありません。
将来的な変更 および改善点
今後、より良い監査を実施できるよう、皆さまからのご意見をいただければ幸いです。コミュニティの一員として、DATA (www.datauthority.org) 等の産業組織と共に、根本基準や拡張機能を開発できるよう、また他社が同様の監査を実施できるよう努力して参ります。
参照
[1] Summary by Zak Wilcox: https://iwilcox.me.uk/2014/proving-bitcoin-reserves. このアイデアの提供者であるGreg Maxwell に感謝いたします。
[2] libcoin is the transformation of bitcoin into modular, reusable libraries: https://github.com/libcoin/libcoin
Krakenの監査で個人のアカウント残高を確認する方法
Kraken準備金の監査プロセスもご覧ください。
ここではお客様のアカウント残高がどのように暗号化され承認されるのか、またどのように監査に使用されるのかをご説明しています。
この承認作業には、監査が行われた時点でのビットコイン(XBT)の残高が使用されます。
-
ステップ1
アカウントにログインされていない場合には、ログインを行なってください。
https://www.kraken.com/へ移動した後、アドレスバーに "https://www.kraken.com/"が表示されていることをご確認ください。
-
ステップ2
「入出金」をクリックし、「監査」のタブを選択後、 画面左側に表示される「ビットコイン(XBT)」ご選択ください。
画像1 Kraken ビットコイン 監査 ページ
-
ステップ3
監査人から承認されたアカウント情報をご確認ください。
-
監査が行われた日時
-
64ビットの暗号送信コード
-
監査の時点でのお客様のビットコイン保有額。弊社が監査人に開示した金額です。
-
備考には監査に使用されたルートハッシュ値が記載されています。この詳細に関する署名済みのリンクも記載されています。
-
ノードからルートまでのハッシュ値。これには付随する値も含まれます。お客様のハッシュ値にはアスタリスク(*)が表示され、付随するノードと区別することが可能です。このハッシュ値により、お客様のノードが確かにルートに含まれていたという事を確認する事が出来ます。
-
一行目は監査人から提供されたルートハッシュと一致する必要があります。
ご自身のノードハッシュ値を確認するには、 (リスト最後に*と共に表示される値 )以下を行なってください。
sha256(sha256(<submission code> || ":" || <amount with decimal point removed and leading 0's removed>))
このハッシュ値は、最後に表示されるハッシュ値と一致する必要があります。
コードの例
送信コード: 379377cd8190f9bf
金額: 0.01500000
Python
import hashlib; print(hashlib.sha256(hashlib.sha256(b'379377cd8190f9bf:1500000').digest()).hexdigest());
PHP
echo hash('sha256', hash('sha256', '379377cd8190f9bf:1500000', true));
結果
66b51ba0f4a5cf8278acac6782ffdfb9a64b9f7c895bc308266b0757c7025b27
お客様のマークルツリーを確認するには、各ペアのハッシュ値をハッシュ、もしくはタプルしてください。フォーマットは以下の通りです:
sha256(left-hash || right-hash)
結果は一つ前の*が付いているタプルハッシュ(もしくはルートハッシュ)と一致する必要があります。これは全てのタプルに有効です。
ルートハッシュ以外のハッシュに関しては、すベてタプルとなっており、左側のハッシュと右側のハッシュの順に表示されます。 *はお客様のノードに関連するものに表示されます。
コードの例:
ハッシュ値:
306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3* c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b* 5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c
Python
import hashlib; print(hashlib.sha256(b'c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'.decode('hex'))).hexdigest();
PHP
echo hash('sha256', hex2bin('c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'));
結果
306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3
-