3

対称暗号化のために CNG の AES に AES-OFB ラッパーを実装しようとしています。

理解できない問題が発生しました... AES アルゴリズム ハンドル (BCRYPT_AES_ALGORITHM) を作成し、AES キーをインポートしました。次に、平文/暗号文の XOR で使用する 16 バイトのキーストリームを生成しようとします。このメカニズムを初めて実行すると、keyStreamPtr はランダムなバイト ストリームから別のストリームに変更されますが、これを 3 回目に行うと (キーストリームの 16 バイトの 3 番目のセット)、同じ出力が得られ始め、それが永久に発生します。

            status = BCryptEncrypt((BCRYPT_KEY_HANDLE)keyHandle, 
                                   keyStreamPtr,   
                                   keyStreamLength,
                                   NULL, //no padding
                                   NULL, // no IV
                                   0,  // no IV
                                   keyStreamPtr,   
                                   keyStreamLength,
                                   &Length, 
                                   0); // no option flags

誰もこのようなものを見たことがありますか?なぜ AES は、入力された平文と完全に同一の暗号文を返すのでしょうか? 繰り返しますが、これは AES-OFB 実装のためのものです...おそらく私は何か間違ったことをしていますか?

4

1 に答える 1

0

私が考えることができる唯一のことは、キー ストリームを再度暗号化することです。これを行うと、効果的に暗号化/復号化を実行できます: P XOR C XOR C = P ここで、C はキー ストリーム、P はプレーン テキストです。コード内のバッファ/ストリーム処理を確認することをお勧めします。

于 2012-05-08T07:58:16.533 に答える