APIコールのHMACシグネチャを作成するためにAESを使用します。ノンスが何であるか、なぜ重要であるのか理解していますが、実施される。AES:HMAC用の新しいキーを作成するためにナンスを使用
ノンスを使用してクライアントの秘密鍵を変更し、リプレイ攻撃で容易に悪用される可能性のあるコールに署名するための新しいシングルユース鍵を生成する考えがありました。
基本的な前提は、ログイン時に秘密鍵を取得し、transactionIDと新しいnonceを作成して返すセットアップAPIプロシージャを呼び出します。ユーザーは、独自の秘密鍵とナンスを組み合わせて、TransactionIDと他のいくつかのものに署名します。次に、サーバーは、そのユーザーの現在アクティブなノンスを使用して、このシグネチャの照合を試みます。
サーバーは自動的に古いナンスを消去し、新しいセットアップ呼び出しが行われるとそのサーバーを上書きします。このため、ユーザーは常にこのペアの順序に従わなければなりません(古いノンスが削除され、サーバーこの署名を受け入れなくなります)。
ノンスを使用する有効な方法であれば、クライアントのキーと組み合わせて有効なシークレットキーを取得するにはどうすればよいですか?
私は、AESプロバイダをこのように生成します。
private static AesCryptoServiceProvider GetProvider(byte[] key, byte[] IV)
{
AesCryptoServiceProvider result = new AesCryptoServiceProvider();
result.BlockSize = 128;
result.KeySize = 256;
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7;
result.IV = IV;
result.Key = key;
return result;
}
は、私は私のキーは長く、常に32バイトAES-256を使用しています。しかし、ノンスを使って新しい鍵を作成したいのであれば、結果の文字列はもはや32バイトにならないので、単に連結することはできません。
固定長のハッシュ関数を連結して使用し、結果を32バイト長に戻す必要がありますか?または、AESCryptoServiceProviderのコンストラクタ/メソッドがあり、私が不足している不一致を自動的に処理しますか? または、私は平文のナンスを署名に付け加えて、サーバがそれらを別々に読んで直接チェックすることにしましたか?
あなたの問題が解決された場合は、[同意する]ことができます(https://meta.stackexchange.com/q/5234/266187)。それができなかったら、間違っているものを広げてください。 –