nonce、ランダムに生成されたトークン
nonce はランダムに生成される暗号トークンであり、リプレイ・アタックを防ぐために使用されます。 nonce は SOAP メッセージ内の任意の位置に挿入することができますが、通常は <UsernameToken> エレメント内に挿入されます。
nonce を使用しない場合に、非セキュア・トランスポート (HTTP など) を使用して UsernameToken がマシン間で受け渡されると、トークンがインターセプトされて、リプレイ・アタックで使用されることがあります。 クライアントとサーバーの間でユーザー名トークンが伝送されると、同じパスワードが再使用される場合があります。 そのため、アタックに対するぜい弱さが解消されません。 ユーザー名トークンは、XML デジタル署名と XML 暗号化を使用している場合であっても、 盗まれる可能性があります。ただし、nonce を非セキュア・トランスポートで使用した場合、それだけではリプレイ問題に対処することはできません。nonce は、トランスポート・レベルであっても、メッセージ・レベルであっても、保護されている通信チャネルを経由して SOAP メッセージが転送されている場合には非常に役立ちます。
これらのリプレイ・アタックを排除するために、<wsse:UsernameToken> エレメント内に <wsse:Nonce> および <wsu:Created> エレメントが生成され、メッセージの妥当性検査に使用されます。 サーバーは、 <wsu:Created> エレメントによって指定された nonce 作成時刻と現在時刻との差が指定された時間範囲内であることを確認することによって、 メッセージの存続期間を検査します。 またサーバーは、使用された nonce のキャッシュを検査して、 受信 SOAP メッセージ内のユーザー名トークンが指定された時間範囲内で処理されていないことを確認します。 これら 2 つのフィーチャーは、 ユーザー名トークンがリプレイ・アタックに使用される可能性を少なくするために使用されます。
UsernameToken への nonce の追加は、ユーザー名トークンのトークン生成プログラムで指定できます。 UsernameToken のトークン生成プログラムを指定すると、ユーザー名トークン内に nonce を組み込む場合に、「nonce の追加」オプションを選択することができます。