認証
実社会では,契約文書の正当性を確認したり本人であることを証明するために,自筆のサインや実印による認証が用いられている.これは,本人以外が同じ筆跡や印影を偽造するのは困難であるという前提に基づく認証システムといえる. しかし,これを情報通信システムにそのまま適用するのは困難である.電子データを用いて単純にこのような認証システムを実現しようとすると,例えば印鑑の場合,どんなに複雑な印影データを作成したとしても,電子データであるが故にその複製や転載が簡単にできてしまうからである.
ユーザを認証するための要素の種類により,認証方式は次のように分けられる.
- 一要素認証
- ユーザが知っているもの(ユーザ ID,パスワード etc)
- 二要素認証
- ユーザが知っているもの(暗証番号 etc)
- ユーザが持っているもの(IC カード etc)
- 三要素認証
- ユーザが知っているもの(暗証番号 etc)
- ユーザが持っているもの(ICカード etc)
- ユーザ自身を証明するもの(バイオメトリックス(指紋,目,顔 etc))
多くの要素を用いて認証することにより,認証の厳密度が向上する.
- プルーフ・オブ・ワーク (Proof of work)
プルーフ・オブ・ワーク (Proof of work) とは,日本語で直訳するなら「仕事による証明」である. その意味するところは,ある種の仕事 (何らかの計算) を正しく実行したことを示すことである. プルーフ・オブ・ワークは,サーバ-クライアントシステムにおいて,クライアントを認証する場合などに使われている.
プルーフ・オブ・ワークには,次の 2 つのタイプがある.
- Challenge-response (チャレンジーレスポンスタイプ)
サーバが乱数 (チャレンジ) をクライアントに送り,クライアントは自分が持つ秘密情報(パスワードなど)と乱数からある計算を行い,サーバに返す.サーバは,同様な計算を行い結果が等しいか否かを検証する.
- Solution-verification (問題回答タイプ)
クライアントがある種の問題を解き,その回答をサーバ (受信者) に送る.受信者は,その問題に対する回答が正しいか否かを検証する.ここで対象とする問題は,解くのは難しいが,答えが正しいか否かの検証は容易な問題である.
多くの場合,プルーフ・オブ・ワークを計算する手段としてハッシュ関数が用いられる. 例えば,ある文字列 S が与えられたとき,他の文字列 T と連結した文字列 S + T の ハッシュ値 H の 左 n bit がすべて 0 になる,そのような T を求める問題がある.この計算が正しく行われたこと (T が求まったこと) が確認されると認証が成立する(Bitcoin の方式).
- 暗号技術の利用
暗号技術を使って認証機能を実現することができる. 認証対象が情報である場合 (メッセージ認証) と人間である場合 (利用者認証) があり,以下のように分類される.
- メッセージ認証
情報が改ざんされておらず,正しいものであることを保証する.
- 利用者認証
通信主体が正当なものであることを保証する.
- FIDO 認証
従来のパスワードとユーザIDによる認証に代わる生体認証などを利用したより強力なオンライン認証技術の標準化が進められている (→ FIDO 認証).
- パスキー(Passkey) 認証
FIDO 認証を適用した公開鍵暗号技術を使うパスワード入力を省略し安全にログインできる方式である. (→ パスキー認証).
メッセージ認証は,文書の改ざん検出を行うため文書にメッセージ認証コード (MAC: Message Authentication Code)を付与して転送する方式である (→ メッセージ認証子 (MAC)).
メッセージ認証には,再生攻撃と呼ばれる攻撃者が通信を傍受し,送信メッセージのコピーを再度送信先に送り付ける攻撃法がある. この再生攻撃に対処するためには,タイムスタンプやシーケンス番号をメッセージへ付加した後にMACを計算する(正常な処理では,同じ送信メッセージは発生しない)ようにすることが必要である.
なお,単にメッセージ伝送における誤りを検出する方法には CRC 方式もあるが,意図的な改ざん検出対策には向かない. (→ 巡回冗長検査 (CRC)).
利用者認証の基本は,利用者のみが知っている情報を用いて認証を行うものであり,次のような方式がある.
- パスワード方式
利用者のみが知っているパスワードをあらかじめシステムに登録し,パスワードを用いて認証する方式である.
- 単純パスワード
パスワードを直接送信/保管する.ただし,パスワードは直接送信するが,保管はハッシュ関数で変換して保管する場合が多い.
- ハッシュ式パスワード
パスワードを直接送信/保管するのではなく,ハッシュ関数で変換した値で送信/保管する.
- ワンタイムパスワード
パスワードを一度きりの使い捨てにし,アクセスするたびに毎回異なるパスワードを使うようにする.
- チャレンジ&レスポンス方式
ユーザ(被認証側)を認証する際に,システム(認証側)が最初にランダムに生成したデータ(チャレンジ)をユーザに送り,ユーザはそのチャレンジと秘密データ(パスワード,秘密鍵等)とを結合したデータに対して一方向性ハッシュ関数等を適用し,その結果をシステムに送り返す.システム側でも同様の演算を行い,その結果とユーザから送り返されたレスポンスとを比較し一致すれば正しいユーザと判断する.
チャレンジ&レスポンス方式の実現には,ハッシュ関数の他に次の暗号方式も用いられる.秘密鍵を持っているのは本人のみであることを利用して認証する.
- 共通鍵暗号方式 (→ 利用者認証)
- 公開鍵暗号方式(ディジタル署名)
- HTTP 認証
HTTP プロトコルにおける認証方式 (→ HTTP 認証)
- SRP プロトコル
暗号化されていない通信路を介した認証と鍵交換のプロトコル (→ SRP プロトコル)