アプリケーションプロトコル
インターネット上でクレジット決済を行うためのプロトコル仕様 (Secure Electronic Transactions) である. IBM が開発した iKP をベースとし,利用者,商店,クレジット会社の3者間プロトコルを規定している.認証機関 (CA) の利用を前提としている.
SET ではインターネットを介して接続された以下の通信手順を規定している.
- 顧客 (Cardholder)
買い手であり,インターネットを介して店舗と取引を行う.
- 店舗 (Merchant)
売り手であり,インターネットを介して顧客と取引を行う.
- 認証機関 (CA:Certification Authority)
顧客や店舗の申請する公開鍵データに認証をあたえる (正当であることを証明する証明書を発行する) 機関
- 支払いゲートウェイ (Payment Gateway)
Issuer (売り手の取引銀行又はそれに相当する機関) に対する与信依頼や,店舗に対する支払いサービス等の処理を行う.
SET におけるセキュリティ要件は次のとおりである.
- メッセージの暗号化による情報の秘匿
- ディジタル署名による支払いデータの改ざん防止
- 証明書の発行とディジタル署名による、顧客のアカウント情報の認証
- 証明書の発行とディジタル署名による、販売店の安全性の認証
- 標準仕様の採用による相互接続性確保
技術仕様として,以下の仕様が提示されている.
- Book 1 :Business Description
- Book 2 :Programmer's Guide
- Book 3 :Protocol Description
ワンタイムパスワード (OTP:One Time Password) は,パスワードを一度きりの使い捨てにし,認証が必要なシステムへアクセスするたびに毎回異なるパスワードを使うようにするものである.万一パスワードが盗み見られても,次回はそれを使わないので安全性が保たれる.
OTP の基本的な考え方は,あらかじめ認証し合う両者がパスワードの一覧表を持っておき,表中のパスワードを順番に使っていくというものである.実際には,表を持つ代わりにあらかじめ決められた規則に従って,双方でパスワードを生成して認証するようになっている. 具体的には,ユーザがホストにアクセスする場合,ホスト側からチャレンジと呼ばれる乱数値が送られる.ユーザは自分だけが知っているパスフレーズとチャレンジとを用いてある種の演算を行なった結果をホストに返す. ホストも,同じ演算を行なってパスワードを検証する.
- S/Key One Time Password
OTP を実現した最初のシステムが米国 Bellcore社が開発した S/KEYシステムで,次の RFC に仕様がある.
- RFC1760 (The S/KEY One-Time Password System)
S/KEY システムの基本的処理を以下に示す.
- ユーザはあらかじめ n個の使い捨てパスワードを生成して S/KEYシステムに登録する.このパスワードは,次のように生成される.
- S/KEYシステムは,ユーザが指定したシークレットパスフレーズと任意に選択された種を結合した値に対して MD4ハッシュ関数を n回適用する. システムはこのハッシュの最終結果を S/KEYのパスワードデータベースに記録する. なお,MD4 の出力データは 128ビットであるが,この 128ビットを上位 64ビットと下位 64ビットに分け両者の排他的論理和を取った結果の 64ビットをパスワードにする.
- ユーザは,S/KEYシステムから n回のハッシュ計算における各回の結果を使い捨てパスワードとして取得する.これをプリンタに出力するなどしてその値を保管する (これは必ずしも出力する必要はなく,シークレットパスフレーズさえ記憶しておけば,システムから提示される種とからその都度コンピュータを用いて計算することもできる).
- ユーザがシステムに最初にログインするとき,(n-1)番目のパスワードの入力が要求される.ユーザは自分が保管する(あるいは計算した)パスワードを入力する.
- ユーザが入力した(n-1)番目のパスワードに対し,システムは MD4ハッシュ関数を1回適用する.この結果の値はパスワードが正しければシステムがパスワードデータベースに保持する n番目のパスワードに等しくなるので,ログインは正当と判断できる.このとき,システムはパスワードデータベースの値を入力された(n-1)番目のパスワードに置き換える.
- 2回目以降のログインでは,n-2番目, n-3番目, ...と一つづつ遡ったパスワードが要求され,同様に処理される.
S/KEYシステムを標準化させる動きとして次の RFC に仕様が提示されている.
- RFC2289 (A One-Time Password System)
ここでは,ハッシュアルゴリズムとしてMD5(必須)とSHA-1が追加され,MD4はオプション扱いになっている.パスフレーズは10~63文字のサポートが必須である. また,システム側から送られるチャレンジデータ(seed)は,1~16文字の空白を含まない英数字で大文字/小文字を区別しない(最終的には小文字に変換)ことが規定されている.
OTP をサポートするシステムには S/KEY の他に,NRL (US Naval Research Laboratory) が開発し配布している OPIE (One-time Passwords In Everything) がある.OPIE は S/KEY から派生したもので,ハッシュアルゴリズムとして MD4 の代わりに MD5 を用いているが,S/KEY とも互換性を持たせることもできる.
なお,OTP で使われるパスワードを計算するソフトウェアまたはハードウェアを OTP計算機と呼ぶ.チャレンジとパスフレーズを入力してパスワードを計算するもので,プログラムも幾つか流通している.
- 時刻同期タイプ方式
ユーザ (被認証側) にトークンと呼ばれるパスワード生成器をあらかじめ配布しておく.トークンには IC カードのようなもの,USB キーのようなもの,キーホルダーのような形をしているもの,インストールして使用するソフトウエア・タイプなど様々な形態がある. このトークンには,例えば 6 桁の数字が表示されていて,これが時刻の経過に伴って別の数字に切り替わるようになっている.この数字がパスワードである.
トークン内部は認証サーバーの時計と同期し続ける正確な時計となっている.このシステムにおいては,新しいパスワードは以前のパスワードや秘密鍵よりもむしろ現在の時刻に基づいて生成されるため,時刻はパスワード・アルゴリズムの重要な部分を占めている.
ユーザーが認証を受けるときは,自分のID (識別番号) とともに,トークンに表示された数字をパスワードとしてサーバー側 (認証側) へ送信する. サーバー側では,誰がどのトークンを使っているか,各トークンがどの時刻にはどんな数値を表示するかを管理している.そこで,サーバーはアクセスしてきた時刻と送られてきたパスワード,および識別番号を検証することにより,アクセス元が正規ユーザーかどうかを認証することができる.
- チャレンジ・レスポンス方式
ユーザ(被認証側)を認証する際に,システム(認証側)が最初にランダムに生成したデータ(チャレンジ)をユーザに送り,ユーザはそのチャレンジと秘密データ(パスワード)とを結合したデータに対して一方向性ハッシュ関数等を適用し,その結果をシステムに送り返す.システム側でも同様の演算を行い,その結果とユーザから送り返されたレスポンスとを比較し一致すれば正しいユーザと判断する.
具体的な演算方式としては,ハッシュ関数を用いる方式,共通鍵暗号を用いる方式,公開鍵暗号を用いる方式などがある.
遠隔ログインは,インターネット経由で遠隔地にあるコンピュータシステムへログインするための手段である. しかし,インターネット経由でログインを行なうと,パスワード情報やその他の情報が盗聴されたり,改ざんされる危険は避けられない. SSH (Secure SHell)は,rsh (リモートシェル),rlogin (リモートログイン)や rcp (リモートコピー)などのリモートツールにセキュリティ機能を付加したものである. SSHにより認証機能と通信の暗号化が行える.
SSH サーバは,クライアントからの接続要求があると次のプロトコルを実行する.
- 互いの SSHプロトコル・バージョン番号の交換
バージョン番号は次の形式を持った文字列であり,これらを交換することにより,互いのバージョンが適切なものであるかを確認する.
SSH-<メジャー番号>-<マイナー番号>-<ソフトウェアバージョン>
メジャー番号が同じバージョン間では,互換性が保証される.
- セッション鍵の交換
Diffie-Hellman (DH) 法による鍵交換(セッション鍵の生成)を行う.
- クライアントの認証
セッション鍵の交換が終了すれば,サーバとクライアントは同じセッション鍵を共有しているので,以後の通信は暗号化することができる. クライアントの認証には次の 4つの方式がある.
- /etc/hosts.equiv または ~/.rhostsによる認証
- a. に加えてホストのRSA認証
- ユーザのRSA認証
- パスワード認証
上記の認証がすべて失敗したときに行なわれるもので,通常のログイン処理と同じである.クライアントから送られたパスワードをサーバ側で認証する. パスワードは暗号化されて送信されるので,盗聴等の問題はない.
- クライアントからの要求の処理
SSH では,上記のように最初に公開鍵暗号を用いてセッション鍵を交換し,それ以後は共通鍵暗号によりデータの暗号化が行なわれる.共通鍵暗号としては,IDES,DES,Triple DES,RC4 が用意されており,サーバとクライアントの交渉によって選択される.
SSH には異なるバージョンがあり,脆弱性の有無など細かい違いがある.SSH1 (プロトコル1) は,RSA 暗号を用いて認証を行い,通信の隠蔽のために 3DES や Blowfish などの暗号を用いる. SSH2 (プロトコル2) は,当初 RSA の特許問題の回避を意図して DSA 署名を用いて認証を行うように実装された.現在では,RSA の特許問題が解消したので SSH2 でも RSA 認証が使われている.
2 つのプロトコルの相違は,SSH1 がデータが改竄されていないかどうかのチェックに単純な
CRC を用いていたのに対して,SSH2 ではより強力な HMAC アルゴリズムによるチェックが使われている点である.また,SSH2 では通信の隠蔽のための AES などの安全性の高い共通鍵暗号アルゴリズムを選べるように設計されているので,現在は SSH2 の方が推奨されている. なお,SSH1 と SSH2 の間には互換性がなく,両者が共通のプロトコルをサポートしていないと,通信ができないことになる.
Kerberos は,クライアントとサーバ間の認証と暗号化用の鍵の配布を Key Distribution Center (KDC:鍵管理センタ) を通して行なう方式である. すべての参加者は KDC を信頼し,KDC のみが信頼性の責任を持つことを前提にする. KDC は各参加者とそれぞれ秘密の鍵 (暗号鍵) を共有する.KDC はこの秘密の鍵を通じて参加者の身元を確認する.
以下の RFC に仕様がある.
- RFC1510
The Kerberos Network Authentication Service (V5), September 1993.
- RFC1964
The Kerberos Version 5 GSS-API Mechanism, June 1996.
ユーザ(クライアントプログラム) A がホスト(サーバプログラム) B に対する認証を行なう場合の手順は次のようになる.
- ユーザ A は KDC に対し,ホスト B に対するチケットの発行を依頼する.
- KDC はこの要求に対して,B に対するチケットを含む証明書と呼ばれるデータをユーザの鍵で暗号化したものをユーザに返す.
この証明書には,B に対するチケットの他にセッション鍵が含まれている. チケットには,ユーザ A に関する情報とセッション鍵が含まれており,全体がホスト B の鍵で暗号化されている.
- ユーザ A は受けとった証明書を自分の鍵で復号し,チケットとセッション鍵を取り出す.このチケットをホスト B に送る.
- ホスト B は自分の鍵でチケットを復号し,ユーザ A の情報とセッション鍵を取り出す.
この手順により,ユーザ A とホスト B は同じセッション鍵を共有する.ホスト B は,チケット内の情報からユーザ A の身元が分かる.また,ユーザ A が KDC からの証明書を復号してチケットを取り出せたことから,チケットを送った相手が間違いなくユーザ A であると分かる. 一方,ユーザ A はホスト B とセッション鍵を用いて正しく通信が行なえれば,ホスト B が KDC が暗号化したチケットからセッション鍵を取り出せたことから,ホスト B は目的の相手であることが分かる. このように,第三者である
KDC を介してユーザとホストが互いに相互認証できる.