- ホーム >
- 基礎知識 >
- インターネットの仕組み >
電子メールのセキュリティ(1) ~ 公開鍵暗号方式とは ~
電子メールは、平文のテキストデータしかやり取りできない仕組みでした。その仕組みのもとで電子メールが広く普及するにつれ、当然ながら様々な問題発生してきました。
SMTPポート(25番ポート)をねらった迷惑メールの大量発生や、平文での通信によるセキュリティ上の問題などです。現在でも迷惑メールが大量に届いたり、Amazonや宅配業者など本当の企業のメールなのか悩んだ経験があると思います。
こうした問題に対応するために、様々な技術が開発され、電子メールの基本的な仕組みを変えずに、なんとか暗号化通信ができるようになりましたが、
電子メールは機密性の低い通信の仕組みがベースになっている
ということを認識しておく必要があります。
インターネット上には、まだまだ古い世代の機器や通信規格が存在しており、安全な通信が行えている保証はないのです。
誰かになりすましたり、スパムメールの「踏み台」にされる危険性やウィルス感染の危険性など、電子メールだけではなく、それによる損害や社会的影響まで意識しておかなければならない時代になっています。
事実、コンピュータウイルス感染のほとんど場合が電子メールからと言われています。
ウェブシステム抜きにはビジネスが成り立たなくなった現在、電子メールの存在はかなり大きいものです。機密情報や個人情報を含むデータのやり取りには、何らかの対策が必要になります。
そのために、
・POP before SMTP(ポップ ビフォア エスエムティーピー)
・SMTP-AUTH(エスエムティーピー オウス)
・APOP(エー ポップ)
・POP over SSL(ポップ オーバー エスエスエル)
・SMTP over SSL(エスエムティーピー オーバー エスエスエル)
・STARTTLS(スタート ティーエルエス)
といった技術が開発されてきました。しかし、どれも完全ではありません。
なぜなら、
安全が保障されるのは自分のメーラーとサーバの間の経路だけ
だからです。
サーバ間の通信(自分のSMTPサーバから相手のSMTPサーバ間の通信)や、相手のPOPサーバからメーラーまでの間の通信がどうなっているのか、送信者側から知り得る術はありません。
つまり、一度インターネットに出てしまうと、そこから先の通信を保障することはできないということです。
基本的に、サーバの間の通信は専用回線(バックボーン)で行われており、第三者が侵入することはできませんが、平文での通信に危険性がないわけではありません。また送信相手がPOP over SSLを使用していなかったら、相手のPOPサーバからメーラーまでのルートは平文で通信されてしまいます。
上図は、AさんからBさんへのメール送信を例にした図です。やはり、送信相手へ届くまでのすべてのルートで暗号化しなければ、本当に安全が保たれていると言えないのです。
しかし、インターネット上のすべての経路で暗号化通信を確立することは不可能です。
ではどうすれば安全に相手と通信できるのかというと、
メールそのもの(ヘッダとボディ)を暗号化してそのまま相手に送信するしか方法はない
のです。
SSLやSTARTTLSによる暗号化は、サーバとメーラーの間の経路を暗号化し、そこを流れるデータがすべて暗号化されます。そのため、そこを通るメールも結果として暗号化されるイメージです。(通信経路の暗号化)
しかし、対応していないサーバを通過する場合には、すべて平文で通過することになります。そこで、メールそのものを暗号化してしまえば、どこを通過しようが暗号文のままです。(メールの暗号化)
暗号化通信が確立した経路を使って送受信するのではなく暗号文を送る
ということです。
こうすることで、途中で中身を見られても、暗号文を見られるだけで内容を知られてしまう恐れはなくなります。
こうした暗号化技術に「S/MIME(エスマイム)」や「PGP(ピージーピー)」と呼ばれる仕組みがあります。例えるなら、郵便はがきの内容を暗号文にして送るようなものです。誰に見られても内容を知られる心配はありません。(S/MIMEについては別項、PGPについては本項で後述します)
ただし、どちらを暗号化するにしても、暗号化技術としては同じ仕組みが使われています。
まずは、暗号化の基礎をしっかりおさえておきましょう。
そもそも、暗号とはどのうようなものでしょうか?
暗号とは、
当事者間でのみ理解できるように取り決めた特殊な記号や文字またはその手順や方式
のことを言います。
つまり、メッセージを当事者以外に解読されないように、一見すると意味不明な文字列や数字に置き換えること、またはその手順や方法、すなわち解読のための「鍵」を決めておくことを言います。
メールに限らずデータを暗号化する時、または暗号文を復号化する時(暗号をもとのデータに戻すことを「復号化」という)には「鍵」が必要になります。
例えば、紀元前に使われたという有名な「シーザー暗号」では、「YAMANJO」という文字が「BDPDQMR」になります。
この場合、暗号の「鍵」は「アルファベット3文字」ということになります。暗号化する時は「3文字」後ろにずらし、復号化する時は「3文字」前にずらします。
この例は、とてもシンプルで実際の暗号通信でこれほど単純な鍵は使われませんが、暗号の「鍵」を知らない人が「BDPDQMR」を見ただけでは「YAMANJO」と解読するのは難しいかもしれません。
こうして暗号化したメッセージをやり取りすることを暗号通信(暗号化通信)と言います。
実際の暗号通信では、次の4つを防止することが必要になります。
盗聴・改ざん・なりすまし・否認
です。
「盗聴」は第三者に内容を知られてしまうこと、「改ざん」は内容を書き換えられてしまうこと、「なりすまし」は自分や相手または企業などになりすまして通信されてしまうこと、「否認」は通信自体を否認されること、つまり、メール等を送っていない、受け取っていないとシラを切られることです。
この4つすべてを防止しなければ安全とは言えません。暗号通信はこの4つを防止する技術になります。
じつは暗号の歴史は古く、特に先の世界大戦において、暗号通信は国家の威信をかけた技術であり、各国が他国の暗号の解読や自国の暗号の強化に力を注ぎました。暗号が敵国に解読されたら、すなわち国家の存亡にもかかわるからです。
ドイツの「エニグマ」や日本の「パープル」といった暗号は耳にしたことがあるのではないでしょうか。高度な暗号は、非常に高度な数式によって作成されています。
近年になると、1970年代からアメリカの「DES暗号」が標準暗号として長年使用されてきました。
DES(ディーイーエス)は「Data Encryption Standard」の略です。「標準規格」を示す名称で、2000年に新しい暗号化技術が開発されるまで、長年インターネットにおける標準の暗号通信規格でした。
その仕組みを理解するには高度な数学の知識が必要になりますが、簡単に言うと、平文のデータを64ビットのブロックに分割(ブロック長という)し、各ブロックを56ビットの鍵(鍵長という)で暗号化します。
56ビットの鍵長ということは「2の56乗=72057594037927936」となり、約7京通りというとてつもなく膨大な組み合わせの暗号を組むことができます。
しかし、この時代はコンピュータの処理能力が飛躍的に向上し、56ビットの鍵長では、コンピュータの処理能力で解読できるようになってきたのです。コンピュータですべてのパターンを調べる「総当たり方式」で、1999年に22時間で鍵を特定されてしまいました。
そこで、DES暗号も鍵長を増やしたり改良を加えていきましたが、脆弱性が発見されるなど、コンピュータが進化した現在では、安全とは言えなくなったのです。
そして登場したのが、
AES暗号
です。
AES(エーイーエス)は「Advanced Encryption Standard」の略で、2001年に承認された「次世代の標準規格」です。
AESの仕組みも理解するには高度な知識になりますが、ブロック長が128ビット、鍵長は128、192、256ビットの中から選んで利用することができるという特徴があります。
最低でも鍵長が128ビットであるため、22時間で解読したコンピュータと同じ処理能力だとすると約20年かかる計算になります。256ビットともなると解読になんと何兆年もかかると言われています。そのため、現在でも標準の暗号として利用されています。
ただし、これはあくまでも解読不可能な暗号ということではなく、現実的な時間内で解読することができないという意味です。「絶対大丈夫」とは言えないものの「まず大丈夫」といったところです。
大戦中から近年の暗号戦争の裏側について、私の好きな「ゴルゴ13」で「最終暗号」という大変おもしろい1話があるので、興味のある方は読んでみてください。
さて、いよいよここからが本題です。
シーザーやエニグマ、DES、AESなど、ここまで学習してきた暗号通信は、
共通鍵暗号方式
と呼ばれる方式が採用されています。
共通鍵暗号方式とは、その名のとおり、
暗号化と復号化に共通の鍵を使う
方式です。
つまり、送信者と受信者が暗号化と復号化に同じ鍵を使います。例えば、シーザー暗号なら暗号化にも復号化にも「3文字」という同じ鍵でなければなりません。
そのため、共通の「鍵」は絶対に他人に漏れないように大切に管理しなければなりません。鍵が漏れたり、または解読方法が発見されたらその暗号は終わりです。
もっとも、それは当然のことです。同じ鍵を使うということは暗号の常識であり、そもそも、暗号とはそういうものという概念で作られてきました。
しかし、共通鍵暗号方式にはある矛盾が存在しているのです。
それは、事前に何らかの方法で送信相手に「鍵」を渡しておかなければならないということです。インターネット上でどうやって安全に「鍵」を渡すのでしょうか?
つまり、本来の暗号通信と同じ問題に直面するのです。直接会って渡すのなら、そもそも暗号化する必要はありません。
安全に鍵を渡す方法があればその方法で情報自体を渡せば良い
からです。
また、多数の相手と通信を行う場合は、相手の数だけ鍵を用意しないといけません。暗号の強度を維持するために、定期的に鍵を変更する場合もあります。
この難問を解決することができず、共通鍵暗号方式はインターネットの主役ではなくなりました。
ただし、AES暗号は共通の鍵を使うために処理速度が速く、フラッシュメモリ等のファイルの暗号化やWi-Fiの暗号通信など「鍵」を他人に渡す必要がない場面の暗号技術として広く利用されており、後述しますがインターネット上の通信でも現役で利用されています。
あくまで裏方に回ったということです。では、代わりにどんな暗号方式が主役になったのかというと、1976年にある画期的な方法が発表されたことにはじまります。
鍵は共通のものであり、鍵は絶対に秘密にしなくてはならないという概念を打ち破る方法でした。千年にも及ぶ呪縛から解放されたとでも言うべき、新しい暗号法が開発されたのです。
それが、
公開鍵暗号方式
と呼ばれる方式です。
公開鍵暗号方式は、
暗号化と復号化に異なる鍵を使う
というものです。
その名のとおり、これまでとは逆に鍵を公開してしまうという大胆な発想で、暗号化と復号化には異なる「鍵のペア」が使われる暗号方式になります。
ただ、アイデアは画期的なものでしたが、その理論を実現できる数式(アルゴリズムという)によって公開鍵暗号方式が確立されたのは翌年の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ビットとなっています。共通鍵暗号方式と比べてビットが大きいのは、素数を扱うため、2進数ではなく10進数での表現が必要になるからです。1,024ビットの鍵長で309桁、2,048ビットで617桁の数字を扱うことができます。
しかし、この桁数でまず大丈夫だろうと思われていましたが、さらなるコンピュータの進化や総当たり方式でなく効率的な手法の開発などにより、現時点では1,024ビットの鍵長では安全でないとされ、2,048ビットが推奨されています。
ただし、鍵長のビット数を増やせば暗号は強化されますが、その反面、復号化にコンピュータの高い性能を必要とするようになります。そのため、いたずらにビット数を増やしても意味がありません。時代によって(コンピュータの進化に合わせて)推奨される鍵長が変わってきているので、今後もそうした流れは続いていきます。
また、共通鍵暗号方式と同様に公開鍵暗号方式にはRSA以外の暗号も存在します。先述のとおり、暗号化の理論や数式のことを「アルゴリズム」と言います。大枠の暗号方式の中にそれを実現する複数のアルゴリズムがあり、公開鍵暗号方式のアルゴリズムがRSAという言い方をします。
そのため、AESもRSAも暗号の名称で言われる場合もあれば、それぞれの暗号化方式のアルゴリズムとして示される場合もあります。アルゴリズムという用語の使い方については、これからも度々出てくるので覚えておきましょう。
では、公開鍵暗号方式の仕組みに戻ります。
このように片側からは簡単に求められ、もう片側からは非常に困難な計算が必要になる性質を利用したのが公開鍵暗号方式です。この簡単な側の鍵と、困難な側の鍵のペアを作成するのです。
では、誰が鍵を作成するのかというと、
鍵のペアを作成するのは受信者
の方になります。
受信者(通信の受け手側)が鍵を作成し、送信者に渡します。
この時に作成する2つの鍵は、
秘密鍵と公開鍵
と呼ばれます。
「秘密鍵」は自分(受信者)が大切に保管しておき、「公開鍵」は文字どおり公開するので、実際には送信者だけでなく誰でも手に入れることができます。
ここで大切なのは、
自分が持つ秘密鍵だけを漏れないように大切に保管すればよい
ということです。
公開鍵の方は誰の手に渡ってもかまいません。
なぜなら、
片方の鍵で暗号化したものはペアの鍵でしか復号化できない
というのが公開鍵暗号方式の特徴だからです。
つまり、公開鍵で暗号化したものは対となるペアの秘密鍵でしか復号化できず、逆に、秘密鍵で暗号化したものはペアの公開鍵でしか復号化できません。
例えば「受信者」をBさん、「送信者」をAさんとすると、Bさんが秘密鍵と公開鍵の2つの鍵を作成します。
秘密鍵はBさんだけが大切に保管し、公開鍵は一般に公開します。Aさんは、公開されているBさんの公開鍵で平文を暗号化してBさんに送信します。
そしてBさんは、自分だけが保管している秘密鍵で暗号文を復号化するのです。
この方法なら、共通鍵のように鍵を渡すことに苦心する心配はありません。公開鍵は誰が手にしても問題ないからです。
また逆に、Bさんが自分の秘密鍵で平文を暗号化してAさんに送信することも可能です。
この場合は、公開鍵で復号化できるので誰にでも復号化できてしまいますが、このことは相手を特定する「認証」に利用されています。(詳しくは次項で解説します)
このように公開鍵暗号方式は、安全で強固な暗号ですが、処理が複雑なために速度が遅いというデメリットがあります。その点、共通鍵暗号方式は、どちらも同じ鍵を使うので処理が高速です。
そのためインターネットでは、公開鍵暗号方式と共通鍵暗号方式を組み合わせた、
ハイブリッド暗号方式
が広く使われています。ハイブリッド暗号方式は、
共通鍵そのものを公開鍵暗号方式で相手に送る
という方法です。
共通鍵だけを公開鍵暗号方式で送り、メッセージの暗号化は共通鍵暗号方式で行うのです。
まず、送信者側が共通鍵を作成し、メッセージを自分の共通鍵で暗号化します。次に、相手の公開鍵でその共通鍵を暗号化します。そして、共通鍵で暗号化したメッセージと暗号化した共通鍵をセットで相手に送るのです。
受信者は、自分の秘密鍵で共通鍵を復号化し、その共通鍵で暗号化されたメッセージを復号化します。こうして送信者が任意に作成した共通鍵で安全にハイブリッド式の暗号通信を行うことができます。
原則として、この共通鍵は1回の通信でのみ使用します。このルールによって他人に再利用されることを防ぎます。1回の通信(セッションという)でのみ使われるため、この共通鍵は「セッション鍵」とも呼ばれています。
こうしたハイブリッド暗号方式の代表者が「SSL/TLS」です。SSL/TLSとは で詳しく学習しますが、SSL/TLSによって暗号化された「HTTPS」通信によって、インターネット上でクレジットカード決済などを安全に行うことができるようになりました。(HTTPについては、HTTPとは を参照してください)
HTTP通信の場合は、電子メールのようにサーバを越えた受信相手がいないので、ウェブサーバとブラウザ間の通信が暗号化されていれば他に平文のデータが流れる心配はありません。現在では、ほとんどのサイトがHTTPSに移行されており、アドレスが「http://」から「https://」に変更されています。
また、メールそのものを暗号化する場合も、このハイブリッド暗号方式が使われています。
何度も用語だけは登場してきた「S/MIME」や「PGP」と呼ばれるソフトウェアがその代表です。
S/MIMEを理解するには次項以降の知識が必要なので別項で学習しますが、PGPはここで理解することができます。
PGPは「Pretty Good Privacy」の略で、電子メールやファイルを暗号化することができるソフトウェアの名称です。
そのため、送信者と受信者ともにPGPソフトをインストールしておく必要があります。そして、そのソフトで受信者が公開鍵を作成し、送信者に渡します。送信者は自身が作成した共通鍵でメールを暗号化し、受け取った公開鍵で共通鍵を暗号化してセットで送信します。そして、受信者は自分の秘密鍵で共通鍵を復号化し、メール本文を復号化する仕組みです。
ただし、秘密鍵を利用者の責任で管理する必要があること、次項以降で学習しますが、認証局という公的な「鍵」を保証する機関と連携しないため、双方の信用のもとに通信を行う必要があること、通信する相手の数だけ鍵を管理する必要がること、ただ単純にメール送受信のやり取りが煩雑になる等のデメリットが多くあり、なかなかPGPは普及しませんでした。
その後、PGPを標準化したOpenPGPが登場しましたが、やはり双方がソフトウェアをインストールする必要があるなど、手間がかかることがネックとなり、それほど普及していません。これはS/MIMEにも言える問題となっています。
更新履歴
- 2008年11月24日
- ページを公開。
- 2009年5月21日
- ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
- 2018年1月30日
- ページをSSL化によりHTTPSに対応。
- 2023年2月27日
- 内容修正。
参考文献・ウェブサイト
当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。
- 情報セキュリティ入門:ITpro
- http://itpro.nikkeibp.co.jp/article/COLUMN/20060214/229302/?ST=security
- 電子証明書とPKI入門
- http://www.verisign.co.jp/basic/pki/index.html
- 暗号方式の公開~コンピュータとDES暗号~
- https://www.hummingheads.co.jp/reports/series/ser01/110915.html
- RSA暗号について
- http://www.comm.tcu.ac.jp/~math/hnakai/infomath/rsa.html
- RSAの終わりの始まり - 暗号移行再び
- https://qiita.com/lemiyachi/items/c20a18b172c6f192a262
- 電子メールの暗号化について
- https://apec.aichi-c.ed.jp/kenkyu/network/kounailan/2018/angou/index.htm
- PGPの仕組み
- https://bb.watch.impress.co.jp/cda/bbword/8558.html
- 管理人のつぶやき
- Twitterのフォローお願いします!