13.2. セキュアなリモートパスワード情報の設定
既存のセキュリティ情報ストアと統合する
SRPVerifierStore
インターフェースの実装を提供する MBean サービスを作成する必要があります。SRPVerifierStore
インターフェースは 例13.2「SRPVerifierStore インターフェース」 に表示されています。
注記
SRPVerifierStore
インターフェースのデフォルト実装は、セキュリティの実稼働環境には推奨されません。すべてのパスワードハッシュ情報がシリアル化されたオブジェクトのファイルとして使用可能である必要があるためです。
例13.2 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; }
SRPVerifierStore
実装の主要機能は、SRPVerifierStore.VerifierInfo
オブジェクトへのアクセスを特定のユーザー名に提供することです。getUserVerifier(String)
メソッドは SRP アルゴリズムが必要なパラメータを取得するためユーザーの SRP セッションの開始時に SRPService
より呼び出されます。VerifierInfo
オブジェクトの要素は以下のとおりです。
- user name
- ログインに使用するユーザー名または ID です。
- verifier
- アイデンティティの証拠としてユーザーが入力するパスワードの一方向ハッシュまたは PIN です。
org.jboss.security.Util
クラスにはそのパスワードハッシュアルゴリズムを実行するcalculateVerifier
メソッドがあります。出力パスワードはH(salt | H(username | ':' | password))
の形式を取り、H
は RFC2945 により定義されたとおりのセキュアハッシュ関数 SHA です。ユーザー名は UTF-8 エンコードを使用して文字列からbyte[]
に変換されます。 - salt
- データーベースが危害を受けた場合に、データベースパスワードベリファイアにブルートフォース、辞書攻撃されにくくするために使用される乱数です。ユーザーの既存のクリアテキストのパスワードがハッシュされたときに、強固な暗号化形式の乱数アルゴリズムにより値が生成されます。
- g
- SRP アルゴリズムプリミティブジェネレータです。これはユーザーごとの設定ではなく、既知の固定パラメータとなります。
org.jboss.security.srp.SRPConf
ユーティリティクラスは、SRPConf.getDefaultParams().g()
により取得された適切なデフォルトなどg
に対して設定を複数提供します。 - N
- SRP アルゴリズムセーフプライムモジュールです。これはユーザーごとの設定ではなく、既知の固定パラメータとなります。
org.jboss.security.srp.SRPConf
ユーティリティクラスはSRPConf.getDefaultParams().N()
により取得できる適切なデフォルトなどのN
に対して設定を複数提供します。
手順13.1 既存のパスワードストアを統合する
既存のパスワードストアを統合するためのステップを理解するためにはこの手順をお読みください。
ハッシュされたパスワード情報ストアを作成します
パスワードがすでに復元できないハッシュされた形式で保存されている場合は、これはユーザーごとにしか行えません (例えば、アップグレード手順の一環として行います)。noOp
メソッドまたはストアが読み取り専用であることを示す例外を投げるメソッドとして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
(「セキュアリモートパスワード (SRP) の例」 を参照) の Java プロパティファイル実装を使用して MBean を実装することもできます。