RVMX ブロックチェイン関連でビットコイン(Bitcoin)の検証


1.まえがき

 ビットコイン(Bitcoin)はブロックチェインを利用した機能の一つです。
 ブロックチェインを検証する為に、ビットコインの仕組みと機能を検証しました。

2.ビットコインの構成と機能

  -1.ネットワーク
   ビットコインにはTestNetとMainNetの2つのネットワークがある。
   a.TestNetは開発を目的としたビットコインのネットワーク。このネットワーク上のビットコインに価値はない。
   b.MainNetは普通のユーザーが使うネットワークである。(実際のビッコインの流通)

  -2.マイナー
   ビットコインブロックチェーンにトランザクションを記録する
   しかしマイナーはトランザクションを1つ受け取るたびにビットコインブロックチェーンを変更しているわけではない。
   そうではなく、それぞれのマイナーは、ブロックと呼ばれる同時期に発生したトランザクションの集まりをブロックチェーンに追加しようとする。
   ネットワーク上にある他のノードは、その新しいブロックがビットコインプロトコルに示されているルールに従っているかを確認する。
   もし2人のマイナーが同時にブロックに加えたら、フォークが生まれ、しかし結局は最もマイニング労力(work)が費やされたフォークだけが生き残る。
   もしマイナーがブロックに無効なトランザクションを含めようとしたら、他のノードがそれを承認しないので、
   そのマイナーはブロックを作るために使われた投資を無駄にすることになる。

  -3.ビットコインの移動(bitcoin_transfer)
   a.アドレス(address)
    ビットコインの支払いや支払いを受けるために公開するアドレス
    公開鍵とネットワークの種類から、ビットコインアドレスを作ることができる。
    バージョンを示す先頭1バイト(TestNetかMainNetかで異なる)と公開鍵ハッシュで構成されており、それらが結合された後、Base58Checkにエンコードされる

   b.公開鍵(ScriptPubKeyt)
    秘密鍵から公開鍵を作成する。これは一方向性の暗号学的な機能を使っていて、逆に公開鍵から秘密鍵は作れない。
    短いスクリプトでビットコインの所有権を主張するために、どんな条件が揃わなければならないかを説明するもの
    ScriptPubKeyの情報とネットワークを指し示す情報からビットコインアドレスに戻すことができる。
    またはScriptPubKeyから公開鍵ハッシュに戻し、さらにそれからビットコインアドレスを生成することができる。

   c.秘密鍵(private_key)
    秘密鍵はネットワークには保管されず、インターネットにアクセスすることなく生成することができる。
    ビットコインアドレスと同じBase58Check形式の、ビットコインシークレットで表現される。
    これはウォレットにインポートするフォーマットWIF(Wallet Import Format)としても知られている。
    ビットコインシークレットから秘密鍵を導出するのは可能だが,アドレスから公開鍵を導くことはできない。

   d.トランザクション(transaction)
    トランザクションは、ビットコインシステムの中で最も重要な部分です。
    トランザクションは、ビットコインシステムの参加者間の価値の移転をエンコードしたデータ構造です。
    個々のトランザクションは、複式簿記の元帳であるブロックチェーンに記された、誰でも見ることができる取引記録です。

   e.ブロックチェーン(blockchain)
    ジェネシスブロックとして知られている最初のビットコインのトランザクションが発生して以降の、すべてのトランザクションのデータベースとなっている。
    そしてブロックチェーンは世界中に複製されている。

   f.支払い(spend your coin)
    ビットコインを支払いに使う
    ビットコインのプロトコルでは、ビットコインを受け取る相手をScriptPubKeyで認識することになっている。
    ScriptPubKeyはアドレスから生成することができる。
    ScriptPubKeyには公開鍵ハッシュも含まれている。だからScriptPubKeyの情報とネットワークを指し示す情報からアドレスに戻すことができる。

   g.個人認証として所有権の証明(proof of ownership as an authentication method)
    トランザクションに関連付けられた公開鍵を使ってメッセージに署名
    特定のアドレスを自分のものだと証明

  -4.鍵生成と暗号化(key generation)
   a.鍵生成(key generation)
    new Key() でコンストラクターを呼び出すと、内部ではPRNG(疑似乱数生成器)を使って秘密鍵を生成している。
    シードのランダムさの度合は、エントロピー と呼ばれる計測値で定義される。エントロピーは高いと鍵を破れにくい
    攻撃者があなたの鍵を破ることに成功するのに、どれくらいの時間が必要かということである。そこでKDFの登場である。
    鍵導出関数(key derivation function[KDF])
    KDFはハッシュ関数で意図的にコンピューターの演算リソースを無駄に使わせることができる。

   b.BIP38
    BIPは、2つのアイディアを1つにしたもので,どうやって鍵とアドレスの生成を、信頼できない相手に委譲することができるかを書いている。
    アイディアとは、鍵生成をする人へ渡すパスフレーズコードを作るというものだ。
    このパスフレーズコードで、暗号化された鍵を作ることができ、しかも、あなたのパスワードも秘密鍵も知ることはない。
    この パスフレーズコード は WIFフォーマットにして鍵生成する人に渡すことができる。

   c.HD(階層的決定性)ウォレット(BIP32)
    解決したい問題は、バックアップが古くなってしまうのを防ぎたいと信頼してない相手に鍵やアドレスの生成を委譲したい
    決定性ウォレットは、バックアップの問題を解決するだろう。
    そのようなウォレットでは、シード値だけは保存しなければならない。 そしてこのシードから、一連の秘密鍵を何度も生成することができる。

   d.HD鍵のネモニック(記憶しやすい)(mnemonic code for hd keys)
    電話や手書きで人に伝える文章をよりHD鍵を作成する方法
    コールドウォレットは、簡単に書き留められるようなある文章をもとに、HD鍵を生成する。
    そういった文章は ザ・シード と言われたり ネモニック(記憶文) と言われる。 そして、それはパスワードやPIN番号でさらに暗号化される。

   e.ダークウォレット(dark wallet)
    このウォレットは名前と違ってダークではなく、下記の2つの問題に対する実践的な解決策である。
    ・古くなって使えなくなるウォレットのバックアップを防ぐ
    ・鍵とアドレスの生成を信用していない相手に移譲すること
    このウォレットは、下記のすごい機能がある
    ステルスアドレス と呼ばれるアドレスだけを、ほかの人たちにシェアするだけでよいのだ。 よって、プライバシーを失うことがない。

  -5.その他の所有権(other types of ownership)
   a.P2PK[H](Pay to Public Key [Hash])
    必ずしも全ての ScriptPubKey がビットコインアドレスを表しているというわけではない。
    たとえばジェネシスと呼ばれているビットコインブロックチェーンの最初のトランザクションがそうだ。

   b.P2WPKH(Pay to Witness Public Key Hash)
    所有権の証明を、トランザクションの scriptSig から、トランザクションインプットの witness と呼ばれる新しい部分に移すもの
    以前はトランザクションの署名がトランザクションIDの計算対象に入っていたが、segwitではもうそれは入らない。

   c.マルチシグ(multi_sig)
    ビットコインに対して所有権を共有することができる。
    そのためには m-of-n multi sig を表すscriptPubKeyを作る。
    つまり、ビットコインを使うためには与えられた n 個の異なる公開鍵に対して、m 個の秘密鍵で署名する必要があるということ。

   d.P2SH(Pay To Script Hash)
    マルチシグは簡単にコードを書いて動かせはするが、P2SHを使わないと、顧客に対してマルチシグのscriptPubKeyへビットコインを
    支払うようにお願いする方法がなかった。BitcoinAddressを手渡しできる限りは簡単にできるが。
    P2SH または Pay To Script Hash はscriptPubKeyを、それがどれだけ複雑だとしても、簡単なBitcoinScriptAddressに表現する方法である。

   e.P2WSH(Pay to Witness Script Hash)
    P2PKHとP2WPKHとの関係と同じで、P2SHとP2WSHとのちがいはP2SHにおける支払いでscriptSigに記録されていたものの場所と、
    生成されるscriptPubKeyだけだ。

   f.P2W(over P2SH)
    ビットコインの要求をスクリプト化するための witness scriptPubKey を使うことが魅力的だと思われてきている一方で、
    実際最近のウォレットのほとんどは、P2PKHあるいはP2SHしかサポートしていない。
    古いソフトウェアが共存している間、segwitの利点を利用するために、P2SH上でP2Wを使うことができる。
    古いBitcoinCoreを使っているノードにとっては、それは普通のP2SHを利用した支払いと捉える。
    どんな P2W* でも P2SH上のP2W* に変換できる。以下の手順を踏む。
     ・ScriptPubKey を、同じ内容を示すP2SHで置き換える
     ・変換前の ScriptPubKey はトランザクションインプットの scriptSig の中に1つだけのプッシュとして記録される。
     ・すべての他のデータはトランザクションインプットのwitnessに示される。

   g.任意性(arbitrary)
    ビットコインコアのバージョン0.10から、RedeemScript の内容は任意とすることができるようになった。
    それはビットコインのスクリプト言語を用いて、「所有権」が何を意味するかに関して自分の定義を作ることができるようになったということ。

  -6.その他のアセット(資産)タイプ(other types of asset)
   a.カラードコイン(colored coins)
    ビットコインに色をつけて付加情報を与えることで、既存の法定通貨、株式・株券、デリバティブ商品、電子セキュリティ、金、車、家など、
    デジタルから実物まであらゆる資産の取引を可能にするといわれるビットコイン2.0プロジェクトの一つ。

   b.資産の発行(issuing asset)
    ビットコインの発行
    オープンアセットでは、アセットIDが発行者のscriptPubKeyから引き出される。
    もしカラードコインを発行するときは、そのscriptPubKeyの所有権を証明する必要がある。
    そしてビットコインブロックチェーンでそれをする唯一の方法はそのscriptPubKeyに帰属しているコインを支払いに使う。

   c.資産の移動(transfer asset)
    ビットコインの送金

   d.リカーディアン・コントラクト(ricardian contracts)
    一般的にアセットは特定の条件下で発行者に償還される権利を表現するものをいう。

   e.流動体民主主義(liquid democracy)
    例:投票でブロックチェーンを使えば、関心の高い問題に対して票を投じ、関心の低い問題に関しては票を手放すということが可能になる。
    これによって、直接民主主義と間接民主主義のハイブリッド、いわゆる流動体民主主義を実現出来る。

   f.プルーフ・オブ・バーン(proof of burn[POB])
    既存の資産を破棄(燃やす)し、新しい資産を発行する仕組み

2.その他

  -1.本情報は2022/9/1現在のものです。
  -2.本解釈はRVMXの解釈で間違いが含まれているかもしれません。

3.将来機能関連

   -1.ブロックチェイン(BlockChain)へのRVMXの取り組みと展望について
   -2.RVMXの将来技術の取り組みと展望について
   -3.応用例、RVMX PDFへ押印Toolβ版(参考)へブロックチェインによるオリジナル確認機能を試験追加

(有)RVMX