暗号とは? 共通鍵と公開鍵のしくみをやさしく
暗号とは、決まった手順と秘密の「鍵」を使って、データを鍵のない人には読めない形に変える技術です。手順は公開し、鍵だけを秘密にするのが今の暗号の基本です。同じ鍵で閉じて開ける「共通鍵暗号」と、閉じる鍵と開ける鍵が別の「公開鍵暗号」があり、実際には両方を組み合わせて使います。
この記事でわかること
- 平文・暗号文・鍵の意味と、手順を公開しても安全な理由
- 共通鍵暗号(AES)と公開鍵暗号(RSA暗号など)の違いと、組み合わせて使う理由
- デジタル署名とハッシュが、暗号化とどう違うか
- スマホやメッセージアプリで、暗号がどこを守っているか
前提知識: 特にありません。「HTTPSとは?」「パスワードはなぜ破られる?」と合わせて読むと、つながりがよくわかります。
身近なところでは
スマホのロックを解除するとき、メッセージアプリで写真を送るとき、ネットで買い物をするとき。どの場面でも、裏では暗号が働いています。
では、暗号はどうやって中身を隠しているのでしょうか。「暗号の手順は秘密にしたほうが安全」と思うかもしれませんが、実は逆です。
暗号化とは: 鍵がなければ読めない形に変える
暗号化とは、データを決まった手順で変換して、意味の読めない形にすることです。変換する前の、誰でも読めるデータを「平文(ひらぶん)」と呼びます。例えば「あした10時に駅で」というメッセージが平文です。
変換には、手順のほかに「鍵」を使います。鍵は手順に入れる秘密の値で、今の暗号ではとても長い数です。同じ平文でも、鍵が違えばまったく別の結果になります。こうしてできた読めないデータを「暗号文」と呼びます。
暗号文を受け取った人は、正しい鍵を使って平文に戻します。これを「復号」と呼びます。鍵を持たない人には、暗号文はでたらめな文字の並びにしか見えません。
約2000年前の暗号: シーザー暗号
古い例を1つ見てみましょう。古代ローマのユリウス・カエサル(英語読みでシーザー)は、文字をずらして手紙を書きました。AをDに、BをEに、というように、3文字後ろの文字に置きかえる方法です。2世紀の初めに、ローマの歴史家スエトニウスがそう書き残しています。
この方法を「シーザー暗号」と呼びます。ここでは、ずらす文字の数が鍵にあたります。鍵が3なら、「HELLO」は「KHOOR」になります。受け取った人は、同じ数だけ前に戻せば読めます。
シーザー暗号は、今では簡単に破れます。英語のアルファベットは26文字なので、意味のあるずらし方は1〜25の25通りしかありません。全部を試せば、どれか1つで意味の通る文が出てきます。
このように、鍵の候補を片っ端から試す方法を「総当たり攻撃」と呼びます。候補が少ないと、すぐに破られます。だから今の暗号は、鍵の候補をとてつもなく多くしてあります。
手順は公開し、鍵だけを秘密にする
暗号の変換の手順を「暗号方式」(アルゴリズム)と呼びます。シーザー暗号なら「文字をずらす」が方式で、「3」が鍵です。では、方式と鍵のどちらを秘密にすべきでしょうか。
答えは「鍵だけ」です。1883年、フランスで教えていたオランダ生まれの言語学者ケルクホフスが、軍用の暗号の条件を論文にまとめました。その1つが「方式は秘密でなくてよく、敵の手に渡っても困らないこと」です。この考え方は「ケルクホフスの原理」と呼ばれ、今の暗号づくりの基本になっています。
理由の1つは、機器やソフトは大量に配られるので、分解して調べれば方式はいずれ漏れることです。鍵なら、漏れても取りかえれば済みます。さらに方式を公開すれば、世界中の専門家が弱点を探してくれます。長く調べられても破られない方式なら、信頼できるわけです。
共通鍵暗号: 同じ鍵で閉じて、同じ鍵で開ける
シーザー暗号のように、暗号化と復号に同じ鍵を使う方式を共通鍵暗号と呼びます。送る人と受け取る人が、同じ鍵を持っておく必要があります。計算が軽いので、動画のような大きなデータも速く暗号化できます。
今の代表はAESです。米国の国立標準技術研究所(NIST)が世界から候補を募り、公開の場で3年かけて比べました。2000年にベルギーの研究者2人の方式を選び、2001年に標準にしました。
AESの鍵の長さは、128・192・256ビットから選べます。ビットとは、0か1かを表す1けたのことです。128ビットの鍵は、0と1を128個並べたものです。並べ方は2を128回掛けた数だけあり、約3.4×1038通り(39けたの数)になります。
仮に、1秒に100京回(1の後ろに0が18個)も鍵を試せる機械があるとします。それでも、全部の鍵を試すには約11兆年かかります。宇宙が始まってからの約138億年の、およそ780倍です。平均すると半分で当たりますが、それでも宇宙の年齢の数百倍です。
鍵をどうやって渡すか
共通鍵暗号には、大きな悩みがあります。暗号で話す前に、相手と同じ鍵を持っておかなければなりません。鍵をネットでそのまま送れば、途中で盗み見られます。会って手渡せば安全ですが、初めて使うネットの店と、事前に会うことはできません。
この悩みを「鍵配送問題」と呼びます。相手が増えるほど、問題は大きくなります。100人の誰とでも別々に秘密の話をするなら、2人の組ごとに鍵が要ります。鍵は100×99÷2で4,950個です。
公開鍵暗号: 閉じる鍵と開ける鍵を分ける
鍵配送問題を解いたのが、公開鍵暗号です。対になった2つの鍵を使い、閉じる(暗号化する)鍵と開ける(復号する)鍵を分けます。この鍵の対は、受け取る人が自分で作ります。
2つのうち一方は、誰に見せてもよい「公開鍵」です。ネットで公開してもかまいません。もう一方は、本人だけが持つ「秘密鍵」です。公開鍵から秘密鍵を割り出すことは、今のコンピュータでは現実的な時間でできないように作られています。
使い方は次のとおりです。Bさんに秘密のメッセージを送りたい人は、Bさんの公開鍵で暗号化します。その暗号文を開けられるのは、秘密鍵を持つBさんだけです。事前に秘密を共有しなくてよいので、初対面の相手とも使えます。
この考え方を最初に公に発表したのは、米国のディフィーとヘルマンです。1976年の論文で、秘密を共有していない2人が、通信だけで同じ鍵を作る方法を示しました。この方法をディフィー・ヘルマン鍵交換と呼び、今のHTTPSでも中心的な役割を果たしています。
翌1977年には、リベスト、シャミア、エーデルマンの3人がRSA暗号を考えました。名前は3人の頭文字です。大きな数を素数の掛け算に分ける(素因数分解する)のがとても難しいことを、守りの土台にしています。
今は、同じ強さをより短い鍵で実現できる楕円曲線暗号も広く使われています。なお英国の政府機関GCHQでは、同じような方式が1970年代前半に考え出され、1997年まで秘密にされていました。
デジタル署名: 鍵の役割を入れかえる
鍵の対は、役割を入れかえても使えます。Bさんが秘密鍵を使って作ったしるしは、Bさんの公開鍵で確かめられます。秘密鍵はBさんしか持たないので、確かめられたしるしは「Bさんが作った」証拠になります。このしるしをデジタル署名と呼びます。
署名は、文書の中身と結びついています。文書が1文字でも書きかえられると、確かめたときに合わなくなります。つまり署名で、「誰が作ったか」と「途中で変えられていないか」の2つがわかります。ソフトの更新ファイルや、HTTPSの証明書に使われています。
注意点が2つあります。1つ目に、署名は中身を隠しません。署名つきの文書は、誰でも読めます。2つ目に、署名を「秘密鍵で暗号化すること」とする説明は、RSA暗号だけに当てはまる単純化です。例えば楕円曲線暗号の署名は、暗号化とは別の計算です。
実際は組み合わせて使う
公開鍵暗号にも弱点があります。計算が重く、大きなデータをまるごと暗号化するのには向きません。一方の共通鍵暗号は速いものの、鍵の渡し方に悩みがありました。
そこで、2つを組み合わせます。最初に公開鍵暗号の技術で、その通信だけに使う共通鍵を相手と共有します。本番のデータは、その共通鍵を使ってAESなどで暗号化します。鍵の受け渡しは公開鍵暗号、データは共通鍵暗号と、得意な仕事を分けるわけです。資格試験では、この組み合わせを「ハイブリッド暗号方式」と呼びます。
教科書では、「共通鍵を相手の公開鍵で暗号化して送る」形がよく説明されます。これは基本形として正しい説明です。ただ、今のHTTPS(TLS 1.3という版)では、鍵そのものは送りません。ディフィー・ヘルマン鍵交換で、その場限りの材料を送り合い、両方で同じ共通鍵を作ります。後で秘密鍵が盗まれても、過去の通信を読まれないようにするためです。くわしくは「HTTPSとは?」で説明しています。
ハッシュは暗号化とどう違う?
暗号とよく一緒に出てくるのが、ハッシュ関数です。どんな長さのデータからも、決まった長さの短い値を計算します。この値をハッシュ値と呼びます。同じデータからは必ず同じ値が出て、1文字違えばまったく別の値になります。
| 暗号化 | ハッシュ | |
|---|---|---|
| 元に戻せるか | 鍵があれば戻せる | 戻せない(一方通行) |
| 鍵 | 使う | ふつうは使わない |
| 主な役目 | 中身を隠す | 同じかどうかを確かめる |
大きな違いは、元に戻せるかどうかです。ハッシュには、元に戻す手順そのものがありません。例えばサービスは、パスワードをハッシュ値にして保存します。くわしくは「パスワードはなぜ破られる?」で説明しています。デジタル署名で、長い文書を短い値にまとめるのにも使われます。
暗号が守っているところ
Webの通信(HTTPS)
「https://」のページでは、ブラウザとサーバの間が暗号化されています。ハイブリッド暗号方式と署名の組み合わせです。
スマホの中のデータ
スマホに保存された写真やメッセージも、端末の中で暗号化されています。iPhoneでは、パスコードを設定するとこの暗号化が自動で有効になると、Appleが説明しています。Androidも、Android 10以降で発売される端末は、ファイルごとの暗号化が必須だとGoogleが定めています。鍵はパスコードと端末の中の秘密の値から作られるので、盗まれたスマホから中身を取り出すのは難しくなります。
メッセージアプリ
通信の区間ごとの暗号化だけでは、運営する会社のサーバで、中身が一度読める形に戻ります。送る人の端末から受け取る人の端末まで、ずっと暗号化したまま届ける方法もあります。これを「エンドツーエンド暗号化」と呼びます。鍵は両端の端末だけが持つので、間でメッセージを中継する会社にも中身は読めません。
WhatsAppは、2016年4月にすべてのメッセージと通話にこの方式を使い始めました。LINEも2016年から、条件を満たすトークの文字のメッセージなどで、この方式を標準にしています。ただし、誰がいつ誰に送ったかという記録までは隠せません。
Wi-Fi
Wi-Fiも、スマホと親機の間の電波を暗号化しています。今の主な方式はWPA2と、2018年に始まったWPA3です(「Wi-Fiのしくみとは?」)。Wi-Fiの暗号が守るのは、電波の区間だけです。
量子コンピュータと、これからの暗号
将来への心配もあります。量子力学の性質を使って計算する「量子コンピュータ」です。1994年、ピーター・ショアは、量子コンピュータなら素因数分解などを速く解ける手順を示しました。大規模な量子コンピュータができれば、RSA暗号や楕円曲線暗号、ディフィー・ヘルマン鍵交換は破られます。
2026年時点では、そこまで大きく正確な装置はまだありません(「量子コンピュータとは?」)。それでも、今集めた暗号文を将来解読される心配があります。そこで、量子コンピュータでも解きにくいと考えられる、新しい公開鍵暗号への切りかえが始まっています。これを耐量子計算機暗号と呼び、NISTは2024年8月に最初の3つの標準を公表しました。
共通鍵暗号への影響は、比べると小さいと考えられています。1996年に示されたグローバーの手順でも、総当たりの手間はおよそ「平方根」までしか減らないからです。鍵の長さが実質半分になるようなもので、AES-128なら2の64乗回ほどの手間です。そのため、鍵を長くすれば(AES-256など)備えられるとされています。
よくある誤解
誤解: 方式を秘密にした暗号のほうが安全
実際は、機器やソフトを調べれば、方式はたいてい突き止められます。DVDのコピー防止に使われた暗号(CSS)は、方式を公開していませんでした。それでも1999年に解析され、鍵が40ビットと短いことなどの弱点を突かれて破られました。公開され、長年調べられてきたAESのような方式のほうが信頼できます。「隠せば見つからない」という日常の感覚を当てはめると、この誤解が生まれます。
誤解: 鍵の長さが2倍なら、強さも2倍
実際は、鍵が1ビット長くなるごとに、候補の数が2倍になります。256ビットの鍵の候補は、128ビットの2倍ではなく、2の128乗倍(約3.4×1038倍)です。一方、方式が違えば、ビット数をそのまま比べることはできません。NISTの指針では、3072ビットのRSA暗号が、128ビットのAESとほぼ同じ強さとされています。
誤解: 暗号化されていれば、何があっても安全
実際は、暗号が守るのは「鍵を持たない人に読まれないこと」です。ウイルスに感染した端末では、復号した後の画面や入力が盗まれます。偽のサイトにパスワードを入力すれば、暗号で守られた通信で、相手にそのまま届きます。鍵をデータと同じ場所に置いたり、公開の設定を誤ったりすれば、暗号は役に立ちません。設定の誤りの怖さは「クラウドとは?」でも説明しています。
数字で見る
| 項目 | 数字 | 時点・出典 |
|---|---|---|
| シーザー暗号の鍵の候補 | 25通り | 英語のアルファベット26文字の場合 |
| DES(1977年の米国の標準)の鍵 | 56ビット(約7.2京通り) | 1999年に22時間15分で鍵が見つかった(EFFなど) |
| AES-128の鍵の候補 | 約3.4×1038通り | 1秒に100京回試しても、全部で約11兆年(筆者の計算) |
| AES-128と同じくらいの強さのRSA暗号 | 3072ビット | NIST SP 800-57(2020年) |
DESは、AESの前に米国の標準だった共通鍵暗号です。1999年には、専用の機械と約10万台のパソコンで鍵が見つかりました。AES-128の鍵の候補は、その約4.7×1021倍です。だから今の攻撃者は、鍵の総当たりより、推測しやすいパスワードや人をだます手口を狙います。
もっと詳しく学ぶ
- 公開鍵暗号の種類を表で比べる: RSA暗号・楕円曲線暗号・耐量子計算機暗号の違い
- AESで長いデータを暗号化する方法: 暗号利用モード、認証付き暗号(暗号化と改ざんの検出を一度に行う方式)
- 過去の通信を守る考え方: 前方秘匿性(後で秘密鍵が漏れても、過去の通信を読まれないようにする性質)
- 鍵をしまう専用の部品: TPM・HSM・セキュアエレメントの違い
- 総当たりにかかる時間を計算で試す: パスワードの総当たり時間の計算ツール