ブロックチェーンのシャーディング
全ノードが全取引を処理する冗長性がスループットの壁になる。シャーディングは状態と処理を分割して並列化する設計で、シャード間通信の非同期性と、分割で薄まるセキュリティをどう補うかまで原理で腑に落ちる。
- 1.シャーディングは台帳の状態と処理を複数のシャードへ水平分割し、各ノードが全体の一部だけを担うことで並列処理を可能にする。目標はノードの負荷を増やさずに全体スループットを上げること。
- 2.分割で発生するのがシャード間通信。あるシャードの状態が別シャードへ影響する取引は、単一シャード内で完結せず非同期メッセージで受け渡すため、原子性(アトミック性)の担保が設計上の最難関になる。
- 3.シャード数に反比例して1シャードあたりの守り手が減るため、単一シャードだけを乗っ取る「1%攻撃」が生じる。対策は無作為なバリデータ割当・定期シャッフルと、ビーコンチェーンによる統括である。
なぜシャーディングが要るのか
パブリックなブロックチェーンの安全性は、/blockchain/consensus-pow-pos/ で述べたとおり、全ノードがすべての取引を再実行して状態を検証する冗長性から生まれます。この「全員が全部を処理する」構造は改竄耐性の源ですが、同時にスループットの上限をネットワーク中で最も非力なノードの処理能力に縛りつけます。ノードを増やしても各ノードが同じ全量を処理する以上、全体の処理能力は増えません——ここが従来型ブロックチェーンの本質的な制約です。
シャーディングは、データベースの水平分割と同じ発想でこれを崩します。台帳全体(状態と取引処理)をN個のシャードに分け、各ノードは自分が担当するシャードの分だけを保持・検証する。全ノードが協調してN個のシャードを並列に処理すれば、理論上は総スループットがN倍に近づきます。要点は、/blockchain/layer2-rollups/ の実行オフロードとは異なり、シャーディングはL1(レイヤー1)の内部で並列度を上げるアプローチだという点です。
分散性・安全性・スケーラビリティは同時に最大化しにくいとされます。ブロックを単純に巨大化する道は、フル検証できるノードを減らして分散性を犠牲にします。シャーディングは「各ノードの負荷を一定に保ったまま」総処理量を上げることで、分散性を守りつつスケールしようとする試みです。ただし後述するとおり、分割は安全性の側にしわ寄せを生みます。
データシャーディングと実行シャーディング
「何を分割するか」で、シャーディングは段階的に定義されます。両者は独立した軸であり、実装は下の層から積み上げます。
| 種別 | 分割する対象 | 各ノードが担うこと | 難度 |
|---|---|---|---|
| データシャーディング | ブロックのデータ格納と可用性 | 自分のシャードのデータだけ保持・提供 | 相対的に低い |
| トランザクションシャーディング | 取引の割り当て(どこで処理するか) | 担当シャードの取引だけを順序付け | 中 |
| 実行(ステート)シャーディング | 状態そのものと状態遷移の計算 | 担当シャードの状態のみ保持し実行 | 最も高い |
データシャーディングは最も軽い段階で、実行はせずデータの格納と可用性だけを分割します。各シャードは「取引データの塊」を保持し、誰でも取ってこられる状態にする役割を負います。これは実行を伴わないため合意の複雑さが小さく、/blockchain/layer2-rollups/ が依存するデータ可用性(DA)をL1で安価に供給する土台になります。近年のEthereumが「danksharding」としてデータシャーディング方向へ舵を切ったのは、実行はロールアップに任せ、L1はDAのスケールに専念するという役割分担の結果です。
実行シャーディング(ステートシャーディング)は最難関です。状態そのものを分割するため、各シャードは独立した「小さなブロックチェーン」のように自分の状態を持ち、自分で状態遷移を計算します。並列度は最大化されますが、この瞬間に二つの重い問題が立ち上がります——シャードをまたぐ取引の扱いと、分割による安全性の希薄化です。順に見ていきます。
シャード間通信 — 非同期性と原子性
状態を分割すると、あるシャードのアカウントが別シャードのアカウントへ送金する、といったクロスシャード取引が必然的に発生します。ここで決定的なのは、シャードAはシャードBの内部状態を直接は知らない、という点です。各シャードは自分の状態しか保持しないため、AはBに対してメッセージを送るしかありません。
[シャードA] 送金取引を実行:
1. 送り主の残高を減らす(Aの状態を更新)
2. 「Bのアカウントへ +X」というクロスシャードメッセージを生成
│ (Aのブロックが確定して初めてメッセージが確定)
▼ 非同期に受け渡し(レシート+存在証明)
[シャードB] 後続のブロックで:
3. メッセージの存在をマークル証明で検証
4. 受け取り側の残高を増やす(Bの状態を更新)
問題は、この処理が二つの別々のシャードの、別々のブロックにまたがって進むことです。ステップ1・2はAのブロックで、ステップ3・4はBの後続ブロックで起きる。両者を単一のトランザクションとして不可分に成立させる素直な方法は存在しません。ゆえにクロスシャード取引は非同期にならざるを得ず、原子性(アトミック性) の担保が中心課題になります。もし片方だけが成立するとどうなるか——Aで残高が減ったのにBで加算されなければ、資金が消滅します。
すべてのシャードのブロックを完全に同期させ、クロスシャード取引を「両シャード同時に」確定させる設計も考えられますが、それは全シャードが互いの状態と歩調を待ち合わせることを意味し、並列化の利点を大きく損ないます。多くの設計が非同期メッセージ方式を採るのは、並列度を保つ代償として原子性の複雑さを引き受けるという選択です。
原子性を守る代表的な手法は二つあります。レシート方式(非同期)は、送信側でメッセージ(レシート)を確定させ、受信側が後からその存在を検証して適用する方式で、単純ですが「送金は減ったが着金前」という中間状態が一時的に見えます。もう一つはロック方式で、/devops/ の分散トランザクションで知られる二相コミットに似た手順で、関与シャードのアカウントを一旦ロックし、全シャードの合意が取れてからコミット、駄目なら中止(アボート)して巻き戻します。ロック方式は真の原子性に近づける一方で、ロック中は該当アカウントが使えず、参加シャードの一つが停止すると全体が滞るライブネスの弱さを抱えます。
受信側シャードBが送信側Aのメッセージを適用してよいのは、Aのブロックが確定した後です。もしAで後からリオーグ(/blockchain/finality-fork-choice/ 参照)が起き、送金取引が巻き戻ったのに、Bが先にそれを信じて着金させていたら、Bの状態は不正になります。ゆえにクロスシャード処理は送信元のファイナリティを待つ必要があり、確率的ファイナリティのチェーンでは待機が、確定的ファイナリティのチェーンでは即時性が有利に働きます。シャード間通信の遅延は、この待機に大きく左右されます。
セキュリティの希薄化 — 1%攻撃
分割の最大の危険は安全性の希薄化です。直感的には、全バリデータをN個のシャードに割り振れば、1シャードあたりの守り手は全体の1/Nしかいません。すると攻撃者は、ネットワーク全体の過半(例: 51%)を握らずとも、たった一つのシャードの過半を握るだけでそのシャードを乗っ取れてしまいます。
具体的に考えます。全体でN=100シャード、バリデータ割当が一様なら、1シャードに集まる守り手は全体の1/N=約1%にすぎません。そのシャードを制圧するには、この1/Nの過半を握れば足りる——つまり必要勢力は総勢力の約51%/Nで、N=100なら理論上わずか約0.5%です。この「1シャード=全体の約1%」という薄さにちなんで、単一シャード奪取攻撃(single-shard takeover)は俗に1%攻撃と呼ばれます(数値は割当が一様な理想化の目安で、正確な閾値は51%/N)。乗っ取られたシャードでは、攻撃者が不正な状態遷移を「合意済み」に見せかけ、偽の残高を作ってクロスシャードメッセージで他シャードへ流し込む、といった攻撃が成立し得ます。
非シャード型: 攻撃には全体の過半(例 >50%)が必要
シャード型(素朴): 1シャードの過半で足りる → 必要勢力 ≈ 全体の (1/2)×(1/N) = 51%/N
(N=100 なら理論上わずか約0.5%。1シャード自体が全体の約1%)
ここで効くのが、/blockchain/consensus-pow-pos/ のシビル耐性との関係です。PoWでハッシュ power をシャードに分けると、この希薄化がそのまま採掘力の分散を招き致命的になりやすい。PoSがシャーディングと相性が良いとされるのは、ステークを供託したバリデータ集合をプロトコル側が把握でき、無作為に割り当て直せるからです。攻撃者がどのシャードに送られるかを制御できなければ、狙って一つのシャードへ勢力を集中させることができません。
セキュリティ希薄化への対策
素朴なシャーディングの危うさは「攻撃者がシャードを選べる」点にありました。対策は一貫して、その選択権を奪い、乗っ取りを間に合わなくすることに向かいます。
| 対策 | 何を狙うか | 効き方 |
|---|---|---|
| 無作為なバリデータ割当 | 攻撃者がシャードを選べなくする | 検証可能な乱数で配属を決め、狙い撃ちを封じる |
| 定期的なシャッフル(再配属) | 特定シャードへの勢力集中を維持させない | エポックごとに配属を組み替え、買収を無効化 |
| 委員会のサンプリング | 少数で全体の安全性を近似する | 十分大きな無作為標本なら統計的に希薄化を抑える |
| ビーコンチェーンによる統括 | 全シャードに共通の信頼の錨を置く | 乱数供給・クロスリンクで各シャードを束ねる |
| データ可用性サンプリング | 少数の不正シャードのデータ隠しを検知 | 軽ノードが断片抽出で可用性を確率的に確認 |
第一の柱は検証可能な無作為性によるバリデータ割当です。各バリデータをどのシャードへ配属するかを、誰も予測・操作できない乱数(分散生成した乱数やVRFなど)で決めます。攻撃者は自分の手駒を狙ったシャードへ送れないため、N分の1に希薄化しても「特定シャードだけを制圧する」計画が立てられません。第二の柱は定期的なシャッフルで、一定期間(エポック)ごとに配属を組み替えます。たとえ運悪くあるシャードに攻撃者が偏っても、その配属は短命で、勢力を維持できないまま解散させられます。
これらを底で支えるのがビーコンチェーン(統括チェーン)です。ビーコンチェーンは各シャードを横断する上位の合意層で、(1) 全シャードが共有する乱数の供給源となり、(2) バリデータの登録とシャードへの割当を管理し、(3) 各シャードのブロックの要約(クロスリンク)を取り込んで全体を一つの信頼の錨に束ねます。個々のシャードが局所的に揺らいでも、ビーコンチェーンが「どの配属が正当か」「どのシャードブロックが確定したか」の唯一の基準を与えるため、クロスシャードの整合とファイナリティが保てます。
無作為抽出した委員会(コミッティ)でシャードを守るとき、安全性は標本の大きさで決まります。全体のごく一部が悪意でも、委員会が小さすぎると偶然そこに悪意が過半集まる確率が無視できません。逆に委員会を十分大きく取れば、超幾何分布的に「無作為な標本の過半が悪意で埋まる」確率は指数的に小さくなります。設計では、この確率を安全閾値以下に抑えられる最小の委員会サイズを選びます。小さすぎれば1%攻撃に、大きすぎれば通信量が増えて並列化の利点が減る——ここにトレードオフがあります。
もう一つの防御がデータ可用性サンプリング(DAS) です。悪意あるシャードがデータを隠して不正を検証させない攻撃に対し、軽量ノードが各シャードのデータの断片を無作為に抜き取って照合します。多数のノードが少しずつ確認すれば、「一部でも欠けている」状況を高い確率で暴けるため、少数ノードでも巨大なデータの可用性を統計的に保証できます。これはデータシャーディング(danksharding)と/blockchain/zk-proofs-snark-stark/ の消去符号・多項式コミットメントを組み合わせて実現され、DA を安く堅牢にする鍵になっています。
・シャーディングは状態と処理をN分割し、各ノードが一部だけを担って並列処理する。ノード負荷を増やさず総スループットを上げるのが目的。
・段階はデータ→トランザクション→実行(ステート)の順に難化。実行シャーディングが最難で、クロスシャード取引と安全性希薄化を招く。
・クロスシャード取引は非同期メッセージで受け渡すため原子性の担保が核心。受信は送信元のファイナリティを待つ必要がある。
・分割で1シャードの守り手が1/Nになり1%攻撃(単一シャード奪取)が生じる。対策は無作為割当・定期シャッフル・委員会サンプリング・ビーコンチェーン、DAはDASで守る。
・PoSは割当を制御できるためシャーディングと相性が良い。
まとめ
- シャーディングは台帳の状態と処理を
N個のシャードへ水平分割し、各ノードが一部だけを担って並列処理する。ノードの負荷を一定に保ったまま総スループットを上げるのが狙いで、L1内部で並列度を高める点でロールアップと役割が異なる。 - 分割は**データ→トランザクション→実行(ステート)**の順に難化する。データシャーディングはDA供給に専念でき軽いが、実行シャーディングは各シャードが独立に状態遷移を計算するため最難関。
- 状態分割はクロスシャード取引を生む。シャードは互いの内部状態を知らずメッセージで受け渡すため処理は非同期になり、原子性の担保が中心課題。受信は送信元のファイナリティ確定を待つ必要がある。
- 1シャードあたりの守り手が
1/Nに減るため、単一シャード奪取(1%攻撃) が成立し得る。防御は検証可能な無作為割当・定期シャッフル・十分な委員会サイズ・ビーコンチェーンによる統括、そしてデータはDASで可用性を確率的に保証する。 - 攻撃者にシャードを選ばせないことが要諦で、ステークを把握・再配属できるPoSがシャーディングと相性が良い。
ブロックチェーン Article
ブロックチェーンのシャーディングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
分割で発生するのがシャード間通信。あるシャードの状態が別シャードへ影響する取引は、単一シャード内で完結せず非同期メッセージで受け渡すため、原子性(アトミック性)の担保が設計上の最難関になる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / シャーディング」に近いか確認する。
- 強みである「シャーディングは台帳の状態と処理を複数のシャードへ水平分割し、各ノードが全体の一部だけを担うことで並列処理を可能にする。目標はノードの負荷を増やさずに全体スループットを上げること。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。