暗号化とは?共通鍵・公開鍵・ハッシュの違いをわかりやすく解説

Security Basics

「暗号化って結局どれを使えばいいの?」「共通鍵と公開鍵の違いが曖昧なまま、なんとなくHTTPSを設定している」――セキュリティの現場では、暗号化の基礎をあいまいに理解したまま運用しているケースが少なくありません。

暗号化はセキュリティ対策の土台となる技術です。通信の盗聴防止、保存データの保護、本人確認の仕組みまで、あらゆる場面で暗号技術が使われています。しかし「共通鍵暗号」「公開鍵暗号」「ハッシュ関数」の3つを混同していると、適切な技術選定ができず、思わぬ脆弱性を生むことがあります。

この記事では、暗号化の基本概念から共通鍵暗号・公開鍵暗号・ハッシュ関数の違い、そして実務での使い分けまでを現場で使えるレベルで解説します。「なんとなく分かっているけど、人に説明できるほどではない」という方にも理解できるようまとめました。

暗号化とは?共通鍵・公開鍵・ハッシュの違いをわかりやすく解説

暗号化とは?なぜセキュリティの土台なのか

暗号化とは、データを特定のルール(アルゴリズム)に基づいて変換し、鍵を持たない第三者には読めない形にする技術です。暗号化されたデータを「暗号文」、元のデータを「平文(ひらぶん)」と呼びます。

セキュリティの基本原則であるCIA三原則(機密性・完全性・可用性)のうち、暗号化は主に「機密性(Confidentiality)」を守る手段です。ただし、暗号技術を応用することで「完全性(Integrity)」の検証や「認証(Authentication)」にも活用されます。

暗号化が使われている身近な例を見てみましょう。

HTTPS通信: WebブラウザとWebサーバー間の通信を暗号化し、盗聴を防ぐ
メールの暗号化: S/MIMEやPGPでメール本文を暗号化し、第三者に内容を読まれないようにする
ディスク暗号化: ノートPCの紛失・盗難時に、保存データへの不正アクセスを防ぐ
パスワードの保護: データベースにパスワードを平文で保存せず、ハッシュ化して保存する
VPN: 拠点間やリモートアクセスの通信を暗号化トンネルで保護する

暗号化なしのインターネット通信は、はがきのようなものです。途中で誰でも内容を読み取れます。暗号化は、このはがきを封書に変える技術だと考えると分かりやすいでしょう。

暗号化の3つの柱 ― 共通鍵・公開鍵・ハッシュ

暗号技術は大きく3種類に分けられます。それぞれの特徴と使いどころを整理します。

種類 鍵の仕組み 主な用途 代表的なアルゴリズム
共通鍵暗号(対称鍵暗号) 暗号化と復号に同じ鍵を使う 大量データの暗号化 AES, ChaCha20
公開鍵暗号(非対称鍵暗号) 暗号化と復号に異なる鍵を使う 鍵交換、デジタル署名 RSA, ECDSA, Ed25519
ハッシュ関数 鍵を使わない(一方向変換) 改ざん検知、パスワード保存 SHA-256, SHA-3, bcrypt

この3つは競合する技術ではなく、それぞれ得意分野が異なります。実際のシステムでは、これらを組み合わせて使うのが一般的です。HTTPS通信がその典型例で、公開鍵暗号で鍵を交換し、共通鍵暗号でデータを暗号化し、ハッシュ関数でデータの改ざんを検知しています。

暗号化とは?共通鍵・公開鍵・ハッシュの違いをわかりやすく解説 - 解説

共通鍵暗号 ― 速くて効率的、でも鍵の受け渡しが課題

1. 共通鍵暗号の仕組み

共通鍵暗号(対称鍵暗号)は、暗号化と復号に同じ鍵を使う方式です。送信者と受信者が同じ鍵を共有している前提で動作します。

暗号化の処理速度が速く、大量のデータを効率よく暗号化できるのが最大の強みです。ファイルの暗号化、ディスク暗号化、VPNのデータ通信部分など、パフォーマンスが求められる場面で広く使われています。

2. 代表的なアルゴリズム: AES

現在の標準はAES(Advanced Encryption Standard)です。米国政府の標準暗号として採用され、世界中で広く使われています。

# OpenSSLでファイルをAES-256-CBCで暗号化する例 openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc # 復号する例 openssl enc -d -aes-256-cbc -in secret.enc -out secret.txt

AESには128ビット、192ビット、256ビットの3つの鍵長があります。鍵が長いほど安全性は高くなりますが、一般的な用途ではAES-128でも十分な強度があります。特に高い機密性が求められる場合はAES-256を選択してください。

3. 共通鍵暗号の弱点: 鍵配送問題

共通鍵暗号の最大の課題は「鍵をどうやって安全に相手に渡すか」という鍵配送問題です。暗号化に使う鍵を平文で送ってしまっては、鍵が盗聴されて暗号化の意味がなくなります。

この問題を解決するために登場したのが、次に解説する公開鍵暗号です。

公開鍵暗号 ― 鍵配送問題を解決する仕組み

1. 公開鍵暗号の仕組み

公開鍵暗号(非対称鍵暗号)は、「公開鍵」と「秘密鍵」の2つの鍵をペアで使う方式です。公開鍵で暗号化したデータは、対応する秘密鍵でしか復号できません。

公開鍵: 誰にでも公開できる鍵。相手に渡しても安全
秘密鍵: 本人だけが持つ鍵。絶対に他人に渡してはいけない

鍵配送問題が解決される理由はシンプルです。公開鍵は盗聴されても問題ないため、安全でない経路で送っても構いません。攻撃者が公開鍵を入手しても、秘密鍵がなければ暗号文を復号できないからです。

2. デジタル署名への応用

公開鍵暗号の仕組みを逆方向に使うと、デジタル署名になります。秘密鍵で署名を作成し、公開鍵で署名を検証します。

送信者: 秘密鍵でデータに署名する(署名を作成できるのは秘密鍵の所有者だけ)
受信者: 公開鍵で署名を検証する(署名が正しければ、確かにその送信者が作成したデータだと確認できる)

デジタル署名は「データの送信者が本人であること(認証)」と「データが途中で改ざんされていないこと(完全性)」を同時に保証します。ソフトウェアの配布やメールの送信元確認などで広く活用されています。

3. 公開鍵暗号の弱点: 処理速度

公開鍵暗号は共通鍵暗号に比べて処理速度が遅いという弱点があります。大量のデータを直接暗号化するのには向きません。そのため実際のシステムでは、公開鍵暗号は「共通鍵を安全に交換する」ためだけに使い、データ本体の暗号化には共通鍵暗号を使うハイブリッド方式が主流です。

# SSH鍵ペアの生成例(Ed25519) ssh-keygen -t ed25519 -C "your_email@example.com" # 公開鍵の確認 cat ~/.ssh/id_ed25519.pub # 秘密鍵は絶対に外部に公開しない # ~/.ssh/id_ed25519 は厳重に管理する

ハッシュ関数 ― 「元に戻せない」ことが強み

1. ハッシュ関数の仕組み

ハッシュ関数は、任意の長さのデータを固定長の値(ハッシュ値)に変換する一方向関数です。暗号化と異なり、ハッシュ値から元のデータを復元することはできません。この「元に戻せない」という性質が、セキュリティにおいて重要な役割を果たします。

ハッシュ関数の特徴は3つあります。

一方向性: ハッシュ値から元のデータを逆算できない
固定長出力: 入力データの長さに関わらず、出力は常に同じ長さ(SHA-256なら256ビット)
衝突耐性: 異なるデータから同じハッシュ値が生成される確率が極めて低い

2. ハッシュ関数の活用場面

# ファイルのハッシュ値を計算してダウンロードの改ざんを確認 sha256sum downloaded-file.tar.gz # 出力例 # a1b2c3d4e5f6... downloaded-file.tar.gz # 公式サイトに掲載されたハッシュ値と一致すれば改ざんなし

パスワードの保存: パスワードを平文で保存せず、ハッシュ値で保存する。ログイン時は入力値のハッシュ値を比較する
ファイルの改ざん検知: ダウンロードしたファイルのハッシュ値を公式の値と比較し、途中で改ざんされていないか確認する
デジタル署名の効率化: 大きなデータに直接署名するのではなく、ハッシュ値に署名することで処理を高速化する

3. パスワード保存に使うべきハッシュ関数

パスワードの保存には、SHA-256のような汎用ハッシュ関数ではなく、bcryptやArgon2などのパスワード専用ハッシュ関数を使うべきです。パスワード専用ハッシュ関数は、計算に意図的に時間がかかるよう設計されており、攻撃者がブルートフォースで大量のパスワード候補を試すことを困難にします。

ハッシュ関数 用途 パスワード保存への適性
SHA-256 ファイル改ざん検知、デジタル署名 不向き(高速すぎるため総当たりに弱い)
bcrypt パスワードのハッシュ化 適切(計算コストを調整可能)
Argon2 パスワードのハッシュ化 最適(2015年のPassword Hashing Competition優勝)

中小企業でも今日からできること

暗号化は難しそうに見えますが、中小企業の情シス担当者でも今日から確認・改善できるポイントがあります。

対策 内容 コスト
HTTPS化の確認 自社Webサイトが全ページHTTPSになっているか確認する。HTTPのまま放置されているページがないかチェック 無料(Let’s Encrypt)
パスワード保存方式の確認 自社システムがパスワードを平文で保存していないか確認する。MD5やSHA-1は非推奨。bcrypt以上を使用 無料
ノートPCのディスク暗号化 Windows BitLockerまたはmacOS FileVaultを有効化する。紛失・盗難時のデータ漏洩を防止 無料(OS標準機能)
SSH鍵認証への切り替え サーバーへのSSH接続をパスワード認証から鍵認証に変更する。鍵長はEd25519を推奨 無料
VPNの暗号化設定確認 VPN装置やソフトウェアの暗号化方式が最新の推奨設定になっているか確認する。古いプロトコル(PPTP等)は廃止 無料

特に優先度が高いのは「HTTPS化の確認」と「ノートPCのディスク暗号化」です。HTTPSはLet’s Encryptを使えば無料で導入でき、ディスク暗号化はOS標準機能で有効化できます。費用をかけずにセキュリティレベルを大きく引き上げられる対策です。

よくある誤解と注意点

【注意】「暗号化すれば安全」ではない

暗号化はセキュリティ対策の重要な要素ですが、暗号化だけで安全とは言えません。暗号化しても、鍵の管理が甘ければ意味がありません。暗号鍵をソースコード内にハードコードしたり、暗号化されたデータと同じ場所に鍵を保存したりするのは、金庫のドアに鍵をテープで貼り付けているようなものです。暗号化の強度は「鍵の管理」で決まります。

【注意】「MD5やSHA-1はまだ使える」は危険

MD5とSHA-1は、すでに衝突攻撃(異なるデータから同じハッシュ値を生成する攻撃)が現実的に可能であることが実証されています。パスワードのハッシュ化やデジタル署名にMD5やSHA-1を使っているシステムがあれば、SHA-256以上またはbcrypt/Argon2への移行を検討してください。

【注意】「暗号化」と「ハッシュ化」は別物

暗号化は「元に戻せる変換(復号可能)」、ハッシュ化は「元に戻せない変換(一方向)」です。パスワードを「暗号化して保存している」というシステムは、復号可能な状態でパスワードを保持していることを意味します。パスワードは暗号化ではなくハッシュ化して保存するのが正しい設計です。管理者であってもユーザーのパスワードを復元できない状態が、あるべき姿です。

暗号化とは?共通鍵・公開鍵・ハッシュの違いをわかりやすく解説 - まとめ

本記事のまとめ

暗号化はセキュリティの土台となる技術であり、「共通鍵暗号」「公開鍵暗号」「ハッシュ関数」の3つを正しく理解し使い分けることが重要です。実際のシステムではこれらを組み合わせたハイブリッド方式が主流であり、HTTPS通信はその代表例です。

技術 特徴 主な用途
共通鍵暗号(AES等) 高速、同じ鍵で暗号化・復号 データ暗号化、ディスク暗号化、VPN
公開鍵暗号(RSA等) 鍵ペア使用、鍵配送問題を解決 鍵交換、デジタル署名、SSH認証
ハッシュ関数(SHA-256等) 一方向変換、復元不可 改ざん検知、パスワード保存

暗号化の基礎を理解したら、実際の通信を暗号化で保護するVPNの仕組みや、暗号化と組み合わせて使う多要素認証(MFA)についても、本サイトの関連記事で詳しく解説しています。セキュリティ対策は単一の技術ではなく、複数の技術を組み合わせることで真価を発揮します。

Linuxサーバーでの暗号化設定やSSH鍵認証の詳細な手順については、姉妹サイトLinuxMaster.JPで詳しく解説しています。暗号化の基礎知識と実際のサーバー設定を組み合わせることで、より実践的なセキュリティスキルが身につきます。

自社の暗号化対策、本当に正しく運用できていますか?

暗号化の仕組みを正しく理解すれば、通信の保護からパスワード管理まで、適切な技術選定ができるようになります。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。

コメント

タイトルとURLをコピーしました