公開鍵認証の仕組みについてわかりやすく!考え方や問題の解き方など図解を含めて解説【情報処理技術者-セキュリティ】

今回は情報技術者試験の午後問題でも必須項目となっている情報セキュリティにおいて、核となる部分の認証についてなるべくわかりやすく解説いたします。

公開鍵認証という認証方式が大事になるので、主に公開鍵認証方式について解説いたします。

前回は暗号化について解説いたしましたが、今回の内容を理解するのにこちらの内容も必要になるので、よろしければご参照ください。

スポンサーリンク
目次

認証とは

情報セキュリティにおける認証についてですが、利用者やデータの送信者などが、正当な人であることを確認するための方法を意味します。

よく使われる認証方法としては、ユーザーIDとパスワードを利用する方法があります。

その他には指紋や、声紋、最近よくあるのは虹彩、網膜など様々な認証方法が登場しています。

今回解説するのは電子署名という認証方法になります。

資格対策として非常に重要な項目ですので、なるべくイメージしやすいように解説いたします。

電子署名

日常で用いられる署名といえば、自署やサインの事を指します。

これは自分にしか書けないものを示すことにより、本人であることを証明するためのものです。

電子署名も同様の考え方で、本人にしか作れないものを作り出し、それにデータを付与して送信します。

相手はこの署名を確認して送信者が本人であることを確認し、データの信頼性を担保します。

このことから電子署名には以下の2つの条件が必要になります。

・付与するデータが本人以外には作れないこと

・相手が本人であることを確認できること

公開鍵暗号方式と認証

認証の一つに上記の条件を満たすために公開鍵暗号方式を利用した方法が存在します。

この認証方式は公開鍵認証と呼ばれ、情報技術者試験では公開鍵認証に関する問題が多いので公開鍵認証を中心に解説していきます。

まず、公開鍵暗号方式のおさらいですが、自分の暗号化鍵を公開し、送信者にその鍵、つまり公開鍵を使って暗号化した内容を送ってもらいます。

そして送られてきたデータを自分だけに秘密にしてある復号鍵、つまり秘密鍵を使って復号する暗号化方式でした。

詳しくはこちらからご覧ください。

認証ではこの公開鍵暗号方式の仕組みを使って条件の2つ「付与するデータが本人以外には作れないこと」と「相手が本人であることを確認できること」クリアします。

さて、公開鍵暗号方式では秘密鍵になるのは復号鍵でしたが、認証では暗号鍵秘密鍵になります。

これが、条件①の「付与するデータが本人以外には作れないこと」をクリアします。

秘密鍵は本人にしか知りえない鍵なので、それで暗号化するものはその人にしか作れないデータになるというわけです。

では方法ですが、最初に送信者は予め復号鍵をつまり公開鍵を受信者に知らせておきます

そして送信者は秘密鍵を用いて暗号化した自分の署名を付与して受信者に送ります。

受信者は公開された復号鍵を用いてこの署名の復号を試みます。

これで正しく署名が復号することができれば、送られてきたデータは自分の持っている公開鍵の対になる鍵、つまり秘密鍵によって正しく暗号化されたものだということがわかります。

復号という操作は暗号という操作に対して正しく次いであるものでなければできないので、これがもし、復号できなければ、公開された復号鍵に対してペアとなる秘密鍵でない、つまり本人でないということが判明します。

これが条件②の「相手が本人であることを確認できること」をクリアします。

まとめると送信者は公開鍵を受信者に渡しておきます。

送信者は署名を秘密鍵を用いてデータに付与して受信者に対して送ります。

受信者は公開された鍵を用いて、署名を復号し本人であることを認証します。

これが公開鍵認証方式です。

ダイジェストとハッシュ関数

さて電子署名について使用する署名ですが、これは毎回同じものでよいでしょうか?

暗号化は秘密鍵で行いますので、他人に同じように暗号化される心配はありませんが、暗号化した署名を盗まれてしまった場合、盗んだ署名でなりすまされてしまう可能性があります。

そのため、署名内容は通信の度、違うものを使うことが望ましいです。

この署名内容として、一般的に電子署名を付加するデータから作り出すダイジェストというものを使用します。

ダイジェストとは送信するデータに対してハッシュ関数と呼ばれるハッシュ値を生成する関数を使った操作を施して作成します。

ダイジェスト自体はその名の通り、データより短いデータになります。

ダイジェストの内容は送信するデータによって変わりますので、通信する度にデータの内容が変わることを利用して、ダイジェスト、つまり署名の内容も変わってくるという寸法です。

送信者は、送信するデータ本文からダイジェストを作成し、そこに自分の秘密鍵で暗号化した電子署名を付加して送信します。

受信者は、受け取った内容から、電子署名を取り出して送信者の公開鍵で復号します。これが正しければ、送信者の認証を行うことが可能なのですが、毎回違うのでは困ってしまいます。

しかし、送信者がダイジェストを作る元したデータ本文も一緒に受け取っているので、このデータ本文に対して送信者と同じハッシュ関数を使った操作を施せば、送信者が作成したダイジェストと同じものが得られます。

したがって復号した電子署名(ダイジェスト)と受信者が作成したダイジェストの一致が確認できれば良いことになります。

さらにこのダイジェストを使った電子署名には他にも利点があります。

同じデータからは同じダイジェストが作成されますが、データが少しでも違うと同じダイジェストにはならないのです。

そのため、データがネットワークで送信された最中に改ざんされた場合には、電子署名から復号したダイジェストと、改ざんされたデータから作り出したダイジェストが一致することはありません。

つまり、認証と同時に改ざんの検知も可能となり一石二鳥というわけです。

なお、メッセージデータの改ざんについての確認をメッセージ認証といいます。

公開鍵を用いた認証ですが、もし第三者が本人に成り代わって偽の公開鍵を使用してデータを送信した場合、公開鍵自体が偽物ですので、本人でないのに認証が通ってしまうという事態が発生します。

これを解決するために認証局(CA)という制度が登場しました。

認証局とは公開鍵の登録を受け付ける組織です。

認証局は登録時に書類審査などによって本人確認を行うので、認証局が正当であると証明する公開鍵は偽物の心配がなく、正しく認証することができます。

印鑑登録をイメージすると認証局について理解しやすくなるかなと思います。

認証局(CA)が公開鍵を発行する手順ですが、認証局は公開鍵を渡す前に公開鍵に対して認証局自身が保持している秘密鍵を用いてデジタル署名を作成します。

その後、デジタル署名と公開鍵をセットで受信者に対して送信します。

このデジタル署名と公開鍵のセットは公開鍵証明書と呼ばれ、認証の内容で証明書という単語が出てきたら多くの場合、この公開鍵証明書の事を意味します。

その後受信者は認証局の公開鍵を認証局から取得し、公開鍵を用いて認証局が発行したデジタル署名の正当性を確かめます。

これが問題なければ認証局から受け取った公開鍵は使っても問題ないということがわかります。

鍵がいっぱい出てきてややこしくなってきたのでおさらい!

送信者の署名は送信者の秘密鍵で生成

・署名の復号は送信者の公開鍵を利用

・公開鍵の正当性は認証局が発行した送信者に対する公開鍵証明書を利用

公開鍵証明書に用いる署名は認証局の秘密鍵で作成

・公開鍵証明書の検証は認証局の公開鍵で行う

その他の認証方式

公開鍵認証以外にも認証方式は様々あります。

応用情報でも上記以外の認証方式が午前問題で問われる場合があるのでその他最近の問題で出題された認証方式についてご紹介します。

チャレンジレスポンス認証

チャレンジレスポンス認証とは通信経路上に固定パスワードを直接流さないようにする認証方法です。

送信者はパスワードとチャレンジといわれる乱数を基に生成されたデータをハッシュ関数に通し、レスポンスというデータにして送信します。

受信者は受け取ったチャレンジと手元にある正しい認証情報を組み合わせてハッシュ関数に通し、レスポンスと照らし合わせて整合性が取れれば認証ができるという仕組みです。

乱数を用いるのでワンタイムパスワード的な役割を果たすので、リプレイアタックに耐性を持ちます。

また、パスワードが裸の状態で通信経路を通らないのでパスワードの漏洩防止にもつながります。

リスクベース認証

リスクベース認証は、普段使用している環境とは異なる環境(いつもは家からで、ある時会社の端末からログインしたときなど)からの認証要求があった場合に、通常の認証に追加する形で別の認証を実施する方式です。

銀行のアプリや、Googleアカウントなどでよく見かけますが、別の端末からログインしようとしたときに携帯電話などを使ってワンタイムパスワードなどを入力させられますよね。

それがまさしくリスクベース認証です。

異なる環境から不正アクセスがあった場合に検知し防御することができるよく使われる認証方法です。

例題を解いてみる

それでは最後に、公開鍵認証に関する問題を解いてみましょう。

午後問題ですが、午前問題レベルの内容になっておりますのでちょうどいいかなと思います。

問題. 次の 問題文(a) , (b) , (c) ,(d)に該当するものを選択肢の中から選び記号で答えよ。

販売業を営むX社は,社内業務で利用している電子メールで顧客情報などの個人情報や機密性の高い販売業務に関する情報を安全に取り扱うために,公開鍵基盤を用いた社員認証システム(以下,本システムという)を導入している。本システムを含む社内業務システムの概要を図に示す。

〔本システムの概要〕

1) 本システムは,ディレクトリサーバ,認証局サーバ,社員ごとのPC及びIC社員証カード(以下,ICカードという)から構成される。

2) ディレクトリサーバでは,社員の公開鍵証明書や電子メールアドレスなどの属性情報の登録及び検索が行われる。

3) 本システムでは,プライベート認証局を使用している。

4) ICカードには,社員個人の秘密鍵,公開鍵証明書及びPIN(Personal Identification Number)が格納されている。社員が本システムを利用する際には,自分のICカードをPCのICカードリーダに挿入し,ICカードのパスワードであるPINを入力する。

5) PCには,本システムにおける認証機能や暗号化機能及び電子メールのクライアント機能を提供するソフトウェア(以下,PCサブシステムという)が導入されている。

〔新規発行〕
 システム管理者が,社員AにICカードを新規に発行する場合の処理の流れは,次のとおりである。

1) システム管理者は,認証局サーバで, (a) (b) の対を生成する。

2) 認証局サーバは,(b) と社員名や有効期間などを結び付けた情報に (c) で署名し,(d) を生成する。

3) 認証局サーバは, (d) をディレクトリサーバに登録する。

4) 認証局サーバは,新規のICカードに,生成した (a) (d) 及び事前申請されたPINを記録する。

5) システム管理者は,社員AにICカードを配付する。

(a) , (b) , (c) , (d) に関する選択肢

  • ア.システム管理者の公開鍵
  • イ. システム管理者の公開鍵証明書
  • ウ. システム管理者の秘密鍵
  • エ. 社員Aとシステム管理者の共通鍵
  • オ. 社員Aの公開鍵
  • カ. 社員Aの公開鍵証明書
  • キ. 社員Aの秘密鍵
  • ク. 認証局とシステム管理者の共通鍵
  • ケ. 認証局と社員Aの共通鍵
  • コ. 認証局の公開鍵
  • サ. 認証局の公開鍵証明書
  • シ. 認証局の秘密鍵

応用情報技術者過去問題 平成21年秋期 午後問9

選択肢に関する問題文は〔新規発行〕に記載されており、その前述として〔本システムの概要〕と図が加えられております。

そのため、まずは問題文を読みながら必要な情報を前述の内容から拾い上げるという解き方が効率が良いかなと思います。

それではまず対になるといっている (a) と (b) からです。

1) システム管理者は,認証局サーバで, (a) (b) の対を生成する。」とあります。

対になるといっているので、公開鍵認証で対になるって公開鍵と秘密鍵ぐらいしかないので、それらが入るであろうということが何となくわかるかなと思います。

どちらが入るかを決定するために他の文からヒントを得たいところです。

(4)には「認証局サーバは,新規のICカードに,生成した (a) (d) 及び事前申請されたPINを記録する。」とあります。

ICカードに(a) と (d) とPINを記録するとありますが、この内容は前述の文に記載してあります。

ICカードには,社員個人の秘密鍵,公開鍵証明書及びPIN(Personal Identification Number)が格納されている。

ここをみるとICカードには社員の秘密鍵と公開鍵証明書とPINが格納されているとありますね。

というわけで (a) の内容は [キ.社員Aの秘密鍵] とついでに (d) には公開鍵証明書が入ることがわかりました。

さて、いったん (d) の内容はおいておいて (a) が社員の秘密鍵ということがわかったので、 (b) の内容も埋められますね。

(b) は秘密鍵に対になるので [オ. 社員Aの公開鍵] がはいります。

続いて (d) ですが、公開鍵証明書の内容が入るのですから、選択肢から [イ. システム管理者の公開鍵証明書] , [カ. 社員Aの公開鍵証明書] , [認証局の公開鍵証明書]のいずれかであることがわかります。

さらに情報を絞るために (d) の文を読んでみます。

「認証局サーバは,(b = 社員Aの公開鍵) と社員名や有効期間などを結び付けた情報に (c) で署名し,(d) を生成する。」「認証局サーバは, (d) をディレクトリサーバに登録する。」

です。

ここで、今回の内容を思い出してほしいのですが、公開鍵証明書とは送信者が受信者に対して公開鍵を送る際にその公開鍵が正当なものであることを示すものでした。

つまり、送信者の公開鍵の正当性を示すものは送信者の公開鍵証明書ということになります。

(d) の公開鍵証明書が正当性を示したい公開鍵は社員Aの公開鍵です。

したがって(d) には [カ. 社員Aの公開鍵証明書] が入ります。

因みに (d) ですが、これもヒント文というか答えが前述の文にあり、

「2) ディレクトリサーバでは,社員の公開鍵証明書や電子メールアドレスなどの属性情報の登録及び検索が行われる。」という情報からも読み取ることができます。

最後に (c) ですが、もう一度 (c) が入る文を見てみます。

認証局サーバは,(b = 社員Aの公開鍵) と社員名や有効期間などを結び付けた情報に (c) で署名し,(d) を生成する。

署名するとありますが、認証局サーバが署名するもの、つまりディジタル署名を行う際に使用するものを聞かれています。

ここらへん非常にややこしいのでゆっくりと見直してほしいのですが、認証局が署名をするのに使うものは認証局の秘密鍵でした。

よって、 (c) には [シ. 認証局の秘密鍵] が入ります。

答え

(a) : キ.社員Aの秘密鍵

(b) : オ. 社員Aの公開鍵

(c) : シ. 認証局の秘密鍵

(d) : カ. 社員Aの公開鍵証明書

いかがでしたでしょうか。

公開鍵認証はいろんな人の公開鍵や秘密鍵が出てくるので、公開鍵暗号方式と合わさって大混乱を引き起こしてしまうと思いますが、

登場人物を整理してその人が公開鍵を使用する目的、秘密鍵を用いる場面を理解して覚えるようにしましょう。

今回はここまでです。

お疲れ様でした。

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

この記事を書いた人

本業ではPHPを使ったWEBアプリやJavaを使用した基幹アプリを作成しております。Pythonは個人的に勉強しており、E資格を取ったりしたおかげで、業務でAIの研究とかも任されるようになりました。学習のアウトプットのために本サイトを運営しておりますが、これからPythonを学ぶという人のお役に立てればいいなと思います。わからないことや調査して記事にしてほしいことがございましたらご連絡いただけると幸いです。

コメント

コメントする

目次
閉じる