伝統的なネットワークセキュリティの視点から、ブロックチェーンセキュリティはどのように異なるのか?
原文タイトル:《ブロックチェーンのセキュリティと従来のセキュリティの違い》
著者:衛剣藩、衛Sirの話
従来のセキュリティについては、多くの友人が比較的よく知っています。基本的には、脆弱性(管理、技術、人間性)に対する攻撃と、攻撃に対する防御です。
しかし、ブロックチェーンのセキュリティについては、多くの人があまり理解していません。ブロックチェーン自体は安全だと言う人もいますが、従来の攻撃は全く通用しないとも言われています。しかし、ブロックチェーン内でのセキュリティ事件もよく見かけます。
では、従来のセキュリティと何が違うのでしょうか?
この記事では、その点についてお話しします。
1. 全体的に見て
ブロックチェーンは設計上、大量の暗号技術を採用しており、ビジネス層、通信層、データ層のすべてで暗号化、署名、ハッシュなどの技術を使用しています。さらに、ブロックチェーンの非中央集権的な設計により、ブロックチェーンが担うビジネスの機密性、完全性、可用性は、前例のない高いレベルに達しています。
しかし、本質的には、ブロックチェーンもソフトウェアシステムの一種であり、ソフトウェアに存在する可能性のあるセキュリティ問題は、ブロックチェーンにも存在します。
たとえブロックチェーンの基盤が完璧でも、その上で動作するさまざまなDappやWeb3アプリケーションには、依然として多くの脆弱性が存在する可能性があります。
これは、基礎がどれだけ安全でも、その上に建てられた建物が安全であるとは限らないのと同じです。
この記事の構成:
- セキュリティは主に何を見ますか?
- 従来のセキュリティの問題は主にどこにありますか?
- ブロックチェーンは、どのようなセキュリティ問題を解決しましたか?解決できなかった問題は何ですか?
2. セキュリティは主に何を見ますか?
実際、セキュリティについては、結局のところ、3つの要素に集約されます。これを超えたものはありません:
機密性、完全性、可用性。
この3つの性質はCIA(3つの英単語の頭文字の略称)と呼ばれます。
他の言い方があっても、同じレベルではありません。たとえば、認証性、制御性、監査性、否認防止性などは、すべてCIAの付属または延長であり、CIAのために存在します。
CIAを深く理解するには?
UNIXに精通している方は、比較的理解しやすいでしょう。UNIXの考え方では、すべてはファイルであり、ファイルのセキュリティは最終的に読み取り、書き込み、実行(rwx)に帰着します。ユーザーが特定のファイルにアクセスできる権限は、読み取り可能か、書き込み可能か、実行可能かに対応しています。これは大体、機密性、完全性、可用性に対応しています。
機密性とは、他人に知られたくないことは知られないようにすることです。
実現の方法は、主に以下のようなものです:
- 記録しない、書面での記録を残さず、頭の中にだけ留めておく。
- 鍵をかける、物理的または技術的なロックで、アクセス制御を実現し、許可された者だけがアクセスできるようにする。
- 隠す、許可された者だけがどこにあるかを知り、他の人は知らないようにする。ステガノグラフィーもこのカテゴリに含まれます。
- 暗号化、コードや暗号の方法を使用し、パスワードや鍵がなければアクセスできないようにする。
完全性の概念は理解しにくいですが、最も簡単な理解は、許可されていない場合、物事のどの部分にも追加、削除、変更を加えてはいけないということです。許可されていない行為が行われた場合、完全性が損なわれます。
さらに、完全性にはもう一つの直感的な意味があります:一貫性。つまり、システムのデータが現実世界と一致していることです。完全性の英語「integrity」自体には「誠実」という意味があり、データが改ざんされると、一貫性が破壊されることが明らかです。
可用性は比較的理解しやすいです。システムがダウンしたり、遅くなったり、データが使えなくなったりすることは、可用性の問題です。システムが提供するサービスが「使えない」「どうにもならない」「機能しない」「うまくいかない」と感じられる場合、それは可用性の問題です。
情報システムが保障すべきは、この3点です。
通常、CIAを保障するために用いられる手法は、認証、権限付与、アクセス制御、検証、暗号化、検出、バックアップ、冗長化などです。もちろん、これらの作業がうまく行われないと、さまざまな脆弱性が生じます。一方では、発見したらすぐに修正し、もう一方では、根本から始めて脆弱性の発生をできるだけ減らすことが重要です。
従来のセキュリティの主体はほぼこれらです。
3. 従来のセキュリティの問題はどこにありますか?
もしあなたがすでにセキュリティの専門家であれば、このセクションをスキップしても構いません。
セキュリティの脆弱性には多くの種類があり、この記事ではすべてを列挙することはありませんが、いくつかの例を挙げて、大まかな状況を見てみましょう。
最も高いレベルで言えば、脆弱性の共通の特徴は、攻撃者の行動がソフトウェアやハードウェアの動作をシステム設計者の予期を超えさせ、負の効果を生じさせることです。
例 1:SQLインジェクション
SQLインジェクションとは、ページの入力欄やURLなどにおいて、ハッカーがプログラマーの予期した内容ではなく、SQLキーワードを混ぜたデータを入力することです。プログラムが入力データを処理する際にSQLを使用し、入力内容をSQL文のパラメータとして扱うため、SQL文がハッカーが巧妙に挿入したSQL内容を実行する可能性があります。これにより、ハッカーはプログラマーが予期しないデータベース操作を実行できます。
プログラマーはこのような攻撃の試みを許可してはいけないため、もっとチェックを行うべきです。しかし、大多数のプログラマーはセキュリティの知識がなく、少しでも知識があっても、必ずしも適切に対処できるわけではなく、ハッカーは回避する可能性があります。
ハッカーは何のセキュリティ特性を破壊したのでしょうか?ハッカーはシステムの予期外のデータを書き込み、システムの完全性を損なったのです。もしハッカーがSQL文を通じてデータベースを操作した場合、システムの機密性もさらに損なわれます。
プログラムのどこがうまくいかなかったのでしょうか?アクセス制御です。すべてのデータが入ってくることを許可してはいけません。
例 2: バッファオーバーフロー
バッファはメモリ内にデータを格納する場所で、通常は予め設定されたサイズがあります。ユーザーが入力したデータをメモリに格納する際に、チェックを行わないと、メモリの事前設定されたスペースを超えてバッファオーバーフローが発生する可能性があります。プログラムの実行コードもメモリ内にあるため、ハッカーが巧妙に設計すれば、オーバーフローを利用して元のコードを上書きし、コンピュータが最終的にハッカーのコードを実行することになります。
これはSQLインジェクションと似たようなもので、ハッカーは入力データの機会を利用して実行可能なコードを書き込み、被害を受けたホストがそれを実行してしまうのです!
後に、このような攻撃を抑制するために、CPUメーカーはDEP(データ実行防止)機能を提供し、メモリページに実行可能かどうかのフラグを立てました。オペレーティングシステムがこの機能を利用すれば、このような攻撃を大幅に防ぐことができます。また、オペレーティングシステムはASLR技術を導入し、ヒープ、スタック、共有ライブラリのマッピングなどの線形領域のレイアウトをランダム化することで、攻撃者が目的のアドレスを予測する難易度を上げています。しかし、これらの2つの技術を使用しても、攻撃者が回避できないわけではありません。
ハッカーがメモリ領域を無制限に書き換えることも、システムの完全性を損なうことになります。
プログラムはアクセス制御をうまく行っていませんでした。
例 3:ファイルアップロードの脆弱性
たとえば、あるウェブサイトがユーザーにjpg画像をアップロードする入口を提供している場合、チェックを行わなかったために、ハッカーがJSPファイルを成功裏にアップロードしました。そして、ハッカーはそのアップロードされたファイルのURLを見つけ、彼が書いたスクリプトを実行することができます。このスクリプトは完全にトロイの木馬である可能性があります。
前述のように、チェックが不十分でハッカーに隙を与え、設計者の予期しないファイルを書き込み、設計者の予期しないプログラムを実行しました。
プログラムのアクセス制御がうまくいっていませんでした。
例 4: 中間者攻撃の脆弱性
攻撃には多くの種類があり、TCP攻撃、HTTP攻撃、DNS攻撃、証明書攻撃、鍵協議攻撃などがあります。
共通の特徴は、Aが自分がBとやり取りしていると思い、Bが自分がAとやり取りしていると思っているが、実際には彼らは中間のCとやり取りしているということです。AとBのすべての内容はCを経由し、CはAとBの通信内容を見ており、CはAとBの間の通信内容を変更することもできます。
これは少なくともAとBの通信の機密性を損なうものであり、Cがデータを変更すれば、完全性も損なわれます。
プログラムの認証がうまくいっていませんでした。
例 5: パスワードのブルートフォース攻撃
ユーザーのパスワードが比較的弱い場合、ハッカーが何度も試みることで、パスワードを解読し、システムにアクセスできる可能性があります。
このようなことは、ユーザーに責任があると考える人もいるかもしれませんが、一般的には、現代のアプリケーションシステムはユーザーが設定したパスワードの強度を強制的に要求します。
ハッカーが成功すれば、システムの完全性が損なわれ(システムがハッカーを受け入れることは一貫性の失効を意味します)、さらに悪化する可能性があります。たとえば、ハッカーが侵入した後に見てはいけないものを見てしまい、機密性が損なわれることになります。
システムの認証がうまくいっていませんでした。
例 6: 権限昇格の脆弱性
あるウェブサイトで、ユーザーAとBがどちらも一般ユーザーである場合、原則として自分の個人情報のみを操作できるはずです。Aが何らかのハッキング手法を使ってBの個人情報を操作できる場合、これが平行的な権限昇格です。もしAが一般ユーザーで、Bが管理者であれば、Aが何らかのハッキング手法を使ってBが行える操作を実行できる場合、これが垂直的な権限昇格です。
権限昇格の脆弱性は、通常、権限検証ロジックが不十分であることが原因です。
プログラムの権限管理がうまくいっていませんでした。
例 7: ピーク時にウェブサイトがダウン
有名人がウェブサイトでニュースを発表すると、大勢の人々が押し寄せ、ウェブサイトがダウンしたり、応答が非常に遅くなったりします。
これは典型的なシステムの可用性の問題です。
システムが何をうまくいかなかったのでしょうか?スケーラビリティが不足していました。
例 8: 自然災害によるシステムデータの喪失
2015年、Googleのベルギーにあるデータセンターが4回の雷撃に見舞われ、ディスクが損傷しました。Googleはこれらのディスクを緊急修復しましたが、一部のデータは永遠に失われました。Googleは特に、失われたデータは非常に少なく、データセンターの0.000001%に過ぎないと強調しました。それでも、一部のGoogleユーザーは永遠に自分の個人データの一部を失いました。
これは典型的にデータの可用性を損なうものです。
システムの災害復旧バックアップがうまくいっていませんでした。

4. ブロックチェーンは何のセキュリティ問題を解決しましたか?
ブロックチェーンと従来のシステムの最大の違いは2点です:一つは大量の暗号技術を使用していること、もう一つは非中央集権的な構造を使用していることです。
前者は機密性と完全性を大幅に強化し、後者は可用性を大幅に向上させます。
まず、暗号技術の使用による利点について説明します。
初期のWEB世界では、たとえばIPプロトコル、HTTP、FTP、TELNETなどでは、あまり暗号技術が使用されていませんでした。当時、インターネットは初期段階にあり、主な目的は相互接続であり、主に大学や研究機関の間で使用されていたため、悪意のある攻撃を考慮する余裕がありませんでした。プログラマーはこれらの面で常に純粋な考えを持ち、他人を信頼できると考え、誰も「そんなに暇ではない」と思っていました。
その後、彼らは現実の世界が攻撃、破壊、偽造、侵入で満ちていることに気づき、プログラマーはさまざまなセキュリティ技術を導入せざるを得なくなり、暗号技術もその一環として導入され、SSL、SSH、HTTPS、IPSecなどの新世代のネットワークプロトコルが次々と登場しました。
しかし、これらは主に伝送層にあり、データの伝送を暗号化するためのもので、ビジネス層やユーザー層には昇華されていませんでした。最終的に、ユーザーは暗号技術の利点を感じることができませんでした。ユーザー層での暗号化とは何か?例えば、Office文書のパスワード暗号化、WinRARの暗号化、TrueCryptの全ディスク暗号化、ネットバンキングのU盾などです。
しかし、ブロックチェーンは設計の初めから暗号アルゴリズムを内蔵しており、これにより:
ブロックはハッシュでリンクされており、最初のブロックから最後のブロックまで、すべてのブロックが正しいかどうかを簡単に検証でき、すべてのブロックデータの完全性が保証されます。
偽造されたブロックのハッシュは簡単ではなく、特定の難易度に合致するハッシュのみが認められます。このようなハッシュを偽造するには、大量の計算が必要で、マイニングに匹敵する計算能力が必要です。
各ユーザーはプライベートキーを持ち、プライベートキーに対応するパブリックキーを使用して公開可能なアドレスを生成します。攻撃者はブルートフォース攻撃でプライベートキーを取得することはできません。
ユーザー体系は公開鍵制度に基づいて構築されているため、ユーザーの認証、ユーザーの署名、対称鍵の生成(必要な場合)が非常に容易で便利になります。
ブロック内の各取引は、完了するために署名を提供する必要があります。攻撃者はプライベートキーを持っていないため、署名できず、取引を偽造することができません。同時に、署名があることで、ユーザーは自分が行った取引を否認することができません。
ブロックチェーンがハッシュと公開鍵制度を内蔵していることは、暗号学的な完全性と機密性を直接提供しています。
暗号技術は、近くの1世紀の発展を経て、相当な基盤を築いてきました。現代の暗号学のいくつかの公開アルゴリズムは、世界最高レベルのセキュリティを提供しています。これらのアルゴリズムの中で、現在、どの国の力もそれを解読することはできません(いくつかのバックドアの伝説があっても、それはまだ伝説の域を出ておらず、確かな証拠はありません)。
次に、非中央集権の利点を見てみましょう:
1. ノードが1つ増えるごとにバックアップが1つ増える。
ビットコインを例にとると、世界中で約10,000のノードがサービスを提供しており、ビットコインシステムは誕生以来、常に安定して運用されています。誰もそれを停止させることはできません。たとえ8,000のノードが同時に失敗しても、2,000のノードが稼働しています。実際、全ネットワークで数ノードしか稼働していなくても、このネットワークは依然として機能します。
2. 一部が裏切っても、依然として機能する。
システムの堅牢性は、特定のオペレーティングシステムやデータベースのセキュリティに依存するのではなく、その独自のブロック式データ構造に基づいています。一部のノードが失敗しても、故意に悪事を働いても、大局には影響しません。具体的にどれだけの失敗や裏切りを許容できるかは、具体的な合意アルゴリズムによります。
3. 誰かや機関に依存しない
あなたが望む限り、ソフトウェアをダウンロードすれば(コードはすべてオープンソースです)、ビットコインやイーサリアム、または任意のパブリックチェーンに参加できます。あなたは誰かの意見を求める必要はなく、誰かの失踪や退出によってこのソフトウェアの将来を心配することもありません。あなたは自分の判断、興味、利益に基づいてそれを運用することができます。つまり、単独の個人や機関がそれを制御することはできません。
非中央集権は、可用性を大幅に向上させます。
5. ブロックチェーンが解決できないセキュリティ問題は何ですか?
基本的な論理から言えば、ブロックチェーンはセキュリティを大幅に向上させましたが、問題がないことを保証するものではありません。
私たちはすでにブロックチェーンのセキュリティの古典的なケース「922億ビットコイン」と「The DAOの盗難」で見てきました:
ビットコインは、プログラマーが整数オーバーフローの問題に注意を払わなかったため、大きな笑い話になりました。2100万ビットコインの総量が約1845億ビットコインに達する取引が発生しました!
イーサリアム上に構築されたThe DAOは、開発者が再入攻撃について全く知らなかったため、ユーザーがクラウドファンディングで集めた300万以上のイーサが盗まれ、恥ずかしい結果となりました。
これは少なくとも2つの点を教えてくれます:
ブロックチェーン自体は、設計上多くの暗号学的アルゴリズムを使用していますが、設計やコーディングが不注意であれば、大きな脆弱性が生じる可能性があります。
たとえブロックチェーン自体が千錘百鍛を経て、完全に安心できるセキュリティを提供しても、その上のスマートコントラクトは安全を保証できません。
なぜなら、スマートコントラクトコード内のロジックが要求、設計、コーディングの予期と一致しない場合、問題が発生するからです。
これは従来のセキュリティと何ら変わりません。
さらに、非常に重要な点があります:
- ブロックチェーンで使用される暗号技術自体にも脆弱性がある可能性があります。
結局のところ、暗号学も人間が作り出したものです。
人間が作ったものであれば、常に脆弱性が存在するのです。













