Bo2SS

Bo2SS

情報セキュリティ | インターネット時代、どのように信頼を築くか?

先週、大前端グループで技術共有を行いました。現在、会社が「オフィス全英文化」を推進しているため、これは全て英語の共有でした。全英語は自分にとって挑戦でしたが、1 時間半ずっと英語を使ったものの、自分の評価は勇気が実力を上回ったかな🐶。

インターネット時代、どのように信頼を築くのでしょうか❓信頼を築くための基本はもちろん、情報の伝達が安全であることを保証することです。そうすれば、ユーザーはオンラインで交流したり、買い物をしたり、支払いをしたりすることができるのです... では、今日はインターネット時代の情報セキュリティの発展を一歩一歩見ていきましょう!

この記事の概要」は以下の通りです:

image

キーワード」暗号学、対称鍵システム、非対称鍵システム、ハッシュ、デジタル署名、デジタル証明書、SSL/TLS、SSH、iOS 署名、OpenSSL、WireShark

💡:心配しないでください、ここでは複雑な数学的計算については話しません。

はじめに#

  1. 私たちのプロジェクトには、RSA、AES、HMAC など、情報セキュリティに関連する多くのコードがあります。これらに出会うたびに混乱し、時には頭が冷えることもあるので、彼らが実際に何をしているのかを理解したいと思っています。

  2. 以前、iOS 署名の問題でつまずいたことがあり、その結果、前回の記事(iOS | iOS 署名の背後にある原理を図解を執筆しました。興味がある方はぜひご覧ください)。今回は大前端向けの共有なので、前回の記事を基に拡張した形になります。

以上の理由から、この文章が生まれました。インターネット時代の皆さんが興味を持ってくれることを願っています。

この記事の目標#

以下の質問に答え、理解すること:

  1. 🥣情報伝達には一般的に対称暗号➕非対称暗号が使用されるのはなぜですか?一方だけを使用することはできないのですか?

  2. 🥣情報セキュリティにはなぜデジタル署名が必要ですか?

  3. 🥣なぜ署名前にハッシュ操作を行う必要があるのですか?

  4. 🥣情報セキュリティにはなぜデジタル証明書が必要ですか?


最終目標:暗号学に関連する問題に直面したとき、もはや恐れや混乱を感じないこと。

情報セキュリティとは?#

これは比較的大きな問題です。ここでは、情報セキュリティの三要素(略してCIA)を通じて回答したいと思います。

Source: comtact

CIA の構成は以下の通りです:

  • 機密性(Confidentiality):情報が保存、伝送、使用される過程で、非承認のユーザーや実体に漏洩しないことを指します。

  • 完全性(Integrity):情報が保存、伝送、使用される過程で、非承認のユーザーによって改ざんされないこと、または承認されたユーザーによる不適切な改ざんを防ぐことを指します。

  • 可用性(Availability):承認されたユーザーや実体が情報資源を正常に使用できることを保証し、異常に拒否されないことを指します。

    • 認証性(Authentication):否認できないこと(Non-Repudiation)とも理解でき、ネットワーク通信の双方が情報交換の過程で、参加者自身と提供された情報の真実性を確信することを指します。すなわち、すべての参加者は自分の本当の身分を否認したり、提供された情報の原本性や完了した操作と約束を否認したりできません。

    • 可制御性(Controllability):ネットワークシステムと情報が伝送範囲と保存空間内での制御の程度を指します。

参考:情報セキュリティの 5 つの安全特性——51know


💡ここで 2 点説明が必要です:

  1. 可用性には認証性と可制御性の 2 つの要素が追加されました。個人的には、これら 2 つは可用性にサービスを提供するものであると考えているので、1 つのカテゴリにまとめました。

  2. 本文で話すのはこの 3 つの要素に関連しています:機密性、完全性、認証性。これら 3 つを3 つの要求として考え、本文の最初のタスクはそれらを達成することです。また、上記の 3 つの要素の説明は専門的な内容が多いので、もう少し簡単に説明します:

    1. ❗️機密性:A が B にメッセージを送信し、C に見られたくない内容です。

    2. ❗️完全性:A が B にメッセージを送信し、C に変更されたくない内容です。

    3. ❗️認証性:A が B にメッセージを送信し、B は送信者の身分が A であることを確認できます。


さて、3 つの要求を持って、次に進みましょう。

なぜ情報セキュリティが必要なのか?#

Source: pixabay

どのように行うかを話す前に、情報セキュリティが必要な理由を考えてみましょう。ここでは「ユーザーが必要で、会社がそれに応える」と簡単にまとめます。詳しく言うと、3 つに分けられます:

  1. 情報セキュリティの必要性は非常に一般的な認識であり、特に銀行や電子商取引など、金銭やユーザーのプライバシーに関わる分野では特に重要です。

  2. ネットワーク利用者の視点から分析すると、彼らの情報セキュリティが保証されていなければ、どうしてオンラインで買い物や支払い、ローンを組んだり、アカウントパスワードなどの個人情報を入力したりできるでしょうか?

  3. 企業にとって、ユーザーの情報セキュリティを保証できなければ、ユーザーの信頼を失い、ユーザーを失うことになります。そのような企業が発展を語ることができるでしょうか?


したがって、インターネット時代において、情報セキュリティは極めて必要です。では、どのように実現するか見ていきましょう!

どのように情報セキュリティを実現するか#

❗️私たちの 3 つの要求を忘れないでください:機密性、完全性、認証性

Source: electronicdesign

情報セキュリティについて話すとき、暗号学の登場を欠かすことはできません。なぜなら、暗号学の 3 つの基本的な安全目標(機密性、完全性、可用性)は、上記の 3 つの要求に対応しているからです。


まず、以下の動画から暗号学の発展の歴史を理解しましょう:


さて、これで暗号学について大まかな理解が得られたと思います。次に、暗号学の 3 つの一般的なアルゴリズムを見ていきましょう。

3 つの一般的な暗号学アルゴリズム#

それらはそれぞれ対称鍵アルゴリズム、非対称鍵アルゴリズム、ハッシュアルゴリズムです。

対称暗号アルゴリズム#

Source: preyproject

上の図の黄色い枠内に示されているように、対称暗号のプロセスは、送信者が秘密鍵(Secret Key)を使用して平文を暗号化し、暗号文を得て受信者に送信し、受信者が同じ鍵を使用して暗号文を復号化することで平文を得るというものです。

💡対称暗号の特徴:暗号化 / 復号化に使用する鍵は同じ(Same Key)です。


Q1: あなたが思いつく一般的な対称暗号アルゴリズムは何ですか?

DES、3DES、AES、IDEA、SM1SM4、RC2、RC4。

この中で、RC4 はストリーム暗号アルゴリズム(毎回 1 ビットまたは 1 バイトだけを暗号化 / 復号化)であり、他はブロック暗号アルゴリズム(平均して N グループに分けてから暗号化し、最後に順番に組み合わせる)に属します。

これらのアルゴリズム名を挙げた目的は、これらの用語に出会ったときに、それらが何をするのかを明確に理解できるようにするためです。数学的原理に興味がある場合は、自分で深く探求してください。

参考:暗号学の基礎(一)一般的な暗号アルゴリズムの分類——Blog


Q2: 上の図を見て、次のような疑問が浮かびませんか:鍵はどのように受信者に送信されるのですか?そうすれば受信者は暗号文を受け取った後、復号化できるのです。

これは良い質問です。実世界では、秘密裏に会って鍵を渡すことができますが、インターネットの世界では、ハッカーがあなたの通信を簡単に傍受できます。したがって、対称暗号アルゴリズムの最大の難点は鍵の配布問題です。


どう解決するのでしょうか?それが次の非対称暗号アルゴリズムの登場です。

非対称暗号アルゴリズム#

Source: preyproject

上の図の黄色い枠内に示されているように、非対称暗号のプロセスは対称暗号と大体似ています。

💡唯一の違いは、非対称暗号アルゴリズムの特徴です:暗号化 / 復号化に使用する鍵が異なる(Different Key)。

対称暗号の対称鍵と同様に、非対称暗号の秘密鍵(Secret Key / Private Key)も非常にプライベートで非常に重要であり、他人に簡単に渡すことはできませんが、公開鍵(Public Key)は自由に配布できます。

送信者と暗号通信を行いたい場合は、公開鍵を送信者に渡し、送信者がそれを使って暗号化し、受信者(つまり自分)が暗号文を受け取った後、秘密鍵で復号化すればよいのです。


Q1: あなたが思いつく一般的な非対称暗号アルゴリズムは何ですか?

RSA、ECC、DSA、ECDSA、SM2


Q2: 非対称暗号が鍵の配布問題を解決したのであれば、対称暗号はもう必要ないのでしょうか?

実際にはそうではありません。非対称暗号にも欠点があります。それは、暗号化速度が対称暗号よりも遅いことです(対称暗号の本質はビット演算であり、非対称暗号の本質はべき演算と剰余演算です)。

したがって、これは本文の目標問題 1 を引き起こします:情報伝達には一般的に対称暗号➕非対称暗号が使用されるのはなぜですか?一方だけを使用することはできないのですか?

「情報伝達の暗号化方式」というセクションで再度話し合います。次に、最後の一般的な暗号学アルゴリズムであるハッシュアルゴリズムを紹介します。

ハッシュアルゴリズム#

Source: hackmd.io

上の図からわかるように、ハッシュアルゴリズムは任意のデータを固定長のコードに変換することができます。このコードを一般にハッシュ値または要約と呼びます。

💡ハッシュアルゴリズムの特徴:

  1. 「唯一」識別性:同じ入力は必ず同じ出力を生成し、異なる入力は大多数の場合異なる出力を生成します。(大多数の場合なので、唯一性には二重引用符が付いています)

  2. 不可逆:出力から入力を導き出すことはできません。

ハッシュ値を原始データの「指紋」と理解することができます。犯罪現場では、指紋から直接対応する人の姿を導き出すことはできません(不可逆的です)が、現場と犯罪者(または指紋データベース)の指紋を比較することで、犯人を見つけることができます!


💡上記の 2 つの特徴を考慮すると、ハッシュアルゴリズムには一般に 2 つの用途があります:

1)データが改ざんされていないか確認する

特定のソフトウェアをダウンロードする際、ダウンロードリンクの近くにハッシュ値(MD5)が付加されているのを見かけることがあります。これは何のためでしょうか?

image

実際、このハッシュ値は原始ダウンロードパッケージ 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)コードです。


ハッシュアルゴリズムの第二の用途(ユーザーのプライバシーを保存する)には、いくつかのリスクが存在します。それは🌈レインボー攻撃です。

Source: ckd3

上の図のレインボーテーブルからわかるように、いくつかの一般的なパスワードに対するハッシュ値(MD5)はすでに広く知られています。ハッカーがこれらのハッシュ値を取得すれば、原始パスワードを手に入れたも同然です。したがって、レインボー攻撃のリスクを減らすための対策が必要です。ここに基づくレインボーテーブルのウェブサイトcmd5があります。興味があれば見てみてください。

例えばハッシュにソルトを加える、HMACです。前者は平文の基礎にランダムな数(ソルト)を追加してからハッシュ値を計算します。後者はさらに安全で、平文の基礎に鍵(事前に共有された対称鍵)を組み合わせてからハッシュ値を計算します。


参考:


さて、以上が 3 つの一般的な暗号学アルゴリズムです。次に、これらの基本アルゴリズムに基づいて、私たちの 3 つの要求を実現する方法について話しましょう。覚えていますか?機密性、完全性、認証性

情報伝達の暗号化方式#

❗️要求 1 を実現する:機密性

🥣目標問題 1 に答える:情報伝達には一般的に対称暗号➕非対称暗号が使用されるのはなぜですか?一方だけを使用することはできないのですか?


まず問題 1 に答えましょう。上の学習から、2 つの暗号化方式にはそれぞれ欠点があり、互いに補完し合うことがわかりました。

🥣したがって、対称暗号(速度が速い)と非対称暗号(鍵の配布が容易)の利点を組み合わせて情報安全伝送を実現すること、つまり非対称暗号を使用して対称鍵を伝送し、その後の通信は直接対称鍵を使用して暗号化する方法が、現在考えられる最良の方法です。

PS:鍵交換方式については、上記の非対称暗号に基づく方法の他に、実際には鍵を交換するための 2 つの方法があります。

  1. 専用の鍵交換アルゴリズム、例えば DH (E)、ECDH (E);

  2. 事前デプロイ方式、例えば PSK、SRP。


要するに、対称暗号の性能が良いため、大量かつ頻繁な通信データは対称鍵を使用して暗号化されます。上記で交換する鍵もすべて対称鍵です。

❗️暗号化手段があれば、情報伝達の機密性も保証されます。これで、私たちは最初の要求を達成しました~

次に、情報の完全性をどのように保証するかを見ていきましょう。それにはデジタル署名が必要です。

デジタル署名#

❗️要求 2 を実現する:完全性

🥣目標問題 2 に答える:情報セキュリティにはなぜデジタル署名が必要ですか?

🥣目標問題 3 に答える:なぜ署名前にハッシュ操作を行う必要があるのですか?


デジタル署名は、伝送されるデータに添付され、データの改ざんを防ぐために使用されます。次に、それがどのように機能するかを説明します。

まず、その基盤となるコアは、先ほど言及したハッシュアルゴリズム非対称暗号アルゴリズムです。

生成(署名)#

image

署名は通信中の送信者によって生成されます。送信者はまず、伝送するデータに対してハッシュを行い、データの要約(つまりハッシュ値)を得て、次に秘密鍵を使用して要約を計算し、その結果としてデータの署名を生成します。

検証(署名の検証)#

image

受信者はデータとその署名を受け取った後、次の処理を行います:

  • データ:送信者と同じハッシュアルゴリズムを使用して、実際のデータの要約 A を計算します;

  • 署名:送信者が使用した秘密鍵に対応する公開鍵を使用して、署名を計算し、元のデータの要約 B を得ます。

要約 A と要約 B を比較し、一致すれば実際のデータは改ざんされていないことが確認されます。そうでなければ、データに問題があることになります(これはハッシュを使用してデータの完全性を検証することに似ていますが、署名の安全レベルは明らかに高く、秘密鍵が保護しているためです)。


image

署名の生成と検証のプロセスはこのようになります。さて、目標問題 2 と 3 に対する答えは得られましたか?

🥣2: 情報セキュリティにはなぜデジタル署名が必要ですか?

簡単に言えば、情報の完全性を保証するためです(❗️これで要求 2 も達成しました)。

🥣3: なぜ署名前にハッシュ操作を行う必要があるのですか?

2 つの質問を考えてみてください:

  1. ハッシュは何のためにありますか?任意のデータを固定長のコードに変換します。

  2. 署名の本質は非対称暗号ですが、何か欠点がありますか?性能が低いです。

したがって、大きなデータに対して署名を行うよりも、小さなデータに対して署名を行った方が速いです。偶然にも、ハッシュアルゴリズムはデータの唯一性を大いに保証することができます。


しかし、1)署名速度を向上させることは答えの一部に過ぎません。なぜなら、署名前にハッシュ操作を行わなければ、2)安全上のリスクが生じるからです:

  1. 再順序化。伝送するメッセージが非常に長く、非対称暗号アルゴリズムがサポートする最大長を超える場合、システムはメッセージを分割して署名し、複数の署名を得る必要があります。受信者は各署名を個別に検証します。しかし、こうなると、分割後のメッセージの順序が改ざんされないことを保証できません。なぜなら、各署名は依然として検証を通過できるからです(誰かが考えるかもしれませんが、複数の署名を統合してから再度署名を生成することも可能ですが、そうすると非対称暗号アルゴリズムがサポートする最大長の制限を受ける可能性があります)。

  2. メッセージの偽造。ハッカーが任意の署名を捕獲し、平文メッセージを逆算し、以後それを組み立てて使用することができます(なぜなら、逆算に使用される公開鍵は非常に簡単に取得できるからです)。

参考:Why hash the message before signing it with RSA?——StackExchange


これで、私たちは 1 つの要求❗️と 1 つの目標問題🥣だけが残りました~


さて、1 つの質問を考えてみましょう:

Q: 受信者はどのように署名検証に使用する公開鍵を取得するのでしょうか?

次に進みましょう。

デジタル証明書#

💡要求 3 を実現する:認証性

🥣目標問題 4 に答える:情報セキュリティにはなぜデジタル証明書が必要ですか?

デジタル証明書を理解する前に、「受信者はどのように署名検証に使用する公開鍵を取得するのか?」という質問について考えてみましょう。私たちはすぐに、送信者がデータと署名を送信する際に、公開鍵を添付すればすべてが整うのではないかと思うかもしれません~以下の図のように:

image

しかし、これにより新たな問題Qが生じます:受信者はどのようにして公開鍵が他の誰かによって悪意を持って置き換えられていないことを確認できるのでしょうか?つまり、公開鍵の身元が不明です。

🎉灯灯灯~灯~~、今こそデジタル証明書の出番です。

構成内容#

まず、デジタル証明書の構成内容を見てみましょう。これは、公開鍵、公開鍵の身元情報、およびそれらの署名(別の署名)で構成されています。

image

注意:

  1. 公開鍵データを暗号化するために使用される秘密鍵は、別の公私鍵の組み合わせであり、権威ある認証機関(Certificate Authority、CA)によって発行されます。私たちは CA の秘密鍵を持っていません。

  2. CA を理解するには?私たちの身分証明書は政府によって発行されていることを思い出してください。

公開鍵がデジタル証明書に包装されて伝達される#

image

現在、送信する内容が少し変更されました:公開鍵→証明書。

つまり、元々送信されるデータ + 署名 +公開鍵が、データ + 署名 +証明書に変わったのです。


証明書には、受信者が署名 A を検証するために必要な公開鍵と、公開鍵の身元情報および署名 B が含まれています:

  1. 身元情報の存在は、公開鍵の身元不明のリスクを排除します(❗️これで要求 3 も達成しました:認証性、🥣目標問題 4 に答えました:情報セキュリティにはなぜデジタル証明書が必要ですか?);

  2. 署名 B は、公開鍵とその身元情報の完全性を保証します。


しかし、署名 B があるため、公開鍵を取得する際には、まず証明書内の署名 B を検証する必要があります:

image

署名 B を検証するために使用される公開鍵も CA によって発行され、CA 証明書に存在します。

(ここで、証明書の構成内容を再確認できます:公開鍵 + 公開鍵の身元情報 + それらの署名。)


♻️ここで、あなたはまた疑問を持つかもしれませんQ:証明書は改ざんされる可能性がありますか?

  1. 直接変更?まず、証明書の内容(公開鍵および身元情報)を直接変更することはできません。なぜなら、ハッカーは CA の秘密鍵を持っていないため、証明書の内容を再署名することはできません。

  2. 直接置き換え?これも不可能です。なぜなら、証明書には送信者の身元情報が含まれているからです。例えば、私がブラウザ(受信者)を通じてあるウェブサイト(送信者)にアクセスする場合、ウェブサイトの証明書にはドメイン情報が含まれており、ブラウザは自分がリクエストしたドメインと証明書内のドメイン情報を直接比較することで、証明書が置き換えられていないかを確認できます~

参考:HTTPS の暗号化原理を徹底的に理解する—— 知乎

拡張(規範、体系、標準):暗号学の基礎(二)デジタル証明書、鍵の基礎知識——Blog


これで、私たちの 3 つの要求❗️と 4 つの目標問題🥣がすべて達成されました!少しリラックスしましょう~


最後に、追加の内容について話しましょう:

  • 情報セキュリティに関連する技術(SSL/TLS、SSH、iOS 署名)

  • 一部の実践(OpenSSL、WireShark)。

関連技術 + いくつかの実践(追加)#

長すぎるため、別の記事に移動してください:(追加)情報セキュリティ | インターネット時代、どのように信頼を築くか?

もとの目標に戻る#

もし今回の共有であなたが少しでも覚えておくべきことがあるとすれば🤏、以下の質問の答えを理解しようとしてください!

  1. 情報伝達には一般的に対称暗号 + 非対称暗号が使用されるのはなぜですか?非対称暗号だけを使用することはできないのですか?

  2. なぜデジタル署名が必要ですか?

  3. なぜ署名前にハッシュ操作を行う必要があるのですか?

  4. なぜデジタル証明書が必要ですか?

さらに、あなたはこの記事の最終目標を達成しましたか?あなたとの交流を楽しみにしています~

最終目標:暗号学に関連する問題に直面したとき、もはや恐れや混乱を感じないこと。


——暴風赤色警報⛈️の日、思い切って休暇を取った日に、深圳で書かれました

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。