トップ回答者
C#でW3C方式の暗号化を実装するには

質問
回答
-
実践したことはありませんが、XML暗号化とXMLデジタル署名 に手順は書かれています。そこには例示されたkw-aes128を示すURLフィールド も用意されているので実現できると思います。
-
外池と申します。
よくよく考えて頂きたいのですが、マシンのハードウェアもプログラムの実装も異なる2つの環境の間で、暗号化されたデータをやりとりしようとすれば、暗号化に関するインターフェイスやアルゴリズムは厳密に定められていなければなりません。その点で「変換の決まり事があるというわけでもなさそうです。」というご理解は、不用意過ぎると思います。
最初にお示しになったURLの資料で、特に着目されている「kw-aes128」の部分ですが、これは、暗号化につかった鍵(Key)をさらに暗号化するためのものです。データ(ファイル)全体をブロックに分けて暗号化する方法は、同じURLの「5.2」で説明されており、IVも現れます。こちらを読まれることをお奨めします。私がざっと読んだところ「5.2.1」のTriple DESは、.Net Frameworkで用意されているTriple DESのクラスと互換なように思います。
(ホームページを再開しました)- 回答としてマーク 山本春海 2010年11月4日 5:22
-
外池です。すいません、補足です。
そもそも・・・、最初に示されたURLは、XMLの暗号化に関するものですよね? ご質問に対する解が直接見つかるものではないように思います。それよりも、例えばTriple DESについては、参考文献として挙げられている「ANSI X9.52: Triple Data Encryption Algorithm Modes of Operation. 1998.」をご覧になるべきかと思います。
(ホームページを再開しました) -
外池です。文字で覚えられるパスワードをKeyやIVのバイト列に変換するための方法は、いくつかサンプルがあります。http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/113514.aspx とか。
RFCだと、RFC2898(http://www.ietf.org/rfc/rfc2898.txt)が良いようですね。.Net FrameworkにRfc2898DeriveBytesというクラスで用意されています。
ただ・・・、Tank2005さんが互換性を持たせたいと考えておられる他のソフトがどのような方式を採用しているのかがわかりませんので、ここまでかなぁ。
(ホームページを再開しました)
すべての返信
-
実践したことはありませんが、XML暗号化とXMLデジタル署名 に手順は書かれています。そこには例示されたkw-aes128を示すURLフィールド も用意されているので実現できると思います。
-
外池と申します。
よくよく考えて頂きたいのですが、マシンのハードウェアもプログラムの実装も異なる2つの環境の間で、暗号化されたデータをやりとりしようとすれば、暗号化に関するインターフェイスやアルゴリズムは厳密に定められていなければなりません。その点で「変換の決まり事があるというわけでもなさそうです。」というご理解は、不用意過ぎると思います。
最初にお示しになったURLの資料で、特に着目されている「kw-aes128」の部分ですが、これは、暗号化につかった鍵(Key)をさらに暗号化するためのものです。データ(ファイル)全体をブロックに分けて暗号化する方法は、同じURLの「5.2」で説明されており、IVも現れます。こちらを読まれることをお奨めします。私がざっと読んだところ「5.2.1」のTriple DESは、.Net Frameworkで用意されているTriple DESのクラスと互換なように思います。
(ホームページを再開しました)- 回答としてマーク 山本春海 2010年11月4日 5:22
-
外池です。すいません、補足です。
そもそも・・・、最初に示されたURLは、XMLの暗号化に関するものですよね? ご質問に対する解が直接見つかるものではないように思います。それよりも、例えばTriple DESについては、参考文献として挙げられている「ANSI X9.52: Triple Data Encryption Algorithm Modes of Operation. 1998.」をご覧になるべきかと思います。
(ホームページを再開しました) -
「変換の決まり事」は暗号化アルゴリズムを指したものではなかったのですが、誤解を招く表現であったようなのでお詫びします。今の状況では解決のめどが立ちそうにないため、海外のMSDNフォーラムに誘導することにします。
-
相変わらず実践したこともなく書きますが、aes128-cbc ならこう書かれてます。
[AES] is used in the Cipher Block Chaining (CBC) mode with a 128 bit initialization vector (IV). The resulting cipher text is prefixed by the IV. If included in XML output, it is then base64 encoded.
暗号には詳しくないんですが、IVが必要な場合も埋め込まれてる場合もあるってこと…?
-
外池です。
「変換の決まり事」は、もちろん、暗号化アルゴリズムだけじゃなくて、ユーザーフレンドリーな文字で覚えられるような「パスワード」をビット列のKeyやIVにどのように変換するかの関係もあることは理解しています。
それこそを決めるべき(独自のプログラムを書くなら)、あるいは、
それこそを調べるべき(他のプログラムと互換性を持たせたいなら)
と思いますが、違いますかね? 海外フォーラムに投稿された記事によれば、特定の文書フォーマットに取り組まれているようですので、後者ですよね?
で、特定の文書フォーマットの記事をざっと読んでみたのですが、これを読んだだけではすぐに暗号化の実装は難しいと思います。ご覧になっている記事に書かれていることは、どのようなアルゴリズムを用いて文章が暗号化されているかを示すメタデータの説明ですから・・・。
(ホームページを再開しました) -
外池です。文字で覚えられるパスワードをKeyやIVのバイト列に変換するための方法は、いくつかサンプルがあります。http://blogs.msdn.com/b/shawnfa/archive/2004/04/14/113514.aspx とか。
RFCだと、RFC2898(http://www.ietf.org/rfc/rfc2898.txt)が良いようですね。.Net FrameworkにRfc2898DeriveBytesというクラスで用意されています。
ただ・・・、Tank2005さんが互換性を持たせたいと考えておられる他のソフトがどのような方式を採用しているのかがわかりませんので、ここまでかなぁ。
(ホームページを再開しました) -
こんにちは、Tank2005 さん
MSDN フォーラムのご利用ありがとうございます。フォーラム オペレーターの山本です。
今回、皆様からアドバイスをいただきましたので、有効な情報と思われるものに勝手ながら一旦回答としてマークさせていただきました。
回答くださった皆さん、ありがとうございました。
実装された結果、またその上で疑問点などありましたら、詳しい状況を再投稿いただければと思います。
また、他の方も、もしこのスレッドの内容に関して何か情報をお持ちの方がいらっしゃいましたら、是非情報提供をお願いいたします。
今後とも、MSDN フォーラムをよろしくお願いいたします。
マイクロソフト株式会社 フォーラム オペレーター 山本 春海- 編集済み 山本春海 2010年11月4日 5:29 修正