14.6.2. セキュアリモートパスワード (SRP) プロトコルの設定
セキュアリモートパスワード (SRP) プロトコルをアプリケーションで使用するには、最初に
SRPVerifierStore
インターフェースを実装する MBean を作成します。実装に関する詳細は SRPVerifierStore 実装 で確認できます。
手順14.5 既存パスワードストアの統合
ハッシュ化されたパスワード情報ストアを作成します。
パスワードが既に不可逆的にハッシュ化され、保存されている場合、この作業をユーザーごとに行う必要があります。noOP メソッドとしてsetUserVerifier(String, VerifierInfo)
を実装するか、ストアが読み取り専用であることを知らせる例外をスローするメソッドとしてsetUserVerifier(String, VerifierInfo)
を実装することができます。SRPVerifierStore インターフェースを作成します。
作成したストアよりVerifierInfo
を取得できるカスタムのSRPVerifierStore
インターフェース実装を作成します。verifyUserChallenge(String, Object)
を使用すると、SafeWord や Radius のような既存のハードウェアトークンベースのスキームを SRP アルゴリズムへ統合することができます。このインターフェースメソッドは、クライアントの SRPLoginModule 設定で hasAuxChallenge オプションが指定されている場合のみ呼び出されます。JNDI MBean を作成します。
JNDI が使用できるSRPVerifierStore
インターフェースを公開し、必要な設定可能パラメーターを公開する MBean を作成します。デフォルトのorg.jboss.security.srp.SRPVerifierStoreService
でこれを実装することが可能です。また、SRPVerifierStore
の Java プロパティーファイル実装を使用して MBean を実装することもできます。
SRPVerifierStore 実装
すべてのパスワードハッシュ情報がシリアライズされたオブジェクトのファイルとして使用できなければならないため、SRPVerifierStore
インターフェースのデフォルト実装は実稼動システムでは推奨されません。
SRPVerifierStore
実装は、特定のユーザー名に対して SRPVerifierStore.VerifierInfo
オブジェクトへのアクセスを提供します。SRP アルゴリズムが必要とするパラメーターを取得するため、getUserVerifier(String)
メソッドはユーザー SRP セッションの最初に SRPService によって呼び出されます。
VerifierInfo オブジェクトの要素
- username
- 認証に使用されるユーザー名またはユーザー ID です。
- verifier
- アイデンティティーの証拠としてユーザーが入力するパスワードの一方向ハッシュです。
org.jboss.security.Util
クラスにはパスワードハッシュ化アルゴリズムを実行するcalculateVerifier
メソッドが含まれています。出力パスワードはH(salt | H(username | ':' | password))
の形式を取ります。H
は RFC2945 で定義されている SHA セキュアハッシュ関数になります。ユーザー名は UTF-8 エンコーディングを使用して文字列から byte[] へ変換されます。 - salt
- データベースの情報が漏えいされた場合に、ベリファイアーパスワードデータベース上での総当たり辞書攻撃を難しくするために使用される乱数です。ユーザーの既存のクリアテキストパスワードがハッシュ化される時に、暗号強度が高い乱数アルゴリズムより値が生成されなければなりません。
- g
- SRP アルゴリズムプリミティブジェネレーターです。ユーザーごとの設定ではなく、既知の固定パラメーターとなります。
org.jboss.security.srp.SRPConf
ユーティリティクラスはg
の設定を複数提供します。 これにはSRPConf.getDefaultParams().g()
により取得される適切なデフォルトなどが含まれます。 - N
- SRP アルゴリズムセーフプライムモジュールです。ユーザーごとの設定ではなく、既知の固定パラメーターとなります。 org.jboss.security.srp.SRPConf ユーティリティクラスは
org.jboss.security.srp.SRPConf
は N の設定を複数提供します。これにはSRPConf.getDefaultParams().N()
より取得される適切なデフォルトなどが含まれます。
例14.14 SRPVerifierStore インターフェース
package org.jboss.security.srp; import java.io.IOException; import java.io.Serializable; import java.security.KeyException; public interface SRPVerifierStore { public static class VerifierInfo implements Serializable { public String username; public byte[] salt; public byte[] g; public byte[] N; } public VerifierInfo getUserVerifier(String username) throws KeyException, IOException; public void setUserVerifier(String username, VerifierInfo info) throws IOException; public void verifyUserChallenge(String username, Object auxChallenge) throws SecurityException; }