ブロックチェーンのメカニクス#
ハッシュ#
ハッシュ関数(SHA-256 など)は、データブロックを受け取り、有効なランダムな固定サイズの整数を生成します。データブロックの任意の変更は、ハッシュ値に影響を与えます。
ハッシュベースのプルーフ・オブ・ワーク#
- 出力から入力を計算することはできません
- 入力の先頭に N 個のゼロがあるハッシュ値を見つけるには、2N 回の Nonce が必要です。Nonce は暗号通信で一度だけ使用される数字です。計算 —— 計算の証明
- もし私たちが増加する「nonce」をハッシュ入力としてハッシュ処理を行うと、ゼロを探すことができます:
チェーンレース#
- パラメータ N はゲームの難易度を設定します。(ハッシュ値の先頭に N 個のゼロ)
- プレイヤーはブロックのリストを取得します:
- ブロック番号
- 勝者番号
- Nonce 値
- N 個のゼロを持つ前のブロックのハッシュ
- プレイヤーはブロックを作成することでポイントを蓄積します
– 前のブロックをハッシュします
– 十分なゼロを持つ新しいブロックのハッシュを見つけます
– その後、このブロックを皆に送信します
N=3 に設定し、nonce、winner、parent hash などを組み合わせて、生成された hash 値が先頭 N 個のゼロを満たすようにします。
新しいブロックを作成するためのアルゴリズム:
- すべての前のブロックのハッシュを検証します
- ランダムな nonce で新しいブロックを構築します
- 新しいブロックをハッシュします。それは N 個のゼロを持っていますか?
– いいえ?ステップ 2 に戻ります
– はい?新しいブロックを皆に送信します!
N 個の 0 について、SHA-256 の出力は実際にはランダムであるため、N 個のゼロを得ることはコインを投げて N 回連続で表が出るのと同じです。N 個のゼロに対して、2N/2 個のランダム数を試す必要があります。N=1 の場合、1 個のランダム数を試します;N=16 の場合、32768 個のランダム数を試します;N=32 の場合、20 億個の nonce を試します。
チーター#
一つの不正行為の方法:偽のハッシュを作成すること。
その後:
- アルゴリズムのステップ 1 は他のすべてのプレイヤーに対して失敗します。
- 他のプレイヤーはあなたのブロックを使用せず、それはチェーンの一部になりません。
署名#
ビットコインアカウントと署名#
プレイヤー ID = 公開鍵
私たちは今、メッセージに署名して皆に送信することで取引を行うことができます
署名された取引は:
・変更不可能
・誰でも検証可能
・鍵から鍵へ、実際のアイデンティティに結びつかない
取引とのレース#
私たちは public_key1 が本当に 50 ポイントを持っていることを保証できないため、過剰取引が発生します。解決策は、取引情報をブロックに入れることです。
「過剰取引」の問題は解決が難しく、その理由は絶対に変更不可能な時間源が存在しないからです。過剰取引を防ぐ過程で、タイムスタンプは取引の順序と時間制限を決定するための一般的な手段です。しかし、絶対に信頼できて改ざん不可能な時間源がなければ、プレイヤーは時間の隙間を利用して過剰取引の制限を回避する可能性があります。例えば、プレイヤーはローカル時間を操作したり、時間記録の不確実性を利用したりして、短時間で規則が許可する数を超える取引を行うことができ、システムは信頼できる時間の根拠が不足しているため、このような過剰取引行為を効果的に識別し阻止することが困難です。
・プレイヤーはポイントを得るために努力します
・プレイヤーはポイントを安全に取引できます
– 署名は取引の変更を防ぎます
– 署名は取引の起源を認証します
・プレイヤーは過剰取引を検出できます
– プレイヤーは過剰取引のあるブロックでゲームを延長することを拒否します
– もし彼らがそうすれば、他のプレイヤーが彼らのブロックでゲームを延長しないため、努力を無駄にすることになります
各ブロックには、そのブロックが作成された時間を記録するためのタイムスタンプが含まれています。取引がブロックにパッケージされると、それらは時間順に記録されます。これにより、システムは取引の先後を明確に把握でき、短時間内の過剰取引行為が存在するかどうかを判断できます。ブロックチェーンネットワークでは、マイナーが取引をブロックにパッケージ化した後、そのブロックは他のノードの検証を受ける必要があります。ノードは取引の合法性を確認し、取引の署名が正しいか、送信者に十分な残高があるかなどをチェックします。過剰取引(つまり、取引金額が実際に持っているポイントや残高を超える)の取引に対して、ノードはそれを有効なブロックに含めることを拒否します。すべてのノードが検証を通過したときのみ、そのブロックはブロックチェーンに追加され、取引の合法性と真実性が保証され、過剰取引の発生を防ぎます。
なぜ取引をあなたのブロックに入れるのに手間をかける必要があるのですか?
・取引に手数料を追加することでこの問題を解決しましょう
– 取引ごとにポイントを与えることでプレイヤーを奨励します
– ポイントを得る方法は 2 つあります!
・なぜプレイヤーの取引を制限するのですか?
– プレイヤーが公鍵を持つ誰にでもポイントを送信できるように....
– これは今やグローバルな取引システムです
簡略化されたビットコイン#
・プレイヤー = 「マイナー」、ポイント = 「ビットコイン」
・取引は価値(ビットコイン)を鍵から鍵へ送信します
・チェーンレースゲーム(ブロックチェーン)は、中央権限なしで過剰支出を防ぎます
・ゲームルール = ビットコインノードコード、マイナーの合意によって変更されます
・プレイヤーの合意が権限に取って代わります
– コインの数(2100 万枚に制限)
– ブロックごとの報酬
– 難易度の成長方法
プレイヤー / マイナーは非プレイヤーと相互作用できます
・一度ポイントが作成されると、受取人は任意の公鍵に対する取引を作成できます・現在、非マイナー / プレイヤーとの取引に拡張できます
・すべてのポイントは依然として特定のブロック / マイナーから来ています
まるで通帳のようです。
攻撃#
- ビットコイン(または任意のブロックチェーン)のルールはマイナーノードによって決定されます
マイナーノードの核心的な役割:ビットコインや他のブロックチェーンシステムにおいて、マイナーノードは非常に重要な役割を果たします。マイナーノードは取引を検証し、ブロックをパッケージ化し、合意メカニズムを通じて新しいブロックをブロックチェーンに追加します。ブロックチェーンのルールは実際にはこれらのマイナーノードによって共同で遵守され、実行されます。例えば、ビットコインネットワークでは、マイナーノードは特定のアルゴリズム(プルーフ・オブ・ワークなど)に従って記帳権を競争し、ルールに従ったブロックのみが他のノードによって受け入れられ、ブロックチェーンに追加されます。 - 多数決の原則:「51% のマイナーが実行しているものが勝つ」という言葉は、ブロックチェーンにおける多数決の原則を表しています。多くのブロックチェーンの合意メカニズムでは、51% 以上のマイナーノードが合意に達すると、それらが認めたルールとブロックがネットワーク全体で受け入れられます。これは、ブロックチェーンが分散型システムであり、単一の権威機関がルールを決定するのではなく、多数のノードの合意に依存してシステムの一貫性と安全性を保証するためです。
- 大多数の参加者が裏切った場合の影響
51% 攻撃:ブロックチェーンネットワーク内で 51% 以上のマイナーノードが裏切ったり悪意を持って制御されたりすると、51% 攻撃が発生する可能性があります。この場合、攻撃者は掌握した多数の計算能力を利用して悪意のあるブロックチェーンの分岐を延長することができます(「悪いブロックを延長する」)。攻撃者は取引の順序を再配置したり、確認済みの取引を取り消したりすることで、ブロックチェーンの正常な動作を破壊することができます。例えば、攻撃者は取引を完了した後、51% 攻撃を通じてその取引を取り消し、同じ資産を他のアドレスに再転送することで二重支出を実現できます。 - システムへの影響:51% 攻撃はブロックチェーンの安全性と信頼メカニズムを深刻に損ないます。ユーザーはブロックチェーン上の取引記録を信頼できなくなります。攻撃者はそれらを自由に改ざんできるからです。これにより、ブロックチェーンシステム全体が崩壊し、ユーザーはそのブロックチェーンに対する信頼を失い、その結果、価値や応用に影響を与える可能性があります。
- 裏切りに必要なノードの割合
- ネットワークの違い:すべてのブロックチェーンネットワークが 51% のノードの裏切りを必要とするわけではありません。異なるブロックチェーンネットワークの設計や合意メカニズムに応じて、実際に裏切りが必要なノードの割合は 30% 以下になることもあります。一部の新しい合意アルゴリズムは、システムの安全性と攻撃耐性を向上させるために、多数のノードへの依存を減らすことを目指しています。しかし、裏切りノードの割合が低くても、攻撃者はブロックチェーンネットワークに深刻な損害を与える可能性があります。
- Sybil 攻撃:Sybil 攻撃は、コンピュータセキュリティ分野におけるピアツーピアネットワークの評判システムに対する攻撃手法です。ブロックチェーンネットワークにおいて、攻撃者は大量の偽のノード ID(Sybil ノード)を偽造することで、ネットワーク内の一部の計算能力や投票権を制御できます。これらの偽ノードは協力して働き、多数のノードの意見を模倣し、ブロックチェーンの合意プロセスを妨害し、ブロックチェーンネットワークに対する攻撃を実現します。例えば、攻撃者は Sybil ノードを利用してプルーフ・オブ・ステーク(PoS)合意メカニズムでより多くの記帳権を取得し、悪意のある行動を実行することができます。
運用現実#
- 安価なストレージとネットワーク条件を仮定
- ノードはすべての取引記録を保存します:ブロックチェーンシステムは、ストレージとネットワークコストが比較的低いと仮定しています。この前提の下で、各ノードはブロックチェーン上で発生したすべての取引を保存できます。この設計は、ブロックチェーンの分散化とデータの完全性を保証するためのものです。各ノードは完全な帳簿のコピーを持っており、どのノードでも取引の合法性とブロックチェーンの状態を独立して検証できます。例えば、ビットコインネットワークでは、フルノードは創世ブロック以来のすべての取引情報を保存し、ネットワークの安全性と透明性を維持するのに役立ちます。
- 取引とブロックのブロードキャスト:新しい取引が発生したり、新しいブロックが作成されたりすると、これらの情報はネットワーク全体にブロードキャストされます。各ノードはこれらのブロードキャストメッセージを受信し、それを検証します。取引のブロードキャストは、すべてのノードが新しい取引要求をタイムリーに知ることを保証し、ブロックのブロードキャストは新しいブロックがブロックチェーンに追加されることを可能にします。しかし、このブロードキャストメカニズムはネットワークの拡張性に一定の制限をもたらす可能性があります。ブロックチェーン上の取引数が増加するにつれて、これらの情報をブロードキャストし同期するために必要なネットワーク帯域幅と時間も増加し、ネットワークの混雑を引き起こし、システムの性能と拡張性に影響を与える可能性があります。
- 取引速度が遅い
- 公共ブロックの検証に依存:ブロックチェーンでは、取引が有効かどうかを検証するために、その取引が公共ブロックにパッケージ化され、一定数の確認を待つ必要があります。ブロックチェーンの合意メカニズム(プルーフ・オブ・ワークなど)は完了するのに一定の時間がかかるため、取引確認のプロセスは比較的遅くなります。例えば、ビットコインネットワークでは、平均して 10 分ごとに新しいブロックが生成され、取引の安全性を確保するために通常は 6 つのブロックの確認を待つ必要があり、これは取引が約 1 時間で比較的信頼できる確認を得ることを意味します。この遅延は、日常の買い物や支払いなど、取引速度が高く求められるシーンでは顕著な問題になる可能性があります。
- 秘密鍵の管理が重要
- 秘密鍵を失うと資金が使用できなくなる:秘密鍵はユーザーがブロックチェーン資産を管理するための鍵です。秘密鍵はランダムに生成された数字で、秘密鍵を持っている人だけが対応するアドレス内の資産を操作できます。ユーザーが秘密鍵を失うと、そのアドレス内の資金の管理権を失い、その資金は使用できなくなります。秘密鍵の性質は回復不可能であり(バックアップがない限り)、一度失われるとユーザーは永久的な資産損失に直面します。例えば、初期のビットコイン保有者は、秘密鍵の保存場所を忘れたり、保存デバイスが故障したりすることで、大量のビットコインを使用できなくなる可能性があります。
- 秘密鍵が盗まれると資産が盗まれる:秘密鍵の安全性はユーザー資産の安全に直接関係しています。秘密鍵が盗まれると、攻撃者はその秘密鍵を使用して取引に署名し、ユーザーアドレス内の資金を自分のアドレスに移転できます。ハッカーはネットワーク攻撃やマルウェア感染など、さまざまな手段でユーザーの秘密鍵を取得する可能性があります。したがって、ユーザーはハードウェアウォレットの使用、強力なパスワードの設定、定期的なバックアップなど、秘密鍵を保護するための厳格なセキュリティ対策を講じる必要があります。
ビットコインウォレットとアドレス#
- ユーザーは銀行口座のように複数のウォレットを取得できます
- 各ウォレットには多くのアドレスがある可能性があります
アドレスの役割:ビットコインアドレスは銀行口座のアカウント番号に似ており、ユーザーがビットコインを受け取るための具体的な識別子です。各ウォレットは異なるアドレスを複数生成でき、これらのアドレスはそのウォレットに関連付けられていますが、互いに独立しています。
多様なニーズを満たす:複数のアドレスは、ユーザーが異なるシーンでの使用ニーズを満たすことができます。例えば、ユーザーが異なる取引プラットフォームや異なるパートナー間で取引を行う際に、異なるアドレスを使用してビットコインを受け取ることができます。これにより、ユーザーは異なる出所の資金を区別して管理することが容易になります。 - ユーザーはアドレスを使用してビットコインを受け取ります
取引プロセス:ユーザーがビットコインを受け取りたい場合、単に自分のビットコインアドレスを送信者に提供すればよいです。送信者は取引を開始する際に、そのアドレスに対応するブロックチェーン上のアカウントにビットコインを送信します。一度取引がネットワークによって確認され、ブロックチェーンに記録されると、ユーザーはビットコインを正常に受け取ったことになります。
アドレスの唯一性:各ビットコインアドレスは唯一であり、これによりビットコインが指定されたユーザーアカウントに正確に送信されることが保証されます。また、アドレスの生成は暗号学的アルゴリズムに基づいており、高い安全性を持ち、取引の信頼性を保証します。 - 各アドレスは一般的に一度だけ使用されます
プライバシーとセキュリティの向上:取引のプライバシーとセキュリティを向上させるために、ビットコインアドレスは一般的に一度だけ使用することが推奨されます。アドレスが複数回使用されると、攻撃者はブロックチェーン上の取引記録を分析することで、そのアドレスの所有者の取引行動や資金の流れを追跡しやすくなり、ユーザーのプライバシー情報が漏洩する可能性があります。新しいアドレスを使用してビットコインを受け取ることで、取引記録がより分散され、追跡の難易度が増し、ユーザーのプライバシーが保護されます。
アドレスがマークされるのを防ぐ:ブロックチェーンネットワーク内では、特定のタイプの取引(違法取引など)に参加したために、特定のアドレスがマークされることがあります。ユーザーが同じアドレスを使い続けると、これらのマークの影響を受ける可能性があり、自分のアカウントが制限されたり調査されたりすることがあります。一度きりのアドレスを使用することで、このリスクを回避できます。 - アドレスを使用してビットコインを受け取ることで、取引がよりプライベートになります
情報の露出を減らす:ビットコイン取引の重要な特徴は、その相対的な匿名性です。アドレスを使用してビットコインを受け取ると、送信者と受信者の実際のアイデンティティは取引記録に直接露出せず、アドレス情報のみがブロックチェーンに記録されます。また、各アドレスは通常一度だけ使用されるため、取引のプライバシーがさらに向上し、外部がブロックチェーンデータを通じて特定のユーザーアイデンティティに直接関連付けることが難しくなります。
ビジネス秘密を保護する:企業や商人にとって、ビットコインアドレスを使用して支払いを受け取ることは、ビジネス秘密を保護することができます。取引相手は取引記録を通じて企業の財務状況や取引規模などの敏感な情報を容易に知ることができず、企業の競争優位性やビジネス利益を維持するのに役立ちます。
ビットコインを超えて#
- 取引は単なる取引である必要はありません
- 取引には以下を含めることができます:
- 実行可能なコード
- 実際、BTC 取引はスクリプトです
- スクリプトは出力がいつ使えるかを指定します–契約
- 出力が移動する条件を設定します–タイムスタンプされるランダムデータ
プライベートチェーン#
- ゲームを変更して署名されたブロックを要求します
- マイナーを一部の承認されたセットに制限します
- 他のルールを追加したり、ブロックの「乗っ取り」を防ぐのに役立ちます
- ブロックチェーン上で証券を取引するために使用されているアプローチ
- 同じ暗号物理学が適用されます…
ブロックチェーンの特性#
取引#
・今日の企業取引と同様に、ブロックチェーンは行われた決定と行動の歴史的アーカイブです。
・歴史の証明は出所を提供します。
不変の台帳#
- ブロックチェーンは取引を通じてデータを保存します
- 従来のデータベースとの共通点:既存のデータベースと同様に、ブロックチェーンもデータの保存と管理の方法であり、取引を記録することでデータを保存します。取引はブロックチェーン内のデータの基本的な載体であり、各取引には資産の移転や契約の実行などの特定の情報が含まれています。これらの取引データはブロックチェーン内で秩序正しく整理され、保存され、従来のデータベースに保存されるさまざまなビジネス記録に類似した完全なデータセットを形成します。
- ブロックチェーンデータの書き込み後の不変性
- 修正の難しさ:データがブロックの形式でブロックチェーンに書き込まれると、変更が極めて難しくなります。これは、ブロックチェーンがチェーン構造を採用しており、各ブロックが前のブロックのハッシュ値を含んでいるためです。ハッシュ値は、ブロック内のすべてのデータに対してハッシュ計算を行った結果得られる固定長の文字列であり、唯一性と敏感性を持っています。ブロック内のデータにわずかな変更があれば、ハッシュ値は完全に異なります。特定のブロック内のデータを変更するには、そのブロックとその後のすべてのブロックのハッシュ値を同時に変更する必要があります。なぜなら、後続のブロックのハッシュ値は前のブロックの内容に基づいて計算されるからです。
- 合意を得る必要がある:大量のハッシュ値を再計算するだけでなく、ブロックチェーン内のデータを変更するには、ネットワーク内の大多数のノードの合意を得る必要があります。ブロックチェーンネットワーク内では、ノードは合意メカニズム(プルーフ・オブ・ワーク、プルーフ・オブ・ステークなど)を通じてブロックの合法性を検証し確認します。既存のブロックを変更するには、ネットワーク内の一定割合のノードを説得してこの変更を受け入れさせる必要がありますが、これは分散型ネットワークでは非常に困難です。ノードは相互に独立しており、利益が異なるため、すでに確認された取引記録を変更するために合意を得るのは難しいです。
- 取引の不変性
- 取引記録は永久に保存されます:「取引は不変であり、消えない」と強調されているのは、ブロックチェーン取引の不変性と永久性です。一度取引がブロックチェーンに記録されると、それは消えない歴史的記録となり、改ざんや削除ができなくなります。この特性は取引の真実性と信頼性を保証し、ブロックチェーンが金融、サプライチェーン管理などの分野で重要な応用価値を持つ理由です。なぜなら、信頼できる追跡可能な取引履歴を提供できるからです。
- ブロックチェーンは読み取り専用および書き込み専用のデータベースです
- 読み書きの特性:データベースの観点から見ると、ブロックチェーンは読み取り専用および書き込み専用のデータベースと見なすことができます。「書き込み専用」とは、新しい取引データがブロックチェーンに追加され続け、書き込まれると変更できないことを意味します。「読み取り専用」とは、ユーザーがブロックチェーン上に既に存在する取引記録を読み取ることができるが、変更や削除はできないことを意味します。この特性は従来のデータベースとは異なり、従来のデータベースは通常、データの更新や削除などの操作を許可しますが、ブロックチェーンの設計はデータの安全性と不変性を保証することに重点を置いています。
- エラー処理の方法
- 帳簿の訂正に似ています:インクで書かれた帳簿のように、ブロックチェーンに記録された取引にエラーが発生した場合、元の記録を直接消去または変更することはできません。代わりに、新しい取引を作成してエラーを修正する必要があります。例えば、資産移転取引で金額にエラーがあった場合、新しい取引を発起して資産の数量を調整し、アカウント残高を正しい状態に戻すことができます。このエラー処理方法は、ブロックチェーン取引記録の完全性と追跡可能性を保証し、すべての操作が追跡可能であることを確保します。
分散型ピア#
暗号化プロセス#
標準的な暗号化慣行
- 一部のブロックチェーンは「BYOE」(Bring Your Own Encryption)を許可します
- すべてのブロックは暗号化されています
- 一部のブロックチェーンは公開されており、一部はプライベートです
- 公開ブロックチェーンは依然として暗号化されていますが、一般に公開されており、例として https://www.blockchain.com/explorer があります
- プライベートブロックチェーンは、可視性のためにユーザー権限を使用します。例:
- 顧客 – すべてのデータを記述および表示
- 監査人 – すべての取引を表示
- サプライヤー A – パートナー A データを記述および表示
- サプライヤー B – パートナー B データを記述および表示
私たちはハッシュ値を実数と見なし、ターゲットバーを設定し、バーより小さいハッシュ値を見つけます。バーを上げることで難易度を下げることができます。
合意メカニズム#
- ブロックチェーン内の次のブロックが真実の唯一のバージョンであることを保証します
- 強力な敵がシステムを脱線させたり、チェーンを成功裏にフォークさせたりするのを防ぎます
- 多くの合意メカニズムがあり、それぞれに利点と欠点があります
プルーフ・オブ・ワーク#
プルーフ・オブ・ステーク#
- ステークホルダーは自分のコインをPOS メカニズムに投資します
- PoW よりも速く、環境に優しい
- より多くのコイン -> 次のブロックを作成するチャンスが高くなります
- 取引手数料はブロックを作成するマイナーに与えられます
経過時間の証明#
・各ノードはランダムな待機時間を生成します
・各ノードは新しいブロックを提案しようとする前に、ランダムに決定された期間の間待機します。
・待機期間が経過すると、最も長く待機したノードが次のブロックを提案する資格があります。
・最も公正なブロックチェーン合意アルゴリズムの 1 つです
スマートコントラクト#
- コンピュータコード
- スマートコントラクト
- ブロック提出前のビジネスロジック層を提供します