2011年10月17日より米国シカゴで開催された国際会議 "18th ACM Conference on Computer and Communications Security" において、 Tibor Jager と Juraj Somorovsky により "How to Break XML Encryption" という発表がありました。 W3C勧告であるXML文書の暗号化の標準 "XML Encryption Syntax and Processing, 10 Dec 2002" においてAESでも3DESでもCBC(Cipher Block Chaining)モードを 使っている限り解読される可能性があるというものです。
これに対しW3Cは "Some notes on the recent XML Encryption attack" というコメントを発表しました。
これはぶっちゃけちゃうと「CBC使わずにGCM(Galois Counter Mode)なんかを使ってね。 標準にもなってるしね。」という内容なんですが、 標準になっているといってもOPTIONALですよね。
引用:W3C XMLEnc 5.2.4 AES-GCMAES-GCMをサポートするXML暗号化ライブラリなんてあるのかと ちょっと調べてみました。
- http://www.w3.org/2009/xmlenc11#aes128-gcm (OPTIONAL)
- http://www.w3.org/2009/xmlenc11#aes256-gcm (OPTIONAL)
手軽に手に入りやすそうな比較的メジャーなJava XML暗号ライブラリというと こんなところかと思います。
- Apache Santuario/XML Security for Java - サポートするアルゴリズム情報
- IAIK XML Security Toolkit (XSECT) - サポートするアルゴリズム
- IBM SDK Java Technology Edition Verion 7
結局、W3Cは「GCM使えばいいじゃん」というものの「使えそうな実装がない」 という、何ともとほほな状況であることがわかりました。 自前でAES-GCM対応するしかないですかね。
Decrypt したテキストの integrity / non-repudiation を確保するためには sig+enc+sig, そうでなければ、enc+sig にするというのが現実線ですかね。