12.5.2. セキュアリモートパスワード (SRP) プロトコルの設定

セキュアリモートパスワード (SRP) プロトコルをアプリケーションで使用するには、最初に SRPVerifierStore インターフェースを実装する MBean を作成します。実装に関する詳細は SRPVerifierStore 実装 で確認できます。

手順12.3 既存パスワードストアの統合

  1. ハッシュ化されたパスワード情報ストアを作成します。

    パスワードが既に不可逆的にハッシュ化され、保存されている場合、この作業をユーザーごとに行う必要があります。
    noOP メソッドとして setUserVerifier(String, VerifierInfo) を実装するか、ストアが読み取り専用であることを知らせる例外をスローするメソッドとして setUserVerifier(String, VerifierInfo) を実装することができます。
  2. SRPVerifierStore インターフェースを作成します。

    作成したストアより VerifierInfo を取得できるカスタムの SRPVerifierStore インターフェース実装を作成します。
    verifyUserChallenge(String, Object) を使用すると、SafeWord や Radius のような既存のハードウェアトークンベースのスキームを SRP アルゴリズムへ統合することができます。このインターフェースメソッドは、クライアントの SRPLoginModule 設定で hasAuxChallenge オプションが指定されている場合のみ呼び出されます。
  3. 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() より取得される適切なデフォルトなどが含まれます。

例12.13 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;
}