基礎からわかる!パソコン入門・再入門 / Word・Excel・PowerPoint・Outlook

公開鍵暗号方式とは|電子メールの暗号化(1)

  • 著者:YAMANJO
  • 公開日:2008年11月24日
  • 最終更新日:2025年6月24日

暗号化通信とはどういうものか、その基礎と仕組みを理解していきましょう。

経路の暗号化とデータの暗号化

電子メールは、インターネットを構成する要素のひとつとしてWWWよりも前から利用されているサービスです。

そのため、古い設計思想のもとに構築された仕組みであり、7ビットのASCII文字しかやり取りすることができません。現代もそのベースは変わっておらず、当然ながら様々な問題発生してきました。

ASCII問題はBASE64などのエンコード方式によってクリアできましたが、SMTPポート(25番ポート)をねらった迷惑メールの大量発生やマルウェアの被害など、セキュリティ上の問題が深刻になりました。迷惑メールが大量に届いたり、金融機関や宅配業者など本当の企業を装った偽メールを受け取った経験があると思います。

こうした問題に対応するために、様々な技術が開発され、電子メールの基本的な仕組みを変えずに、なんとか暗号化通信ができるようになりましたが、インターネット上には、まだまだ古い世代の機器(レガシーシステム)や通信規格が存在しており、安全な通信が行えている保証はありません。

事実、コンピュータウイルスなどのマルウェア感染の多くが電子メールからと言われています。SNSが普及したとはいえ、企業活動における電子メールの存在はかなり大きいものです。今なお、機密情報や個人情報を含むデータのやり取りに電子メールを利用するケースは少なくありません。

そのため、前項で学習のとおり、POP before SMTP、SMTP-AUTH、SMTPS、POP3S、STARTTLSといった技術が開発されてきました。しかし、どれも完全ではありません。

なぜなら、

安全が保障されるのは自分のメーラーとサーバの間の経路だけ

だからです。

SMTPS、POP3S、STARTTLSは、SSL/TLSという強固な暗号通信を行いますが、ある2地点間を通過するデータを暗号化する仕組みであり、その地点を過ぎると暗号化が解除されるというものです。

具体的には、その地点間の両端に専用の機器やソフトウェアがあり、それを通して暗号化が行われます。そのため、その機器やソフトウェアがない経路では暗号化されないということです。これが「経路の暗号化」になります。

この場合では、自分のメーラーとSMTPサーバ間、SMTPサーバ同士、相手のPOPサーバと相手のメーラー間の経路で暗号化が行われることになります。

しかし、いったんメールを送信してしまうと、SMTPサーバ同士や、相手のPOPサーバからメーラーまでの間の通信がどうなっているのかを送信者側から知る術はありません。つまり、すべての経路で暗号通信が行われているのかどうかは、わからないということです。

下図は、AさんからBさんへのメール送信を例にした図です。

電子メールの危険性イメージ

電子メールの仕組み で学習のとおり、受信したメールのヘッダ情報を見ると、 経由したSMTPサーバの情報が記述されていますが、これらのサーバ同士の通信経路、そしてBさんとBさんのメールサーバ間の通信経路が暗号化に対応しているのかどうかをAさんが確認する術はありません。

基本的にサーバの間の通信は専用回線(バックボーン)で行われており、第三者が侵入することはできません。しかし、STARTTLSに対応していなければ平文で通信されることになります。通常、SMTPSは送信者と送信者のSMTPサーバ間で使用され、SMTPサーバ間の通信には主にSTARTTLSが使用されます。

また、送信相手がPOP3SやSTARTTLSを使用していなかったら、相手のPOPサーバからメーラーまでの経路は平文で通信されてしまいます。

このすべての経路で暗号化さえていなければ、本当に安全が保たれていると言えないのです。しかし、インターネット上ですべての経路を暗号化することは不可能です。

つまり、経路の暗号化には限界があるということです。経路の暗号化の利用方法としては、特定の地点間の通信でのみ使用する場合です。例えば、本社と支社の通信、企業とシステム導入ベンダとの通信などです。

経路の暗号化では、HTTPSやSMTPS、POP3Sのように特定のアプリケーション層のプロトコルによる通信方式を用いない場合は、通過するパケットすべてを暗号化します。そのため、WANの要領で2地点間の通信すべてを暗号化することができます。こうした通信を「VPN(ブイピーエヌ)」と言いますが、詳しくは、VPNとは で学習します。

では、電子メールの場合では、どうすれば安全に相手と通信できるのかというと、

暗号化したメールをそのまま相手に渡すしか方法はない

のです。

つまり、経路の暗号化のように両端の機器やソフトウェアが暗号化と復号化(暗号化を戻すこと)を行うのではなく、送信側が暗号化を施し、そのままの状態で届けて、相手が直に復号化するということです。

これを「データの暗号化」と言います。こうすることで、途中で中身を見られても、暗号文を見られるだけで内容を知られてしまう恐れはなくなります。したがって、どの経路を通っても問題ありません。

例えるなら、郵便はがきの内容を暗号文にして送るようなものです。誰に見られても内容を知られる心配はありません。

ある意味でこれが本来の暗号通信の姿です。しかし、その実現には高いハードルがあり、比較的容易な経路の暗号化が行われているというわけです。

アルゴリズムと鍵

では、そもそも暗号とはどのうようなものかを考えてみましょう。

暗号と言えば、一見すると意味不明な文字列や数字を思い浮かべると思いますが、そのように、当事者間でのみ解読が可能な文字列や数字などに変換することを言います。

少し専門的に言えば、特定の規則に従って、平文(意味のある情報)を第三者に理解されないように変換する技術になります。この特定の規則のことを「アルゴリズム」と言い、アルゴリズムのうち可変可能な値を「」と言います。

例えば、紀元前に使われたという有名な「シーザー暗号」では、「YAMANJO」という文字が「BDPDQMR」に変換されます。

シーザー暗号のイメージ

この場合、暗号化する時は「3文字」後ろにずらし、復号化する時は「3文字」前にずらします。したがって、アルゴリズムは「アルファベットを鍵の分だけシフトする」というルールであり、鍵は「3」ということになります。鍵は可変可能であり「5」でも「7」でもよいことになります。

この例はとてもシンプルで、実際の暗号通信でこれほど単純なアルゴリズムと鍵は使われませんが、知らない人が「BDPDQMR」を見ただけでは「YAMANJO」と解読するのは難しいかもしれません。

現代の暗号通信では、SSL/TLSはアルゴリズムであり、そのうち可変可能な値である「鍵」を当事者間で取り決めて通信を行います。アルゴリズムは知られてもかまいませんが、鍵を知られてしまうと解読されてしまうことになります。

したがって、暗号通信の本質は、鍵をどのように相手と共有して、かつ他人に漏らさないように管理するかということになります。と言うことは、暗号通信を行う相手に鍵を渡す必要があるということです。

そのため、どのように鍵を渡すかという問題が発生します。これがハードルが高いという理由です。鍵をどのように安全かつ他人に漏れないように渡すのかが暗号通信の最重要課題になるわけです。

では、具体的な暗号技術についてです。

暗号の歴史は古く、シーザー暗号は紀元前に使われていました。やがて高度な暗号が誕生していきますが、それには戦争の歴史が大きくかかわっています。

先の世界大戦において、暗号は国家の威信をかけた技術でした。各国が他国の暗号の解読や自国の暗号の強化に力を注いだのです。暗号が敵国に解読されたら、国家の存亡にもかかわるからです。

ドイツの「エニグマ」や日本の「パープル」といった暗号は耳にしたことがあるのではないでしょうか。こうした当時の強固な暗号は、非常に高度な数式によって作成されています。

なぜ数式が利用されるのかと言うと、誰が使っても同じ結果に変換・復元できるからです。つまり、あいまいさがなく機械的な処理によって遠隔地と通信することができます。軍事作戦に利用する暗号であれば、なおさら正確さが重要になります。

また高度な計算式になると、当時の処理技術で「何時間かかる」といった強度を理論的に保証することも可能になります。そのため、各国は数学者を登用して、高度な暗号を作成してきた歴史があるのです。

戦時中は電波などで暗号文がやり取りされていましたが、やがてインターネットで通信が行われるようになり、1970年代からアメリカの「DES暗号」が標準暗号として使用されるようになります。

DES(ディーイーエス)は「Data Encryption Standard」の略で「標準規格」を示す名称です。2000年に新しい暗号化技術が開発されるまで、長年インターネットにおける標準の暗号通信規格でした。

その仕組みを簡単に言うと、平文のデータを64ビットのブロック(ブロック長と言う)に分割し、各ブロックを56ビットの鍵(鍵長と言う)で暗号化します。

56ビットの鍵長ということは「2の56乗=72057594037927936」となり、約7京通りというとてつもなく膨大な組み合わせの暗号を組むことができます。

しかし、この時代はコンピュータの処理能力が飛躍的に向上し、56ビットの鍵長ではコンピュータの処理能力で解読できるようになってしまったのです。コンピュータですべてのパターンを調べる「総当たり方式」で、1999年に22時間で鍵を特定されてしまいました。

そして登場したのが、

AES暗号

です。

AES(エーイーエス)は「Advanced Encryption Standard」の略で、2001年に承認された「次世代の標準規格」です。ブロック長が128ビット、鍵長は128、192、256ビットの中から選んで利用することができるという特徴があります。

最低でも鍵長が128ビットであるため、22時間で解読したコンピュータと同じ処理能力だとすると約20年かかる計算になります。256ビットともなると解読になんと何兆年もかかると言われています。そのため、現在でも標準の暗号として利用されています。

ただし、これはあくまでも解読不可能な暗号ということではなく、現実的な時間内で解読することができないという意味です。「絶対大丈夫」とは言えないものの「まず大丈夫」といったところです。

大戦中から近年の暗号戦争の裏側について、私の好きな「ゴルゴ13」で「最終暗号」という大変おもしろい1話があるので、興味のある方は読んでみてください。

では、暗号通信によって具体的に何を防止する必要があるのかを知っておきましょう。

実際の暗号通信では、次の4つを防止することが必要になります。

盗聴・改ざん・なりすまし・否認

です。

「盗聴」は第三者に内容を知られてしまうこと、「改ざん」は内容を書き換えられてしまうこと、「なりすまし」は自分や相手または企業などになりすまして通信されてしまうこと、「否認」は通信自体を否認されること、つまり、メール等を送っていない、受け取っていないとシラを切られることです。

この4つすべてを防止しなければ安全とは言えません。暗号通信はこの4つを防止する技術になります。

共通鍵暗号方式

いよいよここからが本題です。

シーザーやエニグマ、DES、AESなど、ここまで学習してきた暗号通信は、

暗号化と復号化に共通の鍵を使う方式

になります。

そのため「共通鍵暗号方式」と呼ばれています。

文字どおり、送信者と受信者が暗号化と復号化に同じ鍵を使います。例えば、シーザー暗号なら暗号化にも復号化にも「3文字」という同じ鍵でなければなりません。

共通鍵暗号方式の概念図

そのため、共通の「鍵」は絶対に他人に漏れないように大切に管理しなければなりません。鍵が漏れたり、または解読方法が発見されたらその暗号は終わりです。

とは言え、共通の鍵というのはある意味当然のことです。そもそも暗号とはそういう概念で作られてきました。しかし、共通鍵暗号方式にはあるジレンマが存在しているのです。

それは先述のとおり、何らかの方法で送信相手に鍵を渡さなければならないということです。インターネット上でどうやって安全に鍵を渡すのでしょうか?

つまり、本来の暗号通信と同じ問題に直面するのです。直接会って渡すのなら、そもそも暗号化する必要はありません。

安全に鍵を渡す方法があれば、その方法で情報自体を渡せば良い

からです。

また、多数の相手と通信を行う場合は、相手の数だけ鍵を用意しないといけません。暗号の強度を維持するために、定期的に鍵を変更する場合もあります。

この難問を解決することができず、共通鍵暗号方式はインターネットの主役ではなくなりました。

ただし、AES暗号は共通の鍵を使うために処理速度が速く、フラッシュメモリ等のファイルの暗号化やWi-Fiの暗号通信など「鍵」を他人に渡す必要がない場面の暗号技術として広く利用されています。

また、詳しくは後述しますが、インターネット上の暗号通信でも現役で利用されています。あくまで裏方に回ったということです。

公開鍵暗号方式

では、代わりにどんな暗号方式が主役になったのかというと、1976年にある画期的な方法が発表されたことにはじまります。

鍵は共通のものであり、鍵は絶対に秘密にしなくてはならないという概念を打ち破る方法で、千年にも及ぶ呪縛から解放されたとでも言うべき新しい暗号法が開発されたのです。

それが「公開鍵暗号方式」です。

公開鍵暗号方式は、

暗号化と復号化に異なる鍵を使う

という方式になります。

共通鍵暗号方式では鍵を厳重に管理しておく必要がありましたが、逆に鍵を公開してしまうという大胆な発想で、鍵の受け渡し問題を解決したのです。

まず、公開用の鍵とペアになる2つの鍵を作成します。公開用の鍵は文字どおり公開し、誰でも手に入れることが可能な鍵になります。この鍵を通信相手に入手してもらいます。

これが共通鍵暗号方式であれば、鍵を配布してしまうと誰でも復号化できてしまうことになります。

しかし公開鍵暗号方式では、

片方の鍵で暗号化したものはペアになる鍵でしか復号化できない

という仕組みになっています。

つまり、公開用の鍵で暗号化した暗号文は、公開用の鍵で復号化することはできません。対となるペアの鍵が必要なため、対の鍵を持つ相手しか復号化することができないというわけです。

ただアイデアは画期的なものでしたが、その理論を実現できるアルゴリズムによって公開鍵暗号方式が確立されたのは翌年の1977年のことでした。

その暗号(アルゴリズム)を、

RSA暗号

と言います。

RSA(アールエスエー)は、Rivest氏、Shamir氏、Adleman氏という3名の開発者の頭文字から名付けれました。公開鍵暗号といえばRSA暗号と同義で使われるほど有名な暗号で、現在でも標準的に利用されています。

RSAの仕組みは難解で高度な数学の知識が必要になりますが、簡単に言えば、素数の性質を利用しています。素数の規則性は発見されておらず、素因数分解(素数の掛け算に分解すること)の簡単な方法も発見されていないことから、膨大な桁の数の素因数分解が非常に困難になる仕組みを利用した暗号です。

例えば、素数A×素数Bの積は簡単に求められるのに対し、積ABから素数Aと素数Bを求めるのは非常に困難になります。素因数分解するには地道に2から割っていくしかありません。実際には高速な因数分解アルゴリズムも存在しますが、それでも数百桁の数を短時間で分解するのは現在の技術では非現実的です。

この数字の桁が100桁単位になると、現在のコンピュータでも総当たり方式で何万年、何億年かかると推定されるほど膨大な組み合わせが存在することになります。

RSAでは鍵の長さ(ビット数)を任意に設定できますが、一般的に使われるのは1,024、2,048、3,072、4,096ビットです。共通鍵暗号方式と比べてビットが大きいのは、より大きな桁の素数を扱うため、鍵長が大きくなるからです。1,024ビットの鍵長で309桁、2,048ビットで617桁の数字を扱うことができます。

しかし、この桁数でまず大丈夫だろうと思われていましたが、さらなるコンピュータの進化や総当たり方式でなく効率的な手法の開発などにより、現時点では1,024ビットの鍵長では安全でないとされ、2,048ビットが推奨されています。

鍵長のビット数を増やせば暗号は強化されますが、その反面、復号化にコンピュータの高い性能を必要とするようになります。そのため、いたずらにビット数を増やしてもあまり意味がありません。時代によって(コンピュータの進化に合わせて)推奨される鍵長が変わってきているので、今後もそうした流れは続いていくと思われます。

また、共通鍵暗号方式と同様に公開鍵暗号方式にはRSA以外の暗号も存在します。先述のとおり、暗号化の理論や数式のことをアルゴリズムと言います。大枠の暗号方式の中にそれを実現する複数のアルゴリズムがあり、公開鍵暗号方式のアルゴリズムがRSAという言い方をします。

そのため、AESもRSAも暗号の名称で言われる場合もあれば、それぞれの暗号化方式のアルゴリズムとして示される場合もあります。アルゴリズムという用語の使い方については、これからも度々出てくるので覚えておきましょう。

話を戻すと、RSAように片側からは簡単に求められ、もう片側からは非常に困難な計算が必要になる性質を利用したのが公開鍵暗号方式になります。

暗号化や復号の処理はどちらも難しくないものの、鍵を知らない他人が復号化しようとすると非常に困難になるということです。この性質を利用して、鍵のペアを作成し、片方の鍵で暗号化した暗号文はペアの鍵でしか復号化できない仕組みを実現しています。

では、誰が鍵を作成するのかと言うと、

鍵のペアを作成するのは受信者側

になります。

受信者(通信の受け手側)が鍵を作成して、片方を送信者に渡します。

この時に作成する2つの鍵は、

秘密鍵と公開鍵

と呼ばれます。

秘密鍵は主に復号化に使う鍵で、公開鍵は暗号化に使う鍵になります。復号化はペアとなる鍵でしかできないため、公開鍵を公開しておくことに問題はありません。大切なのは、自分が持つ秘密鍵だけを漏れないように大切に保管すればよいということです。

例えば「受信者」をBさん、「送信者」をAさんとすると、Bさんが秘密鍵と公開鍵の2つの鍵を作成します。

秘密鍵はBさんだけが大切に保管し、公開鍵は一般に公開します。Aさんは、公開されているBさんの公開鍵で平文を暗号化してBさんに送信します。そして、Bさんは自分だけが保管している秘密鍵で暗号文を復号化します。

公開鍵暗号化方式の概念図

この方法なら、共通鍵のように鍵を渡すことに苦心する心配はありません。公開鍵は誰が手にしても問題ないからです。

また逆に、Bさんが自分の秘密鍵で平文を暗号化してAさんに送信することも可能です。

この場合は、公開鍵で復号化できるので誰にでも復号化できてしまいますが、このことは相手を特定する「認証」に利用されています。(詳しくは次項で解説します)

ハイブリッド暗号方式

公開鍵暗号方式によって、鍵を安全に渡すという課題が解決され、安全に暗号通信ができるようになりました。また、RSAなどの画期的なアルゴリズムによって非常に強固な暗号になっています。

しかし、2つの鍵を利用するため、処理が複雑になり速度が遅いというデメリットがあります。その点、共通鍵暗号方式はどちらも同じ鍵を使うので処理が高速です。

そこで、インターネットでは公開鍵暗号方式と共通鍵暗号方式を組み合わせた「ハイブリッド暗号方式」が広く使われています。現在のインターネットでは、このハイブリッド暗号方式が主流(ほとんどの暗号通信がハイブリッド方式)になっています。

ハイブリッド暗号方式は、

共通鍵そのものを公開鍵暗号方式で相手に送る

という方式です。

共通鍵だけを公開鍵暗号方式で送り、その後のメッセージのやり取りは、処理の速い共通鍵暗号方式で行うのです。

ハイブリッド暗号方式の場合は、送信者側が共通鍵を作成します。そして、送信するメッセージを自分の共通鍵で暗号化します。次に、相手の公開鍵で作成した共通鍵を暗号化します。この2つをセットで相手に送るのです。

受信者は、自分の秘密鍵で共通鍵を復号化し、その共通鍵で暗号化されたメッセージを復号化します。こうして送信者が作成した共通鍵で安全にハイブリッド式の暗号通信を行うことができます。

ハイブリッド暗号方式の概念図

原則として、この共通鍵は1回の通信でのみ使用します。このルールによって他人に再利用されることを防ぎます。1回の通信でのみ使われるため「セッション鍵」とも呼ばれています。(セッションについては、TCP/IPとは を参照してください)

こうしたハイブリッド暗号方式の代表格が「SSL/TLS」です。詳しくは、SSL/TLSとは で学習しますが、RSAなどの公開鍵暗号方式を使って共通鍵(セッション鍵)を暗号化して渡し、その後の通信はAESなどの共通鍵暗号方式で通信を行います。

SSL/TLSは多くのアプリケーション層のプロトコルに対応しており、これまで学習してきたHTTPS、SFTP、SMTPS、POP3Sなどのプロトコルは、ハイブリッド方式で経路の暗号化を行っています。

また、電子メールそのものを暗号化する場合(データの暗号化)も、このハイブリッド暗号方式が使われています。「S/MIME」や「PGP」は、電子メールの暗号化においてハイブリッド暗号方式を利用している代表的な仕組みです。

S/MIMEは別項で学習しますが、PGPはここで概要を説明しておきます。PGP(ピージーピー)は「Pretty Good Privacy」の略で、電子メールやファイルを暗号化することができるソフトウェアの名称になります。

そのため、送信者と受信者ともにPGPソフト(PGPを実装したソフトウェア)をインストールしておく必要があります。受信者のPGPソフトが公開鍵を作成し、送信者に渡します。送信者は自身が作成した共通鍵でメールを暗号化し、受け取った公開鍵で共通鍵を暗号化してセットで送信します。そして、受信者は自分の秘密鍵で共通鍵を復号化し、メール本文を復号化する仕組みです。

ただし、秘密鍵を利用者の責任で管理する必要があることや、次項以降で学習しますが、認証局という鍵に「保証」を与える公的な機関と連携しないため、双方の信用のもとに通信を行う必要があること、通信する相手の数だけ鍵を管理する必要があること、ただ単純にメール送受信のやり取りが煩雑になる等の多くのデメリットがあり、なかなかPGPは普及しませんでした。

その後、PGPを標準化したOpenPGPが登場しましたが、やはり手間がかかることがネックとなり、それほど普及していません。これはS/MIMEにも言える問題となっています。

更新履歴

2008年11月24日
ページを公開。
2009年5月21日
ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
2018年1月30日
ページをSSL化によりHTTPSに対応。
2025年6月24日
内容修正。

著者プロフィール

YAMANJO(やまんじょ)

経歴
岡山県出身、1980年生まれ(申年)の♂です。現在、総合病院で電子カルテなどの情報システム担当SEとして勤務。医療情報学が専門ですが、ネットワーク保守からプリンタの紙詰まり、救急車の運転手までこなしています。
医療情報技師、日本DMAT隊員。ITパスポート、シスアドなど、資格もろもろ。
趣味は近所の大衆居酒屋で飲むこと、作曲(ボカロP)、ダイビング。
関連リンク
詳細なプロフィールはこちら
作成したボカロ曲などはYoutubeへ
X(Twitter)
著者YAMANJOのイメージ画像