非対称暗号を用いたユーザ認証方式について(作成中)


 非対称暗号(公開鍵暗号)を用いたユーザ認証について簡単に解説する.

■ 非対称暗号(公開鍵暗号)

 非対称暗号(公開鍵暗号)とは W.Diffie, M.E. Hellman が1976年に考案したもの[1]で,暗号化の鍵と復号化の鍵が異なる点が最大の特徴である.平文を m,暗号化するためのキーを e,復号化するためのキーを d,暗号化された文章を c とする時,

  c = Ee(m)

で暗号化が行われ,

  m = Dd(c)

で復号化が行われる.e, d はキーのペアと呼ばれ,一方は公開鍵として公開し,一方は秘密キーとして保持しておく.以下,公開キーを p,秘密キーを s で表す.

 非対称暗号の具体的な実装としてはRSA[2]などが存在する.

 暗号理論の詳細については本稿では省略するので参考文献[3]などを参照されたい.

■ 非対称暗号を用いた相手認証

 非対称暗号を用いることで通信相手の正当性を確認することができる.認証される側を利用者,認証する側を検証者と呼ぶことにする.具体的な手順は以下のようになる.

  1. 利用者は,事前に自分の公開キー p を登録しておく
  2. 検証者は乱数 r を生成し,利用者に送る
  3. 利用者は乱数 r を秘密キーで暗号化し Es(r),検証者に送る
  4. 検証者は送られたデータを利用者の公開キーで復号化し Dp( Es(r) ),最初の乱数と比べる
  5. 一致すれば正当な利用者として認証

             検証者                        利用者
      ┌────────┐    p    ┌────────┐
      │                │←────│ 公開キーを登録 │
      │                │    r    │                │
      │  乱数r発生    │────→│                │
      │                │   Es(r)  │秘密キーで暗号化│
      │公開キーで復号化│←────│     Es(r)      │
      │    Dp(Es(r))   │          │                │
      │                │          │                │
      │ 結果をrと比較 │          │                │
      └────────┘          └────────┘

 復号化した結果が最初の乱数と同一であれば,利用者は公開キーに対応する秘密キーを保持していることが確認され,利用者が正当な相手として認証される.

 この他にも相手を認証するための手順はいくつか存在するが,非対称暗号を用いた相手認証とは正当な相手かどうかを秘密キーを保持しているかどうかで判定する,という点である.すなわち,公開キーに対応する秘密キーを持たずに復号化が不可能,かつ,秘密キーは故意または過失により第三者に渡ることは無いことを前提としているのである.

■ 非対称暗号を用いたユーザ認証

 前節では検証作業が検証者側で行われていたが,検証者が利用者に対しパスコード(パスワードと同じ意味,単語ではないのでコードと呼ぶ)を発行し,利用者側のプログラムで認証を行うことも可能である.この方式を“ユーザ側認証方式”と呼ぶ.具体的な手順は以下のようになる.

  1. 検証者は検証者の公開キー vp を公開する
  2. 利用者側プログラムは乱数rを発生させ,それを自分の秘密キー us で暗号化する
  3. 利用者側プログラムはその結果に自分の公開キー up を含めたものを検証者の公開キー vp で暗号化し Evp(Eus(r), up),それを検証者に送る
  4. 検証者は送られてきたデータを自分の秘密キー vs で復号化し,Eus(r), up を得る
  5. 検証者は Eus(r) を up で復号化し,r を得る
  6. 検証者はシリアル番号などの固有情報 α を r に付加したものを検証者の秘密キー vs で暗号化する Evs(r, α)
  7. 検証者はそれをさらに検証者の公開キー up で暗号化し Eup(Evs(r, α)),これをパスコードとして利用者に送る
  8. 利用者側プログラムはパスコードを自分の秘密キー us,検証者の公開キー vp で復号化し r,α を得る
  9. 利用者側プログラムは復号化で得られたrが最初に発生させた乱数と同一であればパスコードを正当とみなす

             検証者                        利用者
      ┌────────┐          ┌────────┐
      │秘密キー vs,    │          │秘密キー us,    │
      │公開キー vp を  │          │公開キー up を  │
      │生成            │          │生成            │
      │                │    vp    │                │
      │公開キーを登録  │────→│                │
      │                │          │  乱数rを発生  │
      │                │          │秘密キーで暗号化│
      │                │          │公開キーを加え,│
      │                │認証用code│vp で暗号化     │
      │認証用codeを復号│←────│                │
      │化し乱数rを取得│          │                │
      │                │          │                │
      │付加情報を加える│          │                │
      │秘密キーで暗号化│          │                │
      │利用者の公開キー│          │                │
      │で暗号化        │pass code │                │
      │                │────→│秘密キーで復号化│
      │                │          │vp で復号化     │
      │                │          │                │
      │                │          │ 結果をrと比較 │
      └────────┘          └────────┘

 ユーザ側認証方式の安全性は利用者が検証者の秘密キーを知らない限り,復号するとrになるようなデータを(実質的に)生成不可能な点にある.これは通常の認証と同じであるが,ユーザ側認証方式には安全性を脅かす要因が他に存在する.それは認証行為,すなわち乱数rとパスコードから計算された値とを比べるのはユーザの環境に存在するプログラムであり,その改竄が可能なことである.また,利用者が生成した乱数,秘密キーを第三者に伝えた場合,第三者も認証されてしまうという問題がある.

■ 参考文献

[1] Diffie, W., Hellman, M.: New Directions in Cryptography, IEEE Trans. on Information Theory, IT-22, 6, pp.644-654(1976).

[2] Rivest, R., Shamir, A., Adleman,L.: A Method for Obtaining Digital Signatures and Public-Key Cryptosystems, Communications of the ACM, Vol.21, No. 2, pp. 120-126 (1978)

[3] 岡本龍明, 山本博資: 現代暗号, 産業図書株式会社 (1997)


 Since 7-Sep-1998

Copyright (c) 1998 by Nobuhide Tsuda, All Right Reserved.
このホームページに関するご質問、ご要望、バグレポート等は  ntsuda@beam.ne.jp  までメールをいただければ幸いです。