暗号方式


暗号方式の特徴を覚えよう!

セキュリティの分野では、暗号方式の問題が頻繁に出題されます。特に、共通鍵暗号方式、公開鍵暗号方式、ディジタル署名については、どの鍵で暗号化あるいは復号するのか、それぞれにどのような特徴があるのか、ということが問われます。

共通鍵暗号方式公開鍵暗号方式ディジタル署名について、その仕組みと特徴を押さえておきましょう。

 

インターネットでは暗号化と復号が日常的に行われている!

一般的に「暗号」といえば、スパイ映画に出てくるような秘密文書や、意味のわからない記号の羅列など、「第三者に内容がわからないようにするため、当事者間だけがわかるルールでつくられた文書」というイメージがありますよね。情報セキュリティにおける暗号化も、基本的には同じです。データを一定のルールのもとに書き換え、そのルールを知る人だけが元のデータに戻して内容を読み取れるようにした技術が、暗号化技術です。

 

インターネットのような、不特定多数の人がデータのやり取りを行っているネットワークでは、暗号化が頻繁に行われています。

例えば、インターネットで買い物をするとき、送り先の情報を入力する画面のURLは"https://"で始まっていますね。これは、SSL(Secure Socket Layer、インターネット上でデータを保護するためのプロトコル)によって、入力された情報を暗号化して送信しているからです。また、メールソフトにアカウントを設定するときに、詳細設定画面で「SSLを使用する」という内容の設定をしたことはないでしょうか。これは、使用しているパソコンとプロバイダのメールサーバの間で、暗号化通信を行うためのものです。

これらの暗号化には、共通鍵暗号方式や公開鍵暗号方式が使われています。暗号技術は、身近なところで使用されているんですね。

 

暗号方式の「鍵」とはルールのこと!

では、共通鍵暗号方式と公開鍵暗号方式とはどういうものでしょうか。

簡単に言ってしまえば、共通鍵暗号方式は「通信の当事者間で共通の鍵を持ち、暗号化と復号に同じ鍵を使用する」方式、公開鍵暗号方式は「暗号化と復号で異なる鍵を使用し、公開鍵で暗号化、秘密鍵で復号する」方式です!

 

...さて、頻繁に「鍵」という言葉がでてきます。暗号化や復号に使用していることはわかりますね。でも、この鍵はどうやって使っているの?インターネットで日常的に暗号化は行われているはずなのに、買い物をするときも、メールを送受信するときも、鍵なんて使ったことがない!当然の疑問です。

 

ここで、手書きで暗号文を書いて友人とやり取りする、ということを考えてみましょう。

「PASSPORT」という文字列を「3文字ずらす」というルールで、「SDVVSRUW」と暗号化しました。これを友人に送り、元の「PASSPORT」として読んでもらうためには、どうすればよいでしょうか。「SDVVSRUW」という暗号文と一緒に「アルファベットを3文字右にずらしている。読むときには3文字左にずらしてほしい」というルールを伝えなければなりませんね。このルールが「鍵」です。

 

インターネットやメールのデータ送受信では、このルールを、Webブラウザやメールソフトなどのアプリケーションソフトと、Webサーバやメールサーバなどがそれぞれ把握しており、入力されたデータをルールにしたがって暗号化する→受け取ったデータをルールにしたがって復号する、という作業を行っています。ある会員サイトの入力フォーマットに「山田太郎」と入力した文字列は、ブラウザがルールにしたがって、まったく異なる文字列に変換(暗号化)した後、会員サイトのサーバに送信し、サイト側のサーバでは、受け取った文字列をルールにしたがって、もとの「山田太郎」に変換(復号)し直して処理をします。自分では何もしていないように思っていても、ソフトとサーバが、鍵を使って自動的に暗号化や復号をしているんですね。

 

共通鍵暗号方式は暗号化と復号に同じ鍵を使用する!

では、共通鍵暗号方式と公開鍵暗号方式の違いをみていきましょう。まずは、共通鍵暗号方式です。

共通鍵暗号方式は、暗号化と復号に同じ鍵=共通鍵を使用する暗号方式です。同じルールで、暗号化と復号を行うということですね。アルファベットの文字を「右に3文字ずらして暗号化」したら、受け取った暗号文を「左に3文字ずらして復号」する、というように、一つのルールのもとにやり取りします。

cryptography_1.png

共通鍵暗号方式では、互いに同じ鍵を持って、データを暗号化・復号するため、複数の人とデータをやり取りする場合は、人数分だけの鍵を持つ必要があります。Aさん、Bさんそれぞれと、同じ「3文字ずらす」という鍵でデータのやり取りをしていた場合、Aさんに送る暗号文を、誤ってBさんに送ってしまったら...。Aさん宛ての内容をBさんに知られてしまうことになりますよね。このようなことを避けるためには、Aさんとは「3文字ずらす」鍵、Bさんとは「5文字ずらす」鍵、というように、やり取りする人ごとに鍵を分けておく必要があります。

また、「3文字ずらす」という鍵が第三者に漏えいしてしまったら、Aさんとの通信内容が、第三者に筒抜けになってしまう危険があります。そのため、共通鍵は、漏えいしないように、秘密に保持しなければなりません。

 

このように、共通鍵暗号方式には、

  • 通信の相手先が多くなるにつれて使用する共通鍵の数が増える
  • 共通鍵が漏えいしないように、秘密に保持する必要がある

という特徴があります。

 

公開鍵暗号方式は暗号化と復号で、異なる鍵を使用する!

次に、公開鍵暗号方式です。

公開鍵暗号方式は、暗号化と復号に異なる鍵=公開鍵秘密鍵を使用する暗号方式です。違う鍵でどうやって、鍵を開けることができるの?という疑問がわきますね。ここは、南京錠とそれを開けるための鍵がある、とイメージしてみましょう。一対の南京錠と鍵を作成し、南京錠を相手に渡して、自分は南京錠を開けるための鍵を持つ、というイメージです。

cryptography_2.png

「鍵」とはルールのことですので、実際の公開鍵と秘密鍵は、素数計算と呼ばれる、簡単には解くことのできない数学の計算を行って、一対となるルールを作成しています。公開鍵暗号方式でやり取りを行うときには、公開鍵と秘密鍵をセットで作成し、公開鍵となるルールを通信相手に知らせて暗号化してもらい、自分は秘密鍵となるルールを使用して復号します。

なお、複雑な計算をした鍵を使用するため、共通鍵暗号方式と比較して、暗号化と復号に時間がかかります。

公開鍵暗号方式では、どんなに通信相手が増えても、使用する鍵は、1セットの公開鍵と秘密鍵だけです。複数の人が同じ公開鍵を持ったとしても、秘密鍵がなければ内容を見ることができません。同じ南京錠を持っていても、南京錠同士では鍵を開けられないのと同じですね。自分が持つ秘密鍵だけが漏えいしないようにすればよいので、人数分の鍵を用意する必要のある共通鍵暗号方式よりも、公開鍵暗号方式のほうが鍵の管理がしやすい、といえます。

一方、公開鍵暗号方式では、複数の人が同じ公開鍵を使用していますので、誰が暗号化したものなのか認証できない、というデメリットがあります。仮にCさんが、Bさんと名乗ってデータを送ってきたら、それがBさんからのものではない、と判断することはできません。その点、共通鍵暗号方式では、たとえCさんがBさんと名乗っていたとしても、Bさん用の鍵を使って暗号化していなければ、それはBさんからのものではない、と判断することができます。

 

共通鍵暗号方式と公開鍵暗号方式の特徴をまとめよう!

それでは、共通鍵暗号方式と公開鍵暗号方式について、特徴をまとめてみましょう。

 

共通鍵暗号方式

  • データの送信者、受信者ともに、同じ共通鍵を使って暗号化と復号を行う
  • 通信の相手先が多くなるにつれて使用する共通鍵の数が増える
  • 共通鍵が漏えいしないように、持っているすべての共通鍵を管理する必要がある
  • 公開鍵暗号方式よりも、暗号化と復号の時間が短い

cryptography_3.png

 

公開鍵暗号方式

  • データの受信者が公開鍵と秘密鍵を作成し、通信相手に公開鍵を渡して暗号化してもらい、データの受信者は秘密鍵で復号する
  • 通信の相手先が多くなっても管理する鍵は、自分が持つ秘密鍵だけでよい
  • データ送信者の認証ができない
  • 共通鍵暗号方式よりも、暗号化と復号に時間がかかる

cryptography_4.png 

共通鍵暗号方式と公開鍵暗号方式の問題を解いてみよう!

それでは、実際に出題された問題を解いてみましょう。

平成22年春 問54

Xさんは、Yさんにインターネットを使って電子メールを送ろうとしている。電子メールの内容を秘密にする必要があるので、公開鍵暗号方式を用いて暗号化して送信したい。電子メールの内容を暗号化するのに使用する鍵はどれか。

 

ア Xさんの公開鍵

イ Xさんの秘密鍵

ウ Yさんの公開鍵

エ Yさんの秘密鍵


正解は...


正解 ウ

公開鍵暗号方式の問題です。公開鍵暗号方式では、データの受信者が公開鍵と秘密鍵を作成し、データの送信者に公開鍵を送って、その鍵で暗号化してもらい、データの受信者は秘密鍵で復号するんでしたね。

この問題では、データの送信者はXさん、受信者はYさんです。受信者Yさんが公開鍵と秘密鍵を作成して、送信者Xさんに公開鍵を渡すことになりますので、Xさんが暗号化に使用する鍵は、Yさんの公開鍵です。したがって、ウのYさんの公開鍵が正解です。

 

平成27年秋 問70

暗号方式には共通鍵暗号方式と公開鍵暗号方式がある。共通鍵暗号方式の特徴として、適切なものはどれか。

 

ア 暗号化通信する相手が1人のとき、使用する鍵の数は公開鍵暗号方式よりも多い。

イ 暗号化通信に使用する鍵を、暗号化せずに相手へ送信しても安全である。

ウ 暗号化や復号に要する処理時間は、公開鍵暗号方式よりも短い。

エ 鍵ペアを生成し、一方の鍵で暗号化した暗号文は他方の鍵だけで復号できる。


正解は...


正解 ウ

共通鍵暗号方式の問題です。選択肢の内容を一つひとつ確認していきましょう。


共通鍵暗号方式は、公開鍵暗号方式よりも鍵を管理する数は多い、という特徴があります。でも、それは通信相手が複数いる場合でしたね。なぜなら人数分の鍵を管理しなければならないからです。ここでは、通信相手が1人ですので、共通鍵は1つで済みます。公開鍵暗号方式より多いわけではありませんので、この記述は不適切です。


暗号化通信に使用する鍵、すなわち共通鍵は秘密に保持されなければなりません。共通鍵を安全に送信するためには暗号化が必要ですので、この記述は不適切です。暗号化するための鍵を暗号化して送る?というと無限に暗号化しなければならないようですが、共通鍵の暗号化には、公開鍵暗号方式の仕組みが利用されます。


複雑な計算を行う公開鍵暗号方式と比較して、共通鍵暗号方式は処理時間が短いことが特徴でしたね。この記述は適切です。処理時間が短いというメリットがあるため、公開鍵暗号方式と併用して鍵の管理を工夫しながら、利用されています。


この記述は、公開鍵暗号方式の特徴です。

したがって、ウが正解です。

 

ディジタル署名は公開鍵暗号方式を利用した技術!

公開鍵暗号方式の特徴の一つに、データ送信者の認証ができない、というものがありました。これは、複数の人が同じ公開鍵を使用しているため、送信者が本人かどうか証明することができない、というものでしたね。では、逆に、秘密鍵を持っている人が、自分の秘密鍵を使って暗号化したデータを送信したらどうでしょう。

Yさんが自分の持っている秘密鍵を使って暗号化したデータを、Aさんに送信しました。受け取ったAさんは、Yさんの公開鍵で復号を試みました。復号に成功すれば、それはYさんからのものであると確信できますね。だって、Yさんの公開鍵と対になっている秘密鍵は、Yさんしか持っていないのですから。復号に成功しなければ、それはYさんから送信されたものではない、と判断できます。

この「秘密鍵で暗号化し、公開鍵で復号する」という、公開鍵暗号方式とは逆の鍵の使い方をすることによって実現した技術が、ディジタル署名です。

 

ディジタル署名で、送信者が本人であることと、データの改ざんがないことがわかる

では、ディジタル署名とは、どのようなものなのでしょうか。

ディジタル署名は、ハッシュ関数と呼ばれる計算式を利用してデータを変換し、変換したデータ(これをハッシュ値といいます)を秘密鍵で暗号化したものです。

データを変換してさらに暗号化?公開鍵暗号方式の逆にするだけなら、データをそのまま秘密鍵で暗号化してしまえばいいんじゃない?つい、そんな気がしてしまいますが、そう簡単にはいきません。秘密鍵で暗号化したデータは、公開鍵を持っている人であれば誰でも復号できてしまいます。それでは暗号化通信になりませんね。ディジタル署名は、あくまで送信者を認証するためのものです。データの暗号化そのものではない、ということを、まず押さえておきましょう。

 

さて、ハッシュ関数という言葉がでてきました。ハッシュ関数とは、ある一定の規則にしたがってデータを2進数の値に変換する関数です。例えば、「ABCDE」というデータを「01001」とか、「12345」というデータを「100010」などのように変換してくれるんですね。

※実際のハッシュ値は「01001」や「100010」ではありません。あくまでイメージです。

一度2進数に変換してしまったハッシュ値は、元のデータに戻すことはできません。そのかわり、同じデータからは常に同じ2進数の値を得ることができます。ディジタル署名は、この特性を使っています。

 

ハッシュ値の特性を踏まえ、YさんからAさんへ、ディジタル署名付きのデータを送信するときの手順を追ってみましょう。

①Yさんは作成したデータからハッシュ値を算出

②得られたハッシュ値をYさんの秘密鍵で暗号化して、ディジタル署名を作成

③データにディジタル署名を添付して、Aさんに送信

④Aさんは受け取ったディジタル署名をYさんの公開鍵で復号

→復号が成功すればYさんからの送信であることがわかる

⑤さらにAさんは受け取ったデータからハッシュ値を算出

⑥復号したディジタル署名のハッシュ値とデータのハッシュ値を比較
→同じハッシュ値であれば、データが元のまま改ざんされていないことがわかる

cryptography_5.png

 

ディジタル署名によって、

  • データ送信者が鍵の所有者本人であることがわかる
  • データが改ざんされているかどうかを検知できる

というわけですね。

 

認証局(CA)とディジタル証明書、PKI(公開鍵基盤)も併せて覚えておこう!

ディジタル署名があれば、それが公開鍵の所有者から送られたものであることが認証できることがわかりました。でも、Aさんが持っている公開鍵は本当にYさんのものなの?誰かの「なりすまし」ではないって言える?その通りです。公開鍵がなりすまされていたら、ディジタル署名があったところで、意味がありません。

公開鍵が本当にYさんのものなのか、その正当性を証明するのが、認証局(CA、Certificate Authority)です。Yさんは、自分の公開鍵が正当であるという保証(ディジタル証明書)を認証局から発行してもらい、ディジタル証明書と一緒に公開鍵をAさんに渡します。Aさんはディジタル証明書付きのYさんの公開鍵を使用して、安心して復号できるわけですね。

認証局は、送信者からも受信者からも信頼される第三者機関でなければなりません。認証局として認定されるためには、厳しい審査が必要となります。誰でも認証局として証明書を発行できるわけではないんですね。代表的な認証局としては、シマンテック社やサイバートラスト社があります。URLが"https://"で始まる、暗号化通信をしているページには、認証局のマークが入っていますので、探してみましょう。

cryptography_6.png

また、試験にはPKI(Public Key Infrastructure、公開鍵基盤)という言葉もでてきます。これは、公開鍵暗号方式を安全に利用できる環境をさします。公開鍵暗号方式を安全に保つには、公開鍵の正当性を証明する認証局やディジタル証明書が必要、ということを押さえておきましょう。

 

ディジタル署名の問題を解いてみよう!

それでは、実際に出題された問題を解いてみましょう。

平成22年春 問65

電子商取引におけるディジタル署名で実現できることはどれか。

 

ア 意図しない第三者が機密ファイルにアクセスすることの防止

イ ウイルス感染していないファイルであることの確認

ウ 盗聴による取引内容の漏えいの防止

エ 取引相手の証明と、取引内容が改ざんされていないことの確認


は...


正解 エ

正解がエであることは、すぐにわかりましたね。

なお、ディジタル署名には、ファイルへのアクセスや、ウイルス感染、内容の漏えいまでを防止する機能はありません。

 

平成26年秋 問55

PKI(公開鍵基盤)における電子証明書に関する記述のうち、適切なものはどれか。

 

ア 通信内容の改ざんがあった場合、電子証明書を発行した認証局で検知する。

イ 電子メールに電子証明書を付与した場合、送信者が電子メールの送達記録を認証局に問い合わせることができる。

ウ 電子メールの送信者が公開鍵の所有者であることを、電子証明書を発行した認証局が保証することによって、なりすましを検出可能とする。

エ 認証局から電子証明書の発行を受けた送信者が、電子メールにディジタル署名を付与すると、認証局がその電子メールの控えを保持する。


正解は...


正解 ウ

認証局が発行するディジタル証明書に関する問題です。選択肢の内容を一つひとつ確認していきましょう。


通信内容に改ざんがあったかどうかは、データのハッシュ値とディジタル署名のハッシュ値を比較して確認するんでしたね。認証局は関与しませんので、この記述は不適切です。


認証局は公開鍵の正当性を保証する機関です。メールが届いたかどうかを監視する機関ではありませんので、この記述は不適切です。


認証局の発行するディジタル証明書の付いた公開鍵は、「なりすまし」でないことが保証されていましたね。この記述は適切です。


認証局でメールの控えをとることはありませんので、この記述は不適切です。

したがって、ウが正解です。