認証とは?

認証と認可の違い

AAA制御とは、アクセス制御の基本となる3つの要素です。

  • 認証:本人確認・改ざんチェック
  • 認可:アクセス権を与える
  • アカウンティング:ログで記録する



認証には2種類あります。

  • エンティティ認証:相手が本物・本人か。
  • メッセージ認証:メッセージが本物か。改ざんがないのか。

エンティティ認証

利用者(ユーザ)認証

本人しか持ち得ないものを確認することで、本人であると特定する認証です。

  • パスワード認証:本人以外が知り得ない知識を問う。
  • バイオメトリクス認証:生体情報を確認する。
  • ICカード:所有物による認証

バイオメトリクス認証

指紋や静脈パターン、虹彩パターン、顔などで認証する。


誤って、他人を受け入れてしまう割合を他人受入率(FAR)といいます。

また、本人を拒否してしまう割合を本人拒否率(FRR)といいます。


例として、FIDO認証があります。

FIDO認証(ファイド)では、署名技術を利用し、生体認証が使えます。

引用:FIDO認証とは?|DDS

所有物

ICカードの中の秘密の情報を確認する認証です。

秘密の情報とは、共通鍵や秘密鍵も含みます。

共通鍵を認証主体に登録しておいたり、秘密鍵で署名をつけるなどがあります。


ICカードを他人が利用できないように、ICカードにロックをかけておくことが一般的です。

ロックはPINで実現します。


このように、耐タンパ性(内部の機密情報データや動作などを、外部から解析や改変されることを防ぐ能力のこと。)を高める工夫が必要です。


二要素認証・ディアルファクタ認証

知識・生体・物の3つの内、2つの要素で認証することを二要素認証といいます。


2要素使う認証なので、二段階認証に含まれます。

パスワード×パスワードの場合は二段階認証だよ。
それ以外で2つの要素を使っている場合、二要素・二段階どちらで記述しても、問題ありません。



パスワード認証

本人以外が知り得ない知識を問う認証方法です。
パスワードの他に、パスフレーズを使う場合もあります。

パスワード:文字なので、空白が許されない。pass1234

パスフレーズ:文章なので、空白が許される。This is a pen.



パスワード認証の実現方法は下記の3つです。

  • BASIC認証
  • PLAIN認証
  • USER・PASSWORD認証

BASIC認証

認証機器(サーバー)にユーザーIDとパスワード(秘密の情報)を平文で送信する


①通信経路で盗聴された場合、また、②サーバーがなりすまししていた場合は、ユーザーIDとパスワードが漏洩する恐れがあります。

対処方法

①盗聴:暗号通信にする

②なりすまし:サーバ認証を入れる


安全にBASIC認証するために、HTTPS通信を使うことが一般的です。

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

「0知識証明」とも呼ばれています。

本人しかできない加工ができるのかどうかを確認する方式です。

引用:チャレンジレスポンス認証の仕組みと特徴を解説!|ITの学び


  1. ユーザーは、サーバに接続情報とIDを送る
  2. サーバーは毎回変化する値「チャレンジ」をユーザーに送る(リプレイ攻撃対策)
  3. ユーザーはチャレンジを加工して、レスポンスを生成する。
  4. サーバーはレスポンスを検証する

パスワードは毎回同じだよね。
チャレンジも毎回同じ値の場合、レスポンスは毎回同じになってしまうよ。
こうしてレスポンスを入手・再利用されてしまうと、攻撃者はユーザーになりすまして、簡単に認証を突破できてしまうんだ。
(リプレイ攻撃といいます。)
このように、レスポンスを再利用されることを防ぐために、チャレンジには桁数の多い乱数を利用します。



ユーザー側の加工・サーバー側の認証の方法は、3種類あります。

  1. サーバーに登録したパスワード(=ユーザーのパスワード)を共通鍵として、チャレンジを暗号化する
  2. ユーザーの秘密鍵を使って署名し、サーバーが公開鍵を使って復号する
  3. チャレンジ+ユーザーのパスワードからハッシュ値を作り、サーバーがレスポンスと自身で計算したハッシュ値を比較する



2のやり方は、公開鍵(証明書)による認証です。


3のやり方を、ダイジェスト認証といいます。
ダイジェスト認証は、暗号化する必要がなく、すべてのやり取りが平文で可能です。

リスクベース認証

普段と異なる環境からのアクセス時に、追加の認証を行うことを、リスクベース認証といいます。


追加の認証とは、例えば次のような認証があります。

  • SMSで認証コードを送る
  • 登録したメールアドレスへ追加の認証コードを送る

ワンタイムパスワード(OneTimePassword:OTP)

ワンタイムパスワードとは、使い捨てのパスワードです。
ハッシュを利用して生成されています。

方式は3種類あります。


S/Key

ハッシュ値の一方向性を利用してワンタイムパスワードを生成します。

引用:情報セキュリティスペシャリスト平成22年春期 午前Ⅱ 問4|情報セキュリティスペシャリスト試験.com

マスタパスワード(M)を決めて、ハッシュ化(H1)します。
次に、H1をハッシュ化して、H2を生成します。

このように続け、100回ハッシュ化をします。
=H1~H100まで生成。

ワンタイムパスワードとしてハッシュ値を使う場合は、H100、99、98…というようにパスワードとして利用します。

ハッシュ化した回数分だけパスワードが生成されます。
H100から使う理由は、ハッシュ化の一方向性を利用するためです。
例えば、H1→H2と使うとハッシュ関数がわかってしまったら、すぐにハッシュ値が推測できてしまいます。
しかし、H100→H99と逆向きに使う場合はハッシュ化の一方向性より、パスワードが推測できません。


HOTP

HOTPとは、HMACを使ってワンタイムパスワードを生成する方法です。

HMACとは、鍵付きハッシュ関数を用いて生成したハッシュ値のことです。

鍵付きハッシュ関数とは、メッセージと共通鍵を組み合わせてハッシュ関数で計算することです。
その結果、算出されたハッシュ値がHMACです。



HMAC値は、共通鍵を使うため、共通鍵を知っている当事者のみが生成できます。


TOTP

TOTPとは、時刻(分単位)からハッシュ値を作る方式です。

タイムシンクロナス方式とも呼ばれます。

ユーザー側・サーバー側ともに、秘密の文字列(共通鍵)と現在時刻を使ってハッシュ値を生成し、両者が同一であれば認証できるという仕組みです。

ユーザー側とサーバー側の現在時刻が同一であることが重要なので、NTPを利用します。

NTPサーバーとは、正しい時刻情報を取得・配信しているサーバーのことです。

時刻情報をサーバーとクライアントとの間でやりとりする際に、TCP/IPネットワークを通じてNTP(Network Time Protocol)という通信プロトコルを使用して問い合わせることにより、コンピュータの内部時計を正しく設定することができます。

用語集|NTPサーバー|IDCFrontier



サーバ(認証側機器)でのパスワード情報の管理

パスワードの管理方法は2種類あります。

  1. ユーザーから送られてきたパスワードを平文で記録し、サーバにあるパスワードファイルと比較する方法


①の場合、パスワードファイルを盗まれ、中身を見られた場合は、パスワードを盗まれる危険があります。


管理者権限を持つユーザが覗き見ることもできる点も、リスクがあります。

上記のリスクへの対応としては、「パスワードファイルに記録するパスワードを、ハッシュ値にしておく」が考えられます。


一方向性の観点から、ハッシュ値がわかっても、もとのパスワードはわからないね!



Unix系OS(Linuxなど)では、/etc/passwordというファイルで管理されています。


ダイジェスト認証でも、ハッシュ値を記録するだけで良いのかな??


ダイジェスト認証の場合は、チャレンジとユーザーのパスワード(平文)を使って、サーバー側で認証する必要があります。


パスワードファイルにパスワードのハッシュ値が登録されている場合、平文のパスワードが取り出せないため、パスワードファイルには平文のパスワードが登録されている必要がありますね。


公開鍵(証明書)による認証の場合は、どうかな?


サーバー側がレスポンスを検証する場合は、ユーザーの公開鍵を使います。

公開鍵なので、パスワードファイルは利用しません。

また、公開鍵から秘密鍵を推測することは出来ないため、盗聴されても問題ありません。


ただし、サーバーに侵入されて、ユーザーの公開鍵を偽物の公開鍵に置き換えられた場合は、不正侵入を許してしまいます。

対処法としては、公開鍵証明書をサーバー上に記憶しておくことがあげられます。

「この公開鍵は、Aさんのものです!」と証明できれば、公開鍵が置き換えられることはありません。




認証フレームワーク

認証フレームワークとして代表的な、IEEE802.1X(アイ・トリプルイー)を説明します。

認証フレームワークとは、認証の枠組みのことです。

データリンク層でよく使われます。

データリンク層は、ネットワークに参加する層です。



データリンク層にあるL2スイッチ(以下、SW)で、「どのPCでも接続していいですよ」としてしまうと、悪意を持ったユーザーも勝手に社内ネットワークに接続できてしまい、危険です。

そのため、L2SWで認証する必要があります。


この認証でよく使われるのが、IEEE802.1Xです。




まず、RADIUSサーバ(認証サーバ)の設置をします。


RADIUSサーバの認証プロトコルはEAPです。

EAPは、PPPの認証する部分を抜き取ったプロトコルです。


EAPには、次の2種類の運用モードがあります。

  1. PEAP:利用者はID・パスワードによる認証。接続先は公開鍵証明書を使います。
  2. EAP-TLS:利用者・接続先機器ともに公開鍵証明書を使います。



SSO



メッセージ認証

メッセージ認証は、メッセージの改ざん有無を確認する認証です。

メッセージ認証符号

メッセージ認証符号はMACと呼ばれます。

当事者以外の第三者が、メッセージを改ざんしていないかどうかを検証できます。


ただし、デメリットもあります。

  • メッセージ受信者が改ざんしていた場合は検出できない点
  • メッセージ作成者がメッセージを作ったことを保証できない点


MACでは共通鍵を利用します。

そのため、共通鍵を持っている受信者が、悪意をもってデータを改ざんした場合、
改ざん後のデータを再度共通鍵を使ってハッシュ化し、同一のHMACを作れば簡単に偽装できてしまいます。

MACは信頼関係がある当事者間でしか利用できないんだね。



また、「このメッセージは共通鍵を持っている当事者のどちらかが作成した」ということまでしか特定できません。

つまり、否認できてしまうんだね。


代表的なMACの一つがCBC-MAC(CMAC)です。

CBC-MACでは、共通鍵暗号方式のブロック暗号CBCモードを利用してMAC値を作ります。

CBCモードは、ある乱数とブロックをXORをして暗号化し、以降は暗号化したデータとブロックをXORすることで、次々に暗号化します。

CBC-MACは、最後のブロックを暗号化した結果をMAC値として利用する方式です。

他にも、HMACがあります。