先週、大前端グループで技術共有を行いました。現在、会社が「オフィス全英文化」を推進しているため、これは全て英語での共有でした。全英語は自分にとって挑戦でしたが、1 時間半ずっと英語を使ったものの、自分の評価は勇気が実力を上回るというところでしょう🐶。
インターネット時代、どのように信頼を築くのでしょうか❓信頼を築くための基礎はもちろん、情報伝送が安全であることを保証することです。そうすれば、ユーザーはオンラインで交流したり、買い物をしたり、支払いをしたりすることができるのです... では、今日はインターネット時代の情報セキュリティの発展を一歩一歩見ていきましょう!
「この記事の概要」は以下の通りです:
「キーワード」暗号学、対称鍵システム、非対称鍵システム、ハッシュ、デジタル署名、デジタル証明書、SSL/TLS、SSH、iOS 署名、OpenSSL、WireShark
💡:心配しないでください、ここでは複雑な数学的計算については話しません。
はじめに#
-
私たちはエンジニアリングの中で、RSA、AES、HMAC など、情報セキュリティに関連する多くのコードを扱っています。これらに出会うたびに、私は混乱し、時には頭が冷たくなることもあります。だから、これらが一体何をしているのかを理解したいと思いました。
-
以前、iOS 署名の問題でつまずいたことがあり、その結果、前回の記事(iOS | 図解 iOS 署名の背後にある原理を執筆しました。興味がある方はぜひご覧ください)。今回は大前端向けの共有なので、前回の記事を基に拡張した形になります。
以上の理由から、この文章が生まれました。インターネット時代の皆さんが興味を持ってくれることを願っています。
この記事の目標#
以下の質問に答え、理解すること:
-
🥣情報伝送は一般的に対称暗号➕非対称暗号を使用しますが、なぜですか?どちらか一方だけを使用することはできないのですか?
-
🥣情報セキュリティにはなぜデジタル署名が必要ですか?
-
🥣なぜ署名の前にハッシュ操作を行う必要があるのですか?
-
🥣情報セキュリティにはなぜデジタル証明書が必要ですか?
最終目標:私たちが暗号学に関連する問題に直面したとき、もはや恐れや混乱を感じないようにすることです。
情報セキュリティとは?#
これは比較的大きな問題です。ここでは、情報セキュリティの三要素(略してCIA)を通じて答えたいと思います。
CIA の構成は以下の通りです:
-
機密性(Confidentiality):情報が保存、伝送、使用される過程で、非承認のユーザーや実体に漏洩しないことを指します。
-
完全性(Integrity):情報が保存、伝送、使用される過程で、非承認のユーザーによって改ざんされないこと、または承認されたユーザーによる不適切な改ざんを防ぐことを指します。
-
可用性(Availability):承認されたユーザーや実体が情報資源を正常に使用できることを保証し、異常に拒否されないことを指します。
-
➕認証性(Authentication):不可否認性(Non-Repudiation)とも理解でき、ネットワーク通信の双方が情報のやり取りの過程で、参加者自身と提供された情報の真実性を確信することを指します。すなわち、すべての参加者が自分の真の身分や提供された情報の原本性、完了した操作と約束を否認または拒否できないことです。
-
➕制御性(Controllability):ネットワークシステムと情報が伝送範囲と保存空間内での制御の程度を指します。
-
参考:情報セキュリティの 5 つの安全特性——51know
💡ここで 2 点説明が必要です:
-
可用性には認証性と制御性の 2 つの要素が追加されており、個人的にはこれら 2 つは可用性にサービスを提供するものであるため、同じカテゴリに分類しています。
-
本文で話す内容はこの 3 つの要素に関連しています:機密性、完全性、認証性。これら 3 つを3 つの要求と見なすことができ、本文の最初のタスクはそれらを達成することです。また、上記の 3 つの要素の説明は専門的なものであるため、私が簡単に説明します:
-
❗️機密性:A が B にメッセージを送信し、C にその内容を見られたくない。
-
❗️完全性:A が B にメッセージを送信し、C にその内容を変更されたくない。
-
❗️認証性:A が B にメッセージを送信し、B は送信者の身分が A であることを確認できる。
-
さて、私たちは3 つの要求を持って、次に進みましょう。
なぜ情報セキュリティが必要なのか?#
どうやって実現するかを話す前に、まず情報セキュリティが必要な理由を考えてみましょう。ここでは「ユーザーが必要であり、会社がそれを満たす」と簡単にまとめます。詳しく言うと、以下の 3 点に分けられます:
-
情報セキュリティが必要であるという認識は非常に一般的で、特に銀行や電子商取引など、金銭やユーザーのプライバシーに関わる分野では特に重要です。
-
ネットワーク利用者の視点から分析すると、彼らの情報セキュリティが保証されない場合、どうしてオンラインで買い物や支払い、ローンを組んだり、アカウントのパスワードなどの個人情報を入力できるでしょうか?
-
企業にとって、ユーザーの情報セキュリティを保証できない場合、ユーザーの信頼を失うことになり、つまりユーザーを失うことになります。そのような企業が成長を語ることができるでしょうか?
したがって、インターネット時代において、情報セキュリティは非常に必要です。では、どのように実現するか見ていきましょう!
どのように情報セキュリティを実現するか#
❗️私たちの 3 つの要求を忘れないでください:機密性、完全性、認証性。
情報セキュリティについて話すとき、暗号学の登場を欠かすことはできません。なぜなら、暗号学の 3 つの基本的な安全目標(機密性、完全性、可用性)は、上記の 3 つの要求に対して対応しているからです。
まず、以下のビデオから暗号学の発展の歴史を理解しましょう:
-
簡単に理解する:The History of Cryptography|Explained For Beginners——Binance Academy, Youtube
-
詳しく理解する:
-
Secret Codes: A History of Cryptography (Part 1)——The Generalist Papers, Youtube
-
More Secret Codes: A History of Cryptography (Part 2)——The Generalist Papers, Youtube
-
さて、これで暗号学について大まかな理解ができたと思います。次に、暗号学の 3 つの一般的なアルゴリズムを見ていきましょう。
3 つの一般的な暗号学アルゴリズム#
それらはそれぞれ対称鍵アルゴリズム、非対称鍵アルゴリズム、ハッシュアルゴリズムです。
対称暗号アルゴリズム#
上の図の黄色い枠内に示されているように、対称暗号のプロセスは、送信者が秘密鍵(Secret Key)を使用して平文を暗号化し、暗号文を生成して受信者に送信し、受信者は同じ鍵を使用して暗号文を復号化することで平文を得るというものです。
💡対称暗号の特徴:暗号化 / 復号化に使用する鍵は同じ(Same Key)です。
Q1: あなたが考えられる一般的な対称暗号アルゴリズムには何がありますか?
DES、3DES、AES、IDEA、SM1、SM4、RC2、RC4。
その中で、RC4 はストリーム暗号アルゴリズム(毎回 1 ビットまたは 1 バイトだけを暗号化 / 復号化)であり、他はブロック暗号アルゴリズム(平均して N グループに分割してから暗号化し、最後に順番に組み合わせる)に属します。
これらのアルゴリズム名を挙げた目的は、これらの用語に出会ったときに、それらが何をするのかを明確に理解できるようにするためです。数学的原理に興味がある場合は、自分で深く探求してください。
参考:暗号学の基礎(一)一般的な暗号アルゴリズムの分類——Blog
Q2: 上の図を見て、次の疑問が浮かぶかもしれません:鍵はどのように受信者に送信されるのですか?そうしないと、受信者は暗号文を受け取った後、復号化できませんよね。
これは良い質問です。現実の世界では、私たちは秘密裏に会って鍵を渡すことができますが、インターネットの世界では、ハッカーがあなたの通信を簡単に傍受できるため、対称暗号アルゴリズムの最大の難点は鍵の配布問題です。
どう解決するのでしょうか?それが次の非対称暗号アルゴリズムの登場です。
非対称暗号アルゴリズム#
上の図の黄色い枠内に示されているように、非対称暗号のプロセスは対称暗号と大体似ています。
💡唯一の違いは、非対称暗号アルゴリズムの特徴です:暗号化 / 復号化に使用する鍵が異なる(Different Key)。
対称暗号の対称鍵と同様に、非対称暗号の秘密鍵(Secret Key / Private Key)も非常にプライベートで重要であり、他人に簡単に渡すことはできませんが、公開鍵(Public Key)は自由に配布できます。
送信者と暗号通信を行いたい場合は、公開鍵を送信者に渡し、送信者はそれを使用して暗号化し、受信者(つまり自分)は暗号文を受け取った後、秘密鍵を使用して復号化すればよいのです。
Q1: あなたが考えられる一般的な非対称暗号アルゴリズムには何がありますか?
RSA、ECC、DSA、ECDSA、SM2。
Q2: 非対称暗号が鍵の配布問題を解決したのであれば、対称暗号はもう必要ないのでしょうか?
実際、そうではありません。非対称暗号にも欠点があります。それは、暗号化速度が対称暗号よりも遅いことです(対称暗号の本質はビット演算であり、非対称暗号の本質はべき演算と剰余演算です)。
したがって、これが本文の目標問題 1 を引き起こします:情報伝送は一般的に対称暗号➕非対称暗号を使用しますが、なぜですか?どちらか一方だけを使用することはできないのですか?
「情報伝送の暗号化方式」というセクションで再度話し合います。次に、最後の一般的な暗号学アルゴリズムであるハッシュアルゴリズムを紹介します。
ハッシュアルゴリズム#
上の図からわかるように、ハッシュアルゴリズムは任意のデータを固定長のコードに変換できます。このコードを一般にハッシュ値またはダイジェストと呼びます。
💡ハッシュアルゴリズムの特徴:
-
「唯一」識別性:同じ入力は必ず同じ出力を生成し、異なる入力は大多数の場合異なる出力を生成します。(大多数の場合なので、唯一性には二重引用符が付いています)
-
不可逆:出力から入力を推測することはできません。
ハッシュ値を原始データの「指紋」と理解することができます。犯罪現場では、指紋から直接その人がどのような人かを推測することはできません(不可逆)が、現場と犯罪者(または指紋データベース)の指紋を比較することで、犯人を見つけることができます!
💡上記の 2 つの特徴を考慮すると、ハッシュアルゴリズムには一般的に 2 つの用途があります:
1)データが変更されていないか検証する
私たちが特定のソフトウェアをダウンロードする際、ダウンロードリンクの近くにハッシュ値(MD5)が付加されていることがあります。それは何のためでしょうか?
実際、このハッシュ値は原始ダウンロードパッケージ A の「指紋」のようなものです。もし私たちがダウンロードしたパッケージがダウンロード中に誰かによって改ざんされ、偽のパッケージ B になった場合、私たちは偽パッケージ B のハッシュ値 B-hash(MD5)を計算し、図の原始パッケージ A のハッシュ値 A-hash と比較します。もし B-hash と A-hash が一致しなければ、B パッケージには「何かがある」と言えるでしょう。
さらに、後のデジタル署名技術でもハッシュ関数が使用されます。後でまた話しましょう。
2)ユーザーのプライバシーを保存する
あるプラットフォームのデータベースには、ユーザーのアカウント名やパスワードを保存する必要があります。ここで、パスワードが平文で保存されていると、危険です。データベースに脆弱性が発生し、ハッカーに攻撃されると、パスワードがすべて漏洩する可能性があります。
したがって、データベースにはパスワードのハッシュ値が保存されており、ユーザーがパスワードを入力してログインする際には、原始パスワードと入力されたパスワードのハッシュ値を比較するだけで済みます。これが、なぜ私たちがあるプラットフォームでパスワードを忘れた場合、再設定するしかないのかという理由です。プラットフォームも私たちの原始パスワードを知らないのですから~
ここで、2 つの小さな質問を見てみましょう。
Q1: あなたが考えられる一般的なハッシュアルゴリズムには何がありますか?
MD5、SHA-1、SHA-2、SHA-3、HMAC、SM3。
Q2: SM シリーズアルゴリズムは中国で認定され、発表されたものですが、その正式名称を知っていますか?
それは中国で認定されたため、SM は実際にはピンインに由来し、その正式名称は商(S)用密(M)コードです。
ハッシュアルゴリズムの 2 つ目の用途(ユーザーのプライバシーを保存する)には、いくつかのリスクが存在します。それは🌈レインボー攻撃です。
上の図のレインボーテーブルからわかるように、いくつかの一般的なパスワードの対応するハッシュ値(MD5)はすでに広く知られています。ハッカーがこれらのハッシュ値を入手すると、原始パスワードを手に入れたことになります。したがって、私たちはレインボー攻撃のリスクを減らすためのいくつかの対策が必要です。ここにレインボーテーブルに基づくウェブサイトcmd5があります。興味がある方はぜひご覧ください。
例えばハッシュにソルトを加える、HMACです。前者は平文の基礎の上にランダムな数(ソルト)を追加してからハッシュ値を計算します。後者はさらに安全で、平文の基礎の上に秘密鍵(事前に共有された対称鍵)を組み合わせてからハッシュ値を計算します。
参考:
さて、以上が 3 つの一般的な暗号学アルゴリズムです。次に、これらの基本アルゴリズムに基づいて、私たちの 3 つの要求をどのように実現するかを話しましょう。覚えていますか?機密性、完全性、認証性。
情報伝送の暗号化方式#
❗️要求 1 を実現する:機密性。
🥣目標問題 1 に答える:情報伝送は一般的に対称暗号➕非対称暗号を使用しますが、なぜですか?どちらか一方だけを使用することはできないのですか?
まず問題 1 に答えましょう。上記の学習から、2 つの暗号化方式にはそれぞれ欠点があり、互いに補完し合うことがわかりました。
🥣したがって、対称暗号(速度が速い)と非対称暗号(鍵の配布が容易)の利点を組み合わせて情報安全な伝送を実現すること、つまり非対称暗号を使用して対称鍵を伝送し、その後の通信は直接対称鍵を使用して暗号化する方式が、現時点で考えられる最良の方法です。
PS:鍵交換方式については、上記の非対称暗号に基づく方法の他にも、実際には鍵を交換するための 2 つの方法があります。
-
専用の鍵交換アルゴリズム(DH (E)、ECDH (E) など);
-
事前配備方式(PSK、SRP など)。
とにかく、1 つのポイントを覚えておいてください。対称暗号の性能が良いため、大量かつ頻繁な通信データはすべて対称鍵を使用して暗号化されています。上記で交換する必要がある鍵もすべて対称鍵です。
❗️暗号化手段があれば、情報伝送の機密性も保証されます。これで、私たちは最初の要求を達成しました~
次に、情報の完全性を保証するにはどうすればよいのでしょうか?それはデジタル署名を見ていきましょう。
デジタル署名#
❗️要求 2 を実現する:完全性。
🥣目標問題 2 に答える:情報セキュリティにはなぜデジタル署名が必要ですか?
🥣目標問題 3 に答える:なぜ署名の前にハッシュ操作を行う必要があるのですか?
デジタル署名は一般的に伝送されるデータに添付され、データが改ざんされるのを防ぐために使用されます。次に、それがどのように実現されるかを説明します。
まず、その基盤となるコアは、先ほど言及したハッシュアルゴリズムと非対称暗号アルゴリズムです。
生成(署名)#
署名は通信中の送信者によって生成されます。送信者はまず、伝送するデータに対してハッシュを行い、データの要約(つまりハッシュ値)を得てから、秘密鍵を使用して要約を計算し、そのデータの署名を生成します。
検証(署名の検証)#
受信者はデータとその署名を受け取った後、以下の処理を行います:
-
データ:送信者と同じハッシュアルゴリズムを使用して、実際のデータの要約 A を計算します;
-
署名:送信者が使用した秘密鍵に対応する公開鍵を使用して、署名を計算し、元のデータの要約 B を得ます。
要約 A と要約 B を比較し、一致すれば、実際のデータが改ざんされていないことを示します。そうでなければ、データに問題があることになります(これはハッシュによるデータの完全性の検証に似ていますが、署名の安全レベルは明らかに高く、秘密鍵が保護しているためです)。
署名の生成と検証のプロセスはこのようになります。さて、目標問題 2 と 3 に対する答えは得られましたか?
🥣2: 情報セキュリティにはなぜデジタル署名が必要ですか?
簡単です。情報の完全性を保証するためです(❗️これで要求 2 も達成しました)。
🥣3: なぜ署名の前にハッシュ操作を行う必要があるのですか?
2 つの質問を考えてみてください:
-
ハッシュは何のためにあるのですか?それは任意のデータを固定長のコードに変換します。
-
署名の本質は非対称暗号ですが、何か不足がありますか?性能が低いです。
したがって、大きなデータに対して署名を行うよりも、小さなデータに対して署名を行う方が速いです。偶然にも、ハッシュアルゴリズムもデータの唯一性を大いに保証できます。
しかし、1)署名速度を向上させることは答えの一部に過ぎません。なぜなら、署名の前にハッシュ操作を行わなければ、ここには 2)安全上のリスクがあるからです:
-
再順序化。伝送するメッセージが非常に長く、非対称暗号アルゴリズムがサポートする最大長を超える場合、システムはメッセージを分割して署名する必要があります。その結果、複数の署名が得られます。受信者は各署名を個別に検証します。しかし、この場合、分割後のメッセージの順序が改ざんされないことを保証することはできません。なぜなら、各署名は検証を通過できるからです(誰かが考えるかもしれませんが、複数の署名を統合してから新しい署名を生成することはできますが、そうすると再び非対称暗号アルゴリズムがサポートする最大長の制限を受ける可能性があります)。
-
メッセージの偽造。ハッカーが任意の署名を捕獲し、平文メッセージを逆推測することで、後でそれを組み立てて使用することができます(なぜなら、逆推測に使用される公開鍵は非常に簡単に入手できるからです)。
参考:なぜ RSA で署名する前にメッセージをハッシュするのか?——StackExchange
これで、私たちは残りの 1 つの要求❗️と 1 つの目標問題🥣だけになりました~
さて、まず考えてみましょう。
Q: 受信者はどのように署名検証に使用する公開鍵を取得するのでしょうか?
次に進みましょう。
デジタル証明書#
💡要求 3 を実現する:認証性。
🥣目標問題 4 に答える:情報セキュリティにはなぜデジタル証明書が必要ですか?
デジタル証明書を理解する前に、「受信者はどのように署名検証に使用する公開鍵を取得するのか?」という質問に対して、私たちはすぐに思いつくのは、送信者がデータと署名を送信する際に、公開鍵を添付すれば万事解決ではないかということです~以下の図のように:
しかし、これには新たな問題Qが生じます:受信者はどのようにして公開鍵が他の誰かによって悪意を持って置き換えられていないことを確認できるのでしょうか?つまり、公開鍵の身元が不明です。
🎉さて、ここでデジタル証明書の登場です。
構成内容#
まず、デジタル証明書の構成内容を見てみましょう。これは公開鍵、公開鍵の身元情報、およびそれらの署名(別の署名)で構成されています。
注意:
-
暗号化された公開鍵データに使用される秘密鍵は、別の公私鍵の組み合わせであり、権威ある認証機関(Certificate Authority、CA)によって発行されます。私たちは CA の秘密鍵を持っていません。
-
CA を理解するには?私たちの身分証明書は政府によって発行されていることを思い出してください。
公開鍵がデジタル証明書に包装されて伝達される#
現在、送信する内容に少し変更があります:公開鍵→証明書。
つまり、元々のデータ + 署名 +公開鍵が、データ + 署名 +証明書に変わりました。
証明書には、受信者が署名 A を検証するために必要な公開鍵と、公開鍵の身元情報および署名 B が含まれています:
-
身元情報の存在は、公開鍵の身元不明のリスクを排除します(❗️これで要求 3 も達成しました:認証性、🥣目標問題 4 に対する答え:情報セキュリティにはなぜデジタル証明書が必要ですか?);
-
署名 B は、公開鍵およびその身元情報の完全性を保証します。
しかし、署名 B があるため、公開鍵を取得する際には、まず証明書内の署名 B を検証する必要があります:
署名 B を検証するために使用される公開鍵も CA によって発行され、CA 証明書に存在します。
(ここで、証明書の構成内容を再確認できます:公開鍵 + 公開鍵の身元情報 + それらの署名。)
♻️ここで、あなたは次の疑問を持つかもしれませんQ:受信者はこの CA 証明書をどこから取得するのか?CA 証明書があっても、私はどうやってこの CA 証明書の署名を検証するのか?無限ループに入ってしまったようです。
実際、CA 証明書は一般的にシステム / ソフトウェアをインストールする際に内蔵されており、私たちはそれを信頼するべきでしょう~
次に、証明書の信頼チェーンについてもう少し理解してみましょう。
証明書の信頼チェーン#
証明書が信頼チェーン内で占める位置に基づいて、証明書は 3 種類に分けられます:
-
ルート証明書 Root Certificate(参考:Apple のオペレーティングシステムで利用可能な信頼されたルート証明書——Apple 公式)
-
中間証明書 Intermediate Certificate
-
リーフ証明書 Leaf Certificate
🌰例:私の開発者証明書 A(Apple Development)は、中間証明書 B(Apple Worldwide Developer Relations Certification Authority、Xcode インストール時に内蔵)によって発行され、中間証明書 B はルート証明書 C(Apple Root CA、システム内蔵)によって発行され、ルート証明書 C は自分の CA によって発行されています。C は信頼チェーンの頂点にあるため、彼自身が決定権を持っています。
今、あなたも自分の Mac > キーチェーンアクセス > 証明書を見て、理解を深めてください。
ここで、もう一つ面白い質問がありますQ:証明書は改ざんされる可能性がありますか?
-
直接変更?まず、証明書の内容(公開鍵および身元情報)を直接変更することはできません。なぜなら、ハッカーは CA の秘密鍵を持っていないため、証明書の内容を再署名することはできません。
-
直接置き換え?これも不可能です。なぜなら、証明書には送信者の身元情報が含まれており、例えば私がブラウザ(受信者)を通じてあるウェブサイト(送信者)にアクセスする場合、ウェブサイトの証明書にはドメイン情報が含まれており、ブラウザは自分がリクエストしたドメインと証明書内のドメイン情報を直接比較することで、証明書が置き換えられていないかを確認できます~
参考:HTTPS の暗号化原理を徹底的に理解する—— 知乎
拡張(規範、体系、標準):暗号学の基礎(二)デジタル証明書、鍵の基礎知識——Blog
これで、私たちの 3 つの要求❗️と 4 つの目標問題🥣がすべて達成されました!リラックスしましょう~
最後に、追加の内容について少し話しましょう:
-
情報セキュリティに関連する技術(SSL/TLS、SSH、iOS 署名)
-
一部の実践(OpenSSL、WireShark)。
関連技術 + いくつかの実践(追加)#
長文のため、別の記事に移動してください:(追加)情報セキュリティ | インターネット時代、どのように信頼を築くか?。
もとの目標に戻る#
もし今回の共有であなたが少しでも覚えておくべきことがあるとすれば🤏、以下の質問の答えを理解することを試みてください!
-
情報伝送は一般的に対称暗号 + 非対称暗号を使用しますが、なぜですか?非対称暗号だけを使用することはできないのですか?
-
なぜデジタル署名が必要ですか?
-
なぜ署名の前にハッシュ操作を行う必要があるのですか?
-
なぜデジタル証明書が必要ですか?
さらに、あなたはこの記事の最終目標を達成しましたか?あなたとの交流を楽しみにしています~
最終目標:私たちが暗号学に関連する問題に直面したとき、もはや恐れや混乱を感じないようにすることです。
——暴風雨の赤色警報⛈️、思い切って休暇を取った日、深圳にて