対称鍵と公開鍵の違い|暗号と認証の仕組みを基礎から理解

  • URLをコピーしました!
目次

はじめに

SSH の公開鍵認証や、ランサムウェアの暗号化の話には、「対称鍵」「公開鍵」「秘密鍵」といった言葉が必ず出てきます。これらは似た言葉が多く、最初はどれが何を指すのか混乱しがちです。しかし、この数語の関係さえ押さえれば、「公開鍵認証はなぜ安全なのか」も「暗号化されると、なぜ自力で戻せないのか」も、すっきり理解できるようになります。

本記事は、暗号の基礎である対称鍵暗号と公開鍵暗号の違いと仕組みを、身近な比喩を使って平易に整理します。前提知識がなくても読めるようにしつつ、SSH やランサムウェアといった実務の話につながる形でまとめます。

この記事でわかること
  • 対称鍵(共通鍵)暗号と公開鍵暗号の違いと仕組み
  • 紛らわしい用語の対応関係(対称=共通、公開鍵暗号=非対称)
  • 公開鍵認証がなぜ安全なのか(SSH の例)
  • 実際には両方を組み合わせるハイブリッド暗号の考え方

結論を先に述べると、対称鍵暗号は「1 本の同じ鍵で施錠と解錠を行う、速い方式」、公開鍵暗号は「ペアになる 2 本の鍵を使い、鍵の受け渡しの問題を解決する方式」です。それぞれに長所と短所があり、実際の通信(SSH や TLS)やランサムウェアでは、両者を組み合わせて使います。

用語を整理する: 対称鍵・公開鍵・秘密鍵

つまずきの多くは、言葉の対応が曖昧なまま読み進めることから生まれます。最初に、用語の対応を固定しておきます。

対称鍵(共通鍵)暗号とは

暗号化と復号に、同じ 1 本の鍵を使う方式です。「対称鍵」と「共通鍵」は、同じものを指す別の呼び名です。代表的なアルゴリズムに AES や ChaCha20 があります。

公開鍵暗号(公開鍵・秘密鍵のペア)とは

ペアになる 2 本の鍵(公開鍵と秘密鍵)を使う方式です。「非対称鍵暗号」とも呼ばれます。公開鍵は他人に配ってよい鍵、秘密鍵は自分だけが厳重に持つ鍵です。代表的なアルゴリズムに RSA や楕円曲線暗号(ed25519 など)があります。

紛らわしい用語の対応(対称=共通、公開鍵暗号=非対称)

呼び名の対応を表にまとめます。ここを押さえると、以降が読みやすくなります。

方式別名使う鍵特徴
対称鍵暗号共通鍵暗号1 本の同じ鍵高速。鍵の受け渡しが課題
公開鍵暗号非対称鍵暗号公開鍵・秘密鍵のペア鍵の受け渡しを解決。処理は重い

「公開鍵」と「秘密鍵」は、公開鍵暗号で使うペアの鍵のことです。対称鍵(共通鍵)とは別物である、という点をまず固定しておきます。

対称鍵暗号の仕組みと課題

まず、シンプルな対称鍵暗号から見ていきます。

1 つの鍵で暗号化・復号(高速)

対称鍵暗号は、同じ鍵で施錠(暗号化)と解錠(復号)を行います。アルゴリズムが比較的軽く高速なため、大量のデータを暗号化する用途に向いています。実際、日常の通信や保存データの暗号化でも、データ本体を暗号化しているのは多くの場合この対称鍵暗号です。

鍵をどう安全に渡すか(鍵配送問題)

対称鍵暗号には、ひとつ根本的な課題があります。送信者と受信者が、同じ鍵をあらかじめ共有していなければならない点です。ところが、その鍵そのものをどうやって相手に安全に渡すのか、という問題が残ります。通信路に乗せて渡せば、盗聴されたときに鍵ごと漏れてしまいます。これを鍵配送問題と呼びます。対称鍵だけでは、まだ安全な経路を持たない相手と、安全に鍵を共有するのが難しいのです。この課題を解決するのが、次に見る公開鍵暗号です。

公開鍵暗号の仕組み

対称鍵暗号の「鍵をどう安全に渡すか」という課題を解決するのが、公開鍵暗号です。発想を、身近な比喩で見ていきます。

公開鍵で暗号化し、秘密鍵で復号する(南京錠の比喩)

公開鍵暗号では、ペアになる 2 本の鍵を使います。ここでは、公開鍵を「南京錠」、秘密鍵を「その南京錠を開けられる唯一の物理鍵」と考えると分かりやすいです。

自分の南京錠(公開鍵)は、いくつでも複製して他人に配って構いません。誰かが自分に秘密のデータを送りたいときは、配っておいた南京錠でデータを施錠(暗号化)して送ってもらいます。施錠された箱は、対になる物理鍵(秘密鍵)でしか開けられません。公開鍵で施錠したものは、対になる秘密鍵でしか復号できない、という非対称性が要点です。

鍵配送問題をどう解決するか

この仕組みのうれしい点は、配るのが「南京錠(公開鍵)」だけで済むことです。公開鍵は、途中で誰かに見られても問題ありません。施錠はできても、開けるための秘密鍵がなければ意味がないからです。そして秘密鍵は、一度もネットワークに流す必要がありません。これによって、対称鍵暗号で問題になった「安全な経路がないと鍵を渡せない」という鍵配送問題が解消されます。

認証への応用(チャレンジ&レスポンス)

公開鍵暗号は、データの暗号化だけでなく、本人確認(認証)にも使えます。仕組みはこうです。サーバーが毎回異なるランダムな問い(チャレンジ)を出し、クライアントは手元の秘密鍵を使って、その問いに対する答え(署名)を返します。サーバーは、登録済みの公開鍵でその答えを検証します。秘密鍵を持つ本人だけが正しく応答でき、しかも秘密鍵そのものは送らずに「持っていること」を証明できる、という点が肝心です。これが、次に見る公開鍵認証の中身です。

公開鍵認証はなぜ安全か(SSH の例)

SSH のログインを例に、パスワード認証と公開鍵認証を比べると、安全性の差が分かりやすくなります。

秘密鍵はネットワークを流れない

パスワード認証では、入力したパスワードそのものが通信を通じてサーバーへ送られます。もし通信が盗聴されていれば、パスワードが漏れるおそれがあります。一方、公開鍵認証では、前述のチャレンジ&レスポンスによって「秘密鍵を持っていること」を証明するだけで、秘密鍵そのものは一切ネットワークを流れません。盗聴されても、鍵本体を盗まれるリスクが極めて低くなります。

総当たりに強い理由

パスワードは、人間が覚えられる程度の短い文字列であることが多く、機械的に試し続けるブルートフォース攻撃(総当たり攻撃)の標的になります。これに対し、公開鍵認証で使う鍵は、非常に長い暗号データです。これを偶然に言い当てることは、現代のコンピューターでは事実上不可能です。だからこそ、公開鍵認証はパスワード認証よりも総当たりに強いといえます。

実際に SSH へ公開鍵認証を設定する手順(サーバー側に公開鍵を置き、秘密鍵を持つ端末だけが接続できるようにする方法)は、関連記事『Windows で SSH 公開鍵認証を設定|パスワードなし接続の手順』で解説しています。SSH サーバー自体の構築は、関連記事『Windows で OpenSSH Server を構築|PowerShell での導入と初期設定』を参照してください。

実際は両方使う: ハイブリッド暗号

ここまでで、対称鍵暗号と公開鍵暗号には、それぞれ長所と短所があることが分かりました。対称鍵は高速ですが鍵の受け渡しが課題で、公開鍵暗号は鍵の受け渡しを解決できますが処理が重く、大量のデータには不向きです。実用では、この両者を組み合わせて、互いの短所を補います。これがハイブリッド暗号です。

なぜ組み合わせるのか(速度と鍵配送の両立)

考え方はシンプルです。データ本体は高速な対称鍵で暗号化し、その対称鍵(セッション鍵)の受け渡しだけを公開鍵暗号で安全に行う、という役割分担です。こうすると、大量データを速く暗号化しつつ、鍵配送問題も解消できます。対称鍵の「速さ」と、公開鍵暗号の「鍵を安全に渡せる」という長所を、同時に得られるわけです。

SSH・TLS での使われ方

SSH や TLS(HTTPS)の通信も、この方式です。接続の最初に公開鍵暗号を使って鍵交換を行い、その通信専用の対称鍵(セッション鍵)を双方で確立します。以降の実際のデータのやり取りは、その対称鍵で高速に暗号化されます。だからこそ、安全さと速さを両立できています。

ランサムウェアでの使われ方(対称鍵を公開鍵で保護)

同じ仕組みは、残念ながら攻撃にも使われます。ランサムウェアの多くは、各ファイルを高速な対称鍵で暗号化し、その対称鍵を攻撃者の公開鍵でさらに暗号化して保護します。元に戻すには、対になる攻撃者の秘密鍵が必要になり、それは攻撃者しか持たないため、被害者は自力で復号できません。詳しくは、関連記事『ランサムウェアの攻撃対象と暗号化の仕組み』で解説しています。

同じ暗号技術が、守り(SSH や TLS の安全な通信)にも、攻め(ランサムウェアの暗号化)にも使われます。仕組みを理解しておくと、両方の話が同じ土台の上で腑に落ちます。

まとめ

対称鍵暗号と公開鍵暗号は、対立する選択肢ではなく、役割の異なる道具です。対称鍵はデータを速く暗号化し、公開鍵暗号は鍵を安全に受け渡しする。両者を組み合わせるハイブリッド暗号が、SSH や TLS、そして(悪用例として)ランサムウェアでも使われています。

  • 対称鍵(共通鍵)は同じ 1 本の鍵で施錠・解錠する高速な方式
  • 対称鍵には鍵をどう渡すかという鍵配送問題がある
  • 公開鍵暗号はペアの鍵で鍵配送問題を解決する
  • 公開鍵認証は秘密鍵を送らずに本人確認でき安全
  • 鍵は非常に長く、総当たり攻撃に強い
  • 実用ではデータを対称鍵、鍵の受け渡しを公開鍵で担う
  • SSH・TLS もランサムウェアも同じ仕組みを使う

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次