暗号と認証の深掘り(PKI・TLS・ハッシュ・電子署名)
公開鍵暗号・ハッシュ・電子署名の三点がPKIとTLSを支える。署名は秘密鍵で生成し公開鍵で検証、失効確認はCRL/OCSP、TLS 1.3は(EC)DHEで前方秘匿性を実現——この対応関係を正確に言えることが合格の分水嶺である。
情報セキュリティの基盤となる暗号技術は、共通鍵暗号方式と公開鍵暗号方式に大別される。共通鍵暗号は暗号化と復号に同一の鍵を用いる方式で、代表例はAES(FIPS 197)である。処理が高速である反面、通信相手ごとに鍵を共有する必要があり、n人が相互に通信する場合はn(n-1)/2個の鍵が必要となる鍵配送問題を抱える。公開鍵暗号は暗号化に受信者の公開鍵、復号に受信者の秘密鍵を用いる方式で、RSAや楕円曲線暗号(ECDSA・ECDH)が代表例である。鍵配送問題を解決できるが処理が低速なため、実際の通信では、データ本体を共通鍵暗号で暗号化し、その共通鍵(セッション鍵)を公開鍵暗号や鍵交換アルゴリズムで安全に共有するハイブリッド暗号が広く用いられる。わが国では、デジタル庁・総務省・経済産業省が公表する「電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)」が安全性評価の基準として機能しており、午前ⅡではCRYPTRECの役割を問う出題実績がある。
ハッシュ関数は任意長のメッセージから固定長のハッシュ値(メッセージダイジェスト)を生成する関数であり、SHA-256などのSHA-2ファミリ(FIPS 180-4)やSHA-3(FIPS 202)が現行の標準である。安全なハッシュ関数には三つの性質が要求される。第一に、ハッシュ値から元のメッセージを求めることが困難な原像計算困難性(一方向性)。第二に、あるメッセージと同じハッシュ値をもつ別のメッセージを求めることが困難な第二原像計算困難性。第三に、同一のハッシュ値をもつ異なる二つのメッセージの組を見つけることが困難な衝突発見困難性である。衝突の発見は誕生日攻撃によってハッシュ長の半分程度の強度まで低下するため、十分な出力長の選定が重要となる。MD5とSHA-1は衝突攻撃が現実化して危殆化しており、新規利用は不適切である。またパスワード保存では、ハッシュ化に加えて利用者ごとに異なるソルトの付加と、計算を意図的に繰り返すストレッチングによって、レインボーテーブル攻撃や総当たり攻撃への耐性を高める。
メッセージの完全性検証にはメッセージ認証符号(MAC)とデジタル署名が用いられる。HMAC(RFC 2104)は共通鍵とハッシュ関数を組み合わせたMACであり、改ざん検知と通信相手の認証を実現するが、鍵を送受信者双方が共有するため第三者に対する否認防止は実現できない。これに対しデジタル署名は、送信者がメッセージのハッシュ値を自らの秘密鍵で署名し、受信者が送信者の公開鍵で検証する仕組みである。秘密鍵は署名者しか保持しないため、改ざん検知・署名者の確認に加えて否認防止が可能となる点が最大の相違である。代表的方式にRSA署名、DSA、ECDSAがある。法制度面では、電子署名及び認証業務に関する法律(電子署名法)第3条が、本人による一定の要件を満たす電子署名が行われた電磁的記録について真正な成立の推定を定めている。署名時刻の証明にはタイムスタンプ(時刻認証業務)を併用し、長期署名フォーマットによって検証可能性を維持する。
PKI(公開鍵基盤)は、公開鍵とその所有者の対応を信頼できる第三者機関が保証する仕組みである。認証局(CA)はX.509形式のデジタル証明書を発行し、登録局(RA)は申請者の本人確認・審査を担う。CAの運用方針はCP(証明書ポリシ)およびCPS(認証実施規程)として公開される。証明書の検証では、ルートCAを信頼の起点(トラストアンカ)として中間CAを経由する証明書チェーンをたどる。有効期間内に秘密鍵の漏えい等が生じた証明書は失効させる必要があり、確認手段としてCRL(証明書失効リスト)とOCSP(オンライン証明書状態プロトコル)がある。CRLには有効期間内に失効した証明書のシリアル番号と失効日時が登録される(RFC 5280)。OCSPは個別の証明書の状態を即時に照会できるが、OCSPステープリングでは、サーバ自身が事前に取得したOCSP応答をTLSハンドシェイク中に添付するため、クライアントからの照会が不要となり性能とプライバシが改善する。さらにCT(証明書の透明性、RFC 6962)は、発行された証明書を公開ログに記録して不正発行の検知を可能にする。
TLSは、通信の機密性・完全性と通信相手の認証を提供するセキュリティプロトコルであり、最新版のTLS 1.3(RFC 8446)は午前Ⅱの頻出論点である。鍵交換では、サーバのRSA公開鍵でプリマスタシークレットを暗号化して送る静的RSA鍵交換が廃止され、(EC)DHEによる一時鍵(エフェメラル鍵)を用いる方式に整理された。これにより、将来サーバの秘密鍵が漏えいしても過去の通信を復号できない前方秘匿性(forward secrecy)が実現される。暗号アルゴリズムは、暗号化と完全性検証を一体で行うAEAD(認証付き暗号)であるAES-GCMやChaCha20-Poly1305に限定され、CBCモードや圧縮機能は廃止された。フルハンドシェイクは1-RTTに短縮され、セッション再開時には0-RTTでアプリケーションデータを送信できるが、0-RTTデータにはリプレイ攻撃のリスクが残るため、冪等でない処理への利用は避けるべきとされる。サーバ証明書の検証、HSTSによる常時HTTPS化と併せて体系的に理解しておきたい。
利用者認証では、パスワードそのものを通信路に流さない工夫と認証の多要素化が重要である。チャレンジレスポンス認証は、サーバが毎回異なるチャレンジ(乱数)を送り、クライアントがパスワード等とチャレンジから計算した応答値を返す方式であり、応答値が毎回変わるため盗聴による再送攻撃(リプレイ攻撃)に耐性をもつ。多要素認証は、知識(パスワード)・所持(トークン、スマートフォン)・生体(指紋、顔)のうち二つ以上の異なる要素を組み合わせる方式であり、同一要素を複数回確認しても多要素とはみなされない。FIDO2(WebAuthn/CTAP)は公開鍵暗号に基づくパスワードレス認証の標準であり、秘密鍵が認証器の外に出ず、署名対象にオリジン情報が含まれるためフィッシング耐性が高い。このほか、アクセス元のIPアドレスや端末、時間帯などから普段と異なる振る舞いを検知して追加認証を求めるリスクベース認証も出題実績がある。認証技術は暗号技術の応用そのものであり、本章のPKI・電子署名の理解が直結する。
この章の問題から3問
デジタル署名の検証では、署名者の公開鍵を用いて署名を検証する。
正解 ○(正しい)
正しい。署名の生成は署名者の秘密鍵、検証は署名者の公開鍵で行う。ひっかけは公開鍵暗号による守秘(暗号化=受信者の公開鍵、復号=受信者の秘密鍵)との混同で、「誰の・どちらの鍵か」の入替えが午前Ⅱの定番の誤答パターンである。
100人の利用者が共通鍵暗号方式で相互に暗号通信を行う場合、全体で必要となる鍵の数は幾つか。ここで、利用者の組ごとに異なる鍵を用いるものとする。
- 100
- 200
- 4,950
- 9,900
正解 4,950
共通鍵暗号では通信する2人の組ごとに1個の鍵が必要であり、n人ではn(n-1)/2個となる。100×99÷2=4,950個。公開鍵暗号なら各人が鍵ペア1組(全体で公開鍵・秘密鍵計200個)で済む。9,900はn(n-1)のまま2で割り忘れた誤答。午前試験の頻出計算論点。
ハッシュ関数の衝突発見困難性とは、与えられたハッシュ値をもつメッセージを求めることが計算量的に困難であるという性質をいう。
正解 ×(誤り)
誤り。設問文が説明しているのは原像計算困難性(一方向性)である。衝突発見困難性は「同一のハッシュ値をもつ異なる二つのメッセージの組を見つけることが困難」な性質。三性質(原像計算困難性・第二原像計算困難性・衝突発見困難性)の定義の入替えが本問のひっかけで、SC午前Ⅱで繰り返し問われている。
登録不要 ・ 採点と解説はその場 ・ 進捗は端末に保存
情報処理安全確保支援士(午前対策)の他の章
- ネットワークセキュリティ(FW・IDS/IPS・プロキシ・メールセキュリティ)
- 攻撃手法の詳細(Webアプリ攻撃・DNS攻撃・APT)
- セキュアプログラミングと脆弱性対策
- セキュリティマネジメントと関連制度(CSIRT・JVN・各種ガイドライン)
- 法令・規格(刑法・不正アクセス禁止法・ISO27000系)
本ページの講義ノートと問題は、各試験の出題範囲に基づきAIが作成し、法令・基準に照らして別のAIレンズで敵対的に検証したものです(検証プロセス)。法改正等で誤りが見つかった場合は随時修正します。合格を保証するものではありません。