3

さて、私は独自のバイナリ形式をパックしました。これは基本的に、いくつかの異なるラスター データセットの緩やかなパッキングです。とにかく、これを読んで開梱するだけの簡単な作業でした。しかし、次のバージョンでは、ラスター xml データは AES-256 を使用して暗号化されるようになりました (私の選択ではなく、選択の余地もありません)。

これで基本的に、アンパッケージャーを変更できるように、彼らが使用している SALT とともに AES キーが送信されました。

これらはキーではなく、単なる例であることに注意してください。

それぞれ 63 バイト長の ASCII 文字です。

Key: "QS;x||COdn'YQ@vs-`X\/xf}6T7Fe)[qnr^U*HkLv(yF~n~E23DwA5^#-YK|]v."
Salt: "|$-3C]IWo%g6,!K~FvL0Fy`1s&N<|1fg24Eg#{)lO=o;xXY6o%ux42AvB][j#/&"

基本的には、C++ CryptoAPI を使用してこれを解読したいと考えています (今週ここにいる唯一のプログラマーでもあります。これは明日ライブになります。私たちのせいではありません)。これを実装するための簡単なチュートリアルを探しました。残念ながら、ソルトとキーの両方を別々に持っているチュートリアルさえ見つけることができません。基本的に、私が今持っているのは、BYTEの配列を受け取る小さな関数だけです。その長さとともに。これどうやってするの?

私は午前中のほとんどを、cryptoAPI の表と裏を作成することに費やしました。しかし、うまくいかない期間:(

編集

だから私は彼らがそれを暗号化する方法を尋ねました。彼らは C# を使用し、RijndaelManaged を使用していますが、これは私の知る限り AES と同等ではありません。

EDIT2

ようやく何が起こっているのか正確にわかり、間違ったキーが送られてきました。

彼らは次のことを行っています。

パディング = PKCS7 CipherMode = CBC キーは、16 進数で 32 バイトのセットとして定義されます。IV も 16 進数で 32 バイトのセットとして定義されます。

私が彼らに尋ねると、彼らは塩を取り除いた。

wincrypt.h ヘッダー ファイルを使用して、CryptoAPI でこれらを設定するのはどれくらい難しいですか?

4

2 に答える 2

5

AES-256 は 256 ビット キーを使用します。理想的には、システム内の各キーの可能性が等しくある必要があります。63 バイトの文字列は 504 ビットになります。最初に、63 文字の文字列を 256 ビットに変換する方法を理解する必要があります (指定したサンプルは base64 でエンコードされていません)。次に、「ソルト」は AES の本質的な部分ではありません。Cipher-Block-Chaining モードの初期化ベクトル (IV) を参照している可能性があります。または、何らかの方法でキーを更新していることを参照している可能性があります。

推測すると、「SALT」とは IV を意味し、具体的には CBC モードを意味すると思います。

CAPI 関数を使用するときは、これらすべてを知っておく必要があります (例: decrypt )。

これらすべてが混乱を招くように聞こえる場合は、設計を変更して、これらすべてを正しく行うことを心配する必要がないようにすることをお勧めします。クリプトは難しい。一歩間違えば、すべてのセキュリティが無効になる可能性があります。Stick Figure Guide to AESのこのコメントを見てください。

更新: C++ CAPIの大まかな出発点については、これを参照してください。256 ビット (256 ビット / (4 ビット / 文字) == 64 文字) を取得するには、64 文字の 16 進文字列が必要です。文字を自分でビットに変換できます。

繰り返しますが、IV とキーを使って速くてルーズにプレイすると、悲惨な結果になる可能性があることに注意する必要があります。私は AES/Rijndael を数学とゲート レベルまで深く研究し、独自の実装も作成しました。ただし、本番環境のコードでは、転送中のデータに対して可能な限り、十分にテストされた TLS 実装を使用することに固執しています。保存されているデータであっても、より高いレベルのライブラリを使用する方がよいでしょう。

于 2009-10-06T14:04:42.963 に答える
-5

Rijndael はAESのアルゴリズム名です。

于 2009-10-06T14:34:12.793 に答える