Bitcoin-Powered Database

提供: tezos-wiki
移動先: 案内検索

[このプロジェクトのためのhttps://booster.io/tipjar/0c9zmrc バウンティジャー]。

私が知る限り、Bitcoinブロックチェインは、グローバルと改ざんの両方を防ぐ唯一のデータ構造です。

  • 'global' - ブロックチェーンのグローバルインスタンスが1つあります(フォークまでが解決されます)。
  • 'tamper-proof' - ブロックがブロックチェーンに入ると、6回以上の確認の後、このブロックは偽装されたり改ざんされたりすることはありません。

Bitcoinで動くデータベースは、通常のCRUD データベース操作のサブセットを公開するブロックチェーン上のAPIになります。実際には、ブロックチェーンから実際には何も削除できないため、追加専用のデータ構造になるため、CREATE操作とREAD操作だけが実装されます。オブジェクトのバージョン管理は、更新と削除をエミュレートするために使用されます。

ユースケース[編集]

削除不能、監査可能な資産元帳[編集]

2012年5月、[Bitcoinica]がハッキングされ、元帳データベースが削除されました。その元帳がグローバルな改ざん防止データベースで管理されていた場合、これは出来ませんでした。

このような元帳は、アカウントの残高を秘密に保つために、各天秤をサイト運営者と天秤の所有者のみが知っている鍵で暗号化する方法で構築することができます。 Bitcoin Powered Databaseは、ほとんどのWebサイトのバックエンドとして実行するのに適したパフォーマンス特性を持っていない可能性がありますが、永続的なデータバックアップとして使用することができます。

実装[編集]

通常のデータベースは、サーバとクライアントライブラリで構成されています。 この場合、「サーバー」はすべてマイナーノードであるため、クライアントライブラリのみが必要です。 すべての操作はBitcoinトランザクションとしてエンコードされます。

ブロックチェーンメッセージサービスを使用して、ブロックチェーン内のパラメータ 'メッセージ' をエンコードするプリミティブPUT(メッセージ)を使用します。

作成(guid、バージョン、エンコーディング、データ、所有者_公開鍵、ハッシュアルゴリズム、署名)[編集]

この操作で新しいレコードが作成されます。

  • guid - クライアントが生成したこのオブジェクトを識別する一意のID。
  • version - オブジェクトのバージョン番号。
  • encoding - データのエンコーディングを識別するenum(例えば、jsonの場合は0、zipのjsonの場合は1、必要に応じて他のフォーマットを追加することができます)
  • データ - アプリケーション固有。データは***エンコーディング***パラメータに従ってデコードする必要があります。
  • hash_algorithm - データを検証するために使用する暗号ハッシュ関数を指定するenum(RSA + bcryptの場合は0)。
  • owner_pub_key - このオブジェクトの所有者を識別する公開鍵(RSAなど)
  • signature - 他のすべてのパラメータに対するハッシュ値。 (bcrypt(RSA_encrypt(private_key、(guid、バージョン、エンコーディング、データ、hash_algorithm、owner_pub_key)))。

CREATE操作が特定のGUIDで初めて使用されるとき、そのバージョンは0に等しくなければならず、任意のowner_pub_keyを提供することができます。このGUIDを持つ後続のCREATEオペレーションは、同じowner_pub_keyを持つ必要があり、1 + max(同じguidを持つオブジェクトの以前のバージョン)に等しいバージョンを持つ必要があります。

無効なCREATEは無視されます(たとえば、不適切なバージョンまたは間違った署名のあるCREATEなど)。

CREATE操作では、Bitcoinがネットワークによって「実行」されるのに必要なコストがかかります。正確な量は、PUT操作の実装に依存します(CREATEの生の実装は、パラメータの連結)。

READ(guid)[編集]

この操作は、このGUIDを持つオブジェクトのすべての有効なバージョンの配列を返します(オブジェクトが存在しない場合は空の配列)。ブロックチェーンをたどってこのguidで最初のメッセージを探し、owner_pub_keyを格納し、そこから前方に移動して、有効なバージョンを識別し、無効なものを破棄することで、これは単純に実装されます。この素朴な実装は非常にコストがかかりますが(O(ブロックチェーンサイズ))、キャッシュできます。

元帳のサンプル実装[編集]

富士山などのトレーディングサイト。 Gox、GLBSE、Bitcoinicaは、各ユーザーと資産クラス(BTC、USD、有価証券)ごとに、特定の瞬間に自分が所有する資産の量を記録するシステムである元帳を使用します。このようなサイトでBPD上で監査可能な公的元帳を実装する簡単な方法があります。

  • すべてのユーザーに対して、一意の暗号化キーとGUIDの両方を作成します。これらは登録時にすぐにユーザーに送信され、Webサイトの通常のデータベースにも保存されます。
  • サイト上のトランザクションごとに、ユーザーのすべての資産を含むステートメントが何らかの形式でエンコードされ、ユーザーのGUIDおよび暗号化キーを使用して暗号化された形式でBPDに書き込まれます。
  • ユーザがwebiste上の資産を確認したいときはいつでも、彼は彼のguidでREAD操作を実行し、その後彼の解読鍵を使って彼の残高を解読する。その後、彼は現在のアカウントと以前のアカウントを検証することができます。

BPD内のすべてのデータは暗号化されているため、このシステムではWebサイトのセキュリティは低下しません(ユーザーのコンピュータはトロイの木馬がないものとみなされます。これが問題であれば、ユーザーは自分のコピーを受け取ることはできません)暗号化キー...これは、少なくともサイトの所有者が元帳を認証する確実な方法を持っているため、BPDを使用しない方が好ましいです。削除や改ざんはできません。guidsと暗号化キーは保護され、バックアップされます)。