Day 25: 暗号化の入門 - 暗号化の知識

2024/11/22に公開

はじめに

インターネット上で安全にデータをやり取りできるのは、「暗号化」のおかげです。これまで学んだ通信プロトコルを使ってユーザー同士が意図的に通信できたとしても、暗号化がなければ第三者にその通信を傍受されたり、不正に利用されたりするリスクが高まります。暗号化の技術があるおかげで、データのやり取りに伴うセキュリティリスクを大幅に軽減することが可能になっています。

個人的に暗号化は一見難しそうに感じる分野なのですが、仕組みを少しずつ理解すれば、その重要性と使いどころが見えてくるはずです。入門するためにこの投稿では、まず暗号化の根幹となりそうな部分を押さえていきます。

  • 基本的な用語理解(暗号化・ハッシュ化)
  • 暗号化の種類
  • 暗号化の重要性
  • プレーンなデータを暗号化する流れ
  • 暗号化と数学の関係
  • 暗号化とハッシュ化の観察

暗号化(Encryption)とは?

暗号化とは、データをそのままでは読めない形に変換する技術です。これにより、悪意のある第三者がデータを傍受しても内容を理解できないようにします。

  • 平文(Plaintext): 暗号化されていないそのままのデータ(例:HelloWorld
  • 暗号文(Ciphertext): 暗号化されたデータ(例:Xk32@fA9#

例えば、平文を暗号文に変換して通信することで、盗み見されても解読が難しい状態にします。この変換には、暗号化アルゴリズム(例:AESRSAなど)という一定の規則が使われます。これらのアルゴリズムはデータを保護する強力な仕組みです。

また、暗号文を元の平文に戻す作業は「復号化(Decryption)」と呼ばれます。復号化を行うには、送信者と受信者が共有する鍵(Key) が必要です。鍵は暗号化の中心的な役割を果たし、正しい鍵を持っている場合にのみ暗号文を平文に戻すことができます。

暗号化には大きく分けて以下の2種類があります(後の項でまた解説します):

  • 共通鍵暗号: 同じ鍵を使って暗号化と復号化を行います。
  • 公開鍵暗号: 暗号化に公開鍵、復号化に秘密鍵という異なる鍵を使用します。

一見複雑に思える暗号化ですが、鍵とアルゴリズムをおさえる事で仕組みを少しずつ理解していくことできます。


ハッシュ化(Hashing)とは?

ハッシュ化とは、データを特定のアルゴリズムを使って固定長のハッシュ値に変換する技術です。暗号化と異なり、ハッシュ化は一方向の変換であり、元のデータに戻す(復号化)ことはできません。

  • 入力データ(平文): HelloWorld
  • ハッシュ値(SHA256と呼ばれるハッシュ関数で変換):
    872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4

ハッシュ化は、元のデータに戻すことができないので「元のデータを知る必要がない」場合に安全で適切です。
具体的な用途としては以下です。

  1. パスワード管理

    • サービスのデータベースにパスワードを保存する際、平文のままデータベースに保存するのは危険です。代わりにハッシュ化された値を保存することで、データ漏洩時のリスクを軽減します。
    • 実際のサービスログイン時には、入力したパスワードをハッシュ化し、保存されたハッシュ値と比較する事で認証を行います。
  2. データの整合性チェック

    • ファイルを送信したり保存する際、改ざんや破損が発生していないかを確認するためにハッシュ値を使います。
    • 例:ファイルのダウンロード後に提供されたハッシュ値と計算したハッシュ値を比較して、一致すれば改ざんなしと判断できます。
  3. デジタル署名

    • メッセージや電子文書をハッシュ化し、署名を付加することで、送信元の正当性や改ざんの有無を証明します。

ハッシュ化は、暗号化と混同されやすいものですが用途に応じて使い分ける必要があります。
以下はその違いを示す表です:

項目 ハッシュ化 暗号化
目的 データの整合性チェックや改ざん検知 データを安全に送受信すること
一方向性 元に戻せない 鍵を使えば元に戻せる
鍵の必要性 不要 必要(暗号化と復号化に鍵を使用)
用途 パスワード管理、改ざん検知 通信データの保護(例:HTTPS、SSH)

暗号化の種類

暗号化には主に2つの種類があり、それぞれの特徴があります。


1. 共通鍵暗号化(Symmetric-key Encryption)

送信者と受信者が同じ鍵を使って暗号化と復号化を行う方式です。

  • 特徴:
    • データを送信する前に、鍵を安全に共有する方法を考える必要があります。
    • 処理が高速なため、大量のデータを扱う場合に適しています。
    • : AES(Advanced Encryption Standard)

イメージ:
1つの金庫を共有する場面を想像してください。その金庫を開ける鍵を、両者が事前に持つ必要があります。ただし、その鍵を他人(泥棒やストーカー)に盗まれないよう、渡す方法に工夫が必要です。


2. 公開鍵暗号化(Asymmetric Encryption)

送信者と受信者が異なる鍵を使う方式です。

  • 鍵の種類と仕組み:

    • 公開鍵: 誰でも使用可能な鍵で、データの暗号化に使います。
    • 秘密鍵: 受信者だけが持つ鍵で、暗号化されたデータを復号化します。
  • 特徴:

    • 鍵を事前に共有する必要がないため、安全に通信を始められます。
    • 共通鍵暗号化より処理速度は遅いですが、非常に高い安全性を持っています。
    • : RSA(Rivest-Shamir-Adleman)

イメージ:
郵便BOXを想像してください。誰でもそのBOXに手紙を投函(暗号化)できますが、中身を取り出す(復号化)には受信者だけが持つ鍵が必要です。公開鍵は郵便BOXの投入口、秘密鍵は鍵付きの開閉口のようなものです。


3. ハイブリッド暗号化(Hybrid Encryption)

実は現代はこのハイブリッド暗号化が主流となっていますが、使用しているのは共通鍵暗号化と公開鍵暗号化の技術です。
共通鍵暗号化と公開鍵暗号化を組み合わせいいとこ取りをした暗号化と言えます。この暗号化は、トランスポート層で用いられるTLS(Transport Layer Security)でも採用されています。

  • 仕組み:

    1. 公開鍵暗号化を利用して、安全に共通鍵を交換します。
    2. その後のデータ通信では、処理が高速な共通鍵暗号化を使用します。
  • 利点:

    • 公開鍵暗号化の安全性を利用し、鍵共有のリスクを低減。
    • 共通鍵暗号化の高速性を活かし、大量データの効率的な暗号化を実現。

実例:
HTTPS通信(TLSを使用)では、最初に公開鍵暗号化で共通鍵を交換し、その後のデータ通信に共通鍵暗号化(AESなど)が使われています。これにより、安全かつ効率的な暗号化通信が可能になります。


プレーンなデータを暗号化する流れ

ここで一旦、暗号化の基本的なプロセスを整理してみます。


1. 暗号化するデータ(平文)を用意

最初に、暗号化する対象となるデータ(平文)を用意します。これは、メール本文、パスワード、機密情報など、あらゆる形式のデータが該当します。

  • :
    平文: HelloWorld

2. 暗号化アルゴリズムを選択

次に、データを暗号化するためのアルゴリズムを決定します。アルゴリズムは、データを変換するためのルールや手順を定義します。

  • 共通鍵暗号化(対称暗号): AES(高速で大量データに適する)
  • 公開鍵暗号化(非対称暗号): RSA(安全な鍵交換に適する)

3. 鍵を生成または取得

暗号化の鍵を用意します。この鍵がないと、データの復号化ができません。

  • 共通鍵暗号化:

    • 送信者と受信者が事前に共有した同じ鍵を使用します。
    • : 123456789abcdef
  • 公開鍵暗号化:

    • 暗号化には受信者の公開鍵を使用し、復号化には受信者だけが持つ秘密鍵を使用します。

4. 暗号化の実行

平文と鍵をアルゴリズムに入力し、暗号化を実行します。これにより、読解不能な暗号文が生成されます。

  • :
    • 平文: HelloWorld
    • 鍵: 123456789abcdef
    • アルゴリズム: AES
    • 暗号文: Xk32@fA9#

5. 暗号文を送信

生成された暗号文を相手に送信します。この暗号文は正しい鍵がなければ解読できないため、盗聴されても安全です。


6. 復号化して平文を取得

受信者は暗号文を復号化し、元の平文を再現します。この作業では、正しい鍵とアルゴリズムが必要です。

  • 共通鍵暗号化: 送信者と同じ鍵を使用。
  • 公開鍵暗号化: 受信者が自分の秘密鍵を使用。

この流れを押さえておくと、暗号化がどのようにデータの安全性を守るか理解しやすくなります。また、アルゴリズムや鍵の役割がセキュリティの要であることがわかります。第三者にデータが傍受され、かつアルゴリズムや鍵がわかっている場合、簡単に復号化されてしまいます。


暗号化と数学の関係

暗号化技術は、高度な数学を基盤に構築されています。暗号化アルゴリズムは、複雑な数学的理論や計算を駆使して設計されており、これによってデータの安全性が確保され、第三者による解読が極めて困難になります。その強度は、使用されるアルゴリズムの難解さに依存し、解読には膨大な計算を必要とするように設計されています。

例えば、RSA暗号では、2048ビットの鍵を解読するために最先端のスーパーコンピュータでも何千年もの計算が必要とされています。
少し極端な例かもしれませんが、高度な数学が用いられたアルゴリズムは、とても一般的なコンピュータでは処理しきれないことがわかります。

一方で量子コンピュータの登場が暗号化技術に新たな課題を突きつけています。この次世代コンピュータは、現在の暗号化アルゴリズムの基盤である数学的難問(素因数分解や離散対数問題)を効率的に解く可能性があり、既存の暗号技術に対するリスクが高まっています。

このように暗号化は単なるデータ保護技術ではなく、数学的な難問を利用した非常に洗練された仕組みです。数学を基盤とするこれらのアルゴリズムにより、データの安全性が確保されている一方で、新しい技術の登場による課題にも対応する必要があります。アルゴリズムを掘り下げていくことで、暗号化と数学の関係性や課題について深く知ることができ、知識を深めることができます。数学が好きな人はぜひ掘り下げてみてください。


暗号化とハッシュ化の観察

暗号化がどのように動作しているのかを体験してみましょう。Wiresharkを使って、HTTPS通信や暗号化プロトコルの動作を観察できます。
Wiresharkでのパケットキャプチャ方法は、Day 20: Wireshark入門 - ネットワーク解析ツールの基礎
などで確認できます。

  1. HTTPS通信で暗号化の観察:

    • WebブラウザでHTTPS対応サイト(例:https://www.google.com)にアクセス。
    • WiresharkでSSL/TLS通信のパケットを観察してみる。
  2. ツールでハッシュ化の観察:

    • オンラインハッシュツール(例:https://passwordsgenerator.net/sha256-hash-generator/)で、自分の名前をSHA256に変換。
    • 複数回変換し、入力が同じなら結果が同じになることを確認。

小テスト

Q1: 暗号化の目的はどれですか?

a) データの整合性チェック
b) データを安全に送受信すること
c) パスワードをデータベースに保存すること
d) 暗号化されたデータを元に戻すこと


Q2: 共通鍵暗号化の特徴として正しくないものはどれですか?

a) 暗号化と復号化に同じ鍵を使用する
b) 鍵を安全に共有する必要がある
c) 処理速度が遅いため、大量データには不向き
d) AESがその代表的な例


Q3: ハイブリッド暗号化で公開鍵暗号化が使用されるタイミングはいつですか?

a) データの暗号化時
b) 共通鍵の交換時
c) データの復号化時
d) ハッシュ値の生成時


Q4: ハッシュ化に関する正しい説明はどれですか?

a) ハッシュ値は鍵を使って元に戻せる
b) ハッシュ化は暗号化の一種である
c) 入力データが異なる場合でもハッシュ値は同じになる
d) ハッシュ化は一方向で元に戻すことができない


Q5: 公開鍵暗号化の安全性を支える要素はどれですか?

a) 鍵が頻繁に更新されるため
b) 公開鍵と秘密鍵がペアであり、一方だけでは復号できない仕組み
c) 鍵の長さが短く、使いやすいため
d) 暗号化に一方向のハッシュ関数を使用しているため


解答

  1. b) データを安全に送受信すること

    • 暗号化は通信の安全性を高め、第三者による盗聴や改ざんを防ぎます。
  2. c) 処理速度が遅いため、大量データには不向き

    • 共通鍵暗号化は処理速度が速く、大量データの暗号化に適しています。
  3. b) 共通鍵の交換時

    • 公開鍵暗号化は、共通鍵を安全に交換するために使用され、その後の通信では共通鍵暗号化が使われます。
  4. d) ハッシュ化は一方向で元に戻すことができない

    • ハッシュ化は一方向変換であり、元のデータに戻すことはできません。
  5. b) 公開鍵と秘密鍵がペアであり、一方だけでは復号できない仕組み

    • 公開鍵暗号化の安全性は、公開鍵で暗号化したデータを秘密鍵なしで復号できないという仕組みに基づいています。

まとめ

今回の投稿では、暗号化の基本や仕組み、ハッシュ化との違い、そして数学的との関係など入門的な部分を意識して学びました。
次回の投稿では、さらに暗号化やハッシュについて掘り下げていきます。

Discussion