バックグラウンド
私は静的なWebコンテンツのユーザーのために動的な認証スキームの開発を可能にするシステムを設計しています。動機は、大量の複雑でありながら機密性の高いWebコンテンツを事前に生成し、Webサーバーによって強制されるCookieベースの(可逆的に暗号化された情報を埋め込む)認証を使用して静的に提供することです。AEADモードの暗号化プリミティブを使用します。
問題
一定期間、たとえば1週間(現在有効なペア)有効なIVECとキーを生成する必要があります。また、過去のIVEC /キーもたとえば2週間有効(履歴的に有効)であり、履歴的に有効なシークレットで暗号化されたデータは、現在有効なIVEC/KEYで再暗号化されます。
私が必要としているのは、乱数とパスフレーズのシードであり、64ビットまたは128ビットの数値ブロックをインデックス付きで生成できる決定論的CSPRNGです。架空のCSPRNGのインデックス要素の1つとして「1970年1月1日」から数週間を使用すると、時間の経過とともにキーを自動的に変更するシステムを構築できるはずです。
私が検討しているアプローチ
現在、cryptoppにはそのような機能が見当たらないか、用語を十分に理解しています。cryptoppは暗号化ライブラリの中で最も先進的であるため、別の暗号化ライブラリを見つける自信がありません。したがって、実装が見つからない場合は、自分で実装する必要があります。連結されたデータから静的な文字列構造を生成し、それをハッシュ(以下に表示)することでうまくいきますか?
RIPEMD160(RandomPreGeneratedFixedNonce:PassPhrase:UInt64SinceEpoch:128BitBlockIndexNumber);
注:ブロック番号は割り当てられ、通常の構造になります。たとえば、128ビットダイジェストの場合、ブロック0の最初の64ビットはivec用になり、要素1のすべては128ビットキー用になります。
これは適切なアプローチですか(つまり、暗号的に安全ですか)?
-編集:コメントを受け入れる投稿-
少し考えた後、私は最初にパスフレーズとナンス/ソルトと考えていたものを16バイト(クリプトグラフィックオールストロング)キーにマージし、PKCS#5で概説されている手法を使用して複数の時間ベースのキーを導出することにしました。パスフレーズは使用されていないため、塩は必要ありません。