認証

認証とは、あるモノが正当か否かを確認するプロセスのこと。
セキュリティにおいては情報資源へのアクセスや権限のコントロールを行う場合の根拠として用いられる。
 

認証の種類

 
認証の種類は認証を行う対象とその手段により分類可能。
たとえば、認証の対象としては
・人 (社員や正規ユーザーの認証)
・モノ(システムを構成する機器や接続許可を受けた端末などの認証)
・情報(発信元が正当で、改ざんされていない完全な情報であることの認証)
などがあり、手段としては
・生体認証(指紋や声紋など。主に人の認証で用いる)
・物的認証(印鑑、ICカード、デジタル証明など。モノや情報にも使える)
・知識認証(パスワード、暗証番号など。これも人の認証)
等が挙げられる。

認証対象はセキュリティポリシーに依存して決まる。
手段は不当な認証対象(攻撃者や攻撃者の端末など)には利用不可能なものであること、導入コストや運用コストがシステムに見合ったモノであることなどが重要。
認証対象によって適切な手段・不適切な手段があるので当然ながらうまく安全性と利便性のバランスを取らなければいけない。
(ex 人間にMacアドレス制限は出来ないし、無線LANカードの認証にパスワードは不適切)
 
つづいて、代表的な認証方法としてパスワード認証についてまとめる。
 

パスワード認証

パスワードによる認証は固定式と可変式(ワンタイム)パスワードの2種に大別される。
それぞれ細かい仕組みは省略して特徴および長所短所を比べてみる。

固定式パスワード

とても一般的な、いつも決まったパスワードを入力するアレ。
長所は管理側も利用者側もシンプルでわかりやすいこと。
短所はシンプルが故にいくつもの脆弱性を内包していること。
具体的に脆弱性を列挙すると・・・

  • 適切なパスワード管理が成されていないと意味がない

パスワードの決定からその保管・運用(定期的な変更など)も含めきちんとすべき。下手するとあってないものになりかねない。

  • パスワードそのものがネットワーク上を行き来するので盗聴によりパスワードが漏洩する危険性が高い。
  • 仮にパスワードを暗号化してやりとりしても、リプレイアタックは防げない

 
リプレイアタック:パスワード送信時に暗号化がなされている場合に用いる攻撃手法。攻撃者は暗号化済みの文字列を収集し、認証時に「あたかもパスワードを暗号化して送ったかのように」暗号化済み文字列を送る攻撃手法。これを用いると、サーバー側から見ればいつもの暗号化済みパスワードが送られてきているために認証が成立してしまう。
 

ワンタイムパスワード

こちらは認証のたびに異なったパスワードを利用する認証手法。毎回パスワードを使い捨てる点が特徴。
長所は、仮に一度パスワードが漏れても次の認証では使えないためにより安全なことと、ユーザーがパスワードを覚える必要がないため、管理が容易になること。
短所は、実装や運用が複雑になることと、安全ではあっても完全ではないこと。
 
これも脆弱性をいくつか列挙

  • 実装方法によってはパスワードの生成手法が解析でき、認証情報が予想されてしまう
  • 認証サーバーの信頼性については一切関知しないので、Man in the Middle攻撃は防げない

 
特に後者は固定式パスワードでも同じだが、最近はやりのフィッシングのように、正当な認証情報を堂々と取得されてしまえばどうしようもなくなってしまうので注意。
 

ワンタイムパスワードの実装方法
  1. チャレンジレスポンス方式

代表例はCHAP (Challenge Handshake Authentication Protocol)やS/Key。
CHAPはサーバーから送られてくるチャレンジコードと手元のパスワードを元にハッシュ値を生成、これをやりとりすることで認証を行う。
S/Keyは最大認証回数を予め設定し、漸化式から毎回のハッシュ値を生成する。
ハッシュ値からパスワードを逆解析するのは通常困難なため盗聴に強く、やりとりされるハッシュ値が毎回変わるためリプライアタックも防止できる。
 

  1. トークン方式

専用ハードウェアなどを用いて、時間毎、認証毎など特定のタイミングでパスワードを生成する方式。サーバーはトークンとパスワードを管理する専用のサーバーに問い合わせを行って認証の可否を判断する。
シングルサインオンRADIUSSSL-VPNIPSecなど広い範囲で用いられている。
ちなみにトークンのハードウェアを盗まれたらおしまいw
トークン自体も固定式パスワードで認証を行うようにしたりするとさらに厳重になりそう。