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-GCM
- http://www.w3.org/2009/xmlenc11#aes128-gcm (OPTIONAL)
- http://www.w3.org/2009/xmlenc11#aes256-gcm (OPTIONAL)
AES-GCMをサポートするXML暗号化ライブラリなんてあるのかと ちょっと調べてみました。

手軽に手に入りやすそうな比較的メジャーなJava XML暗号ライブラリというと こんなところかと思います。

Sun/Oracle JavaのXMLはXML署名しか含まれていません。 サポートするアルゴリズム情報をApache, IAIKで見てみましたが AES-GCMはサポートされていないようです。 IBM Java SDKについても検索してみましたが、どうやらGCMはサポートしていないようです。 Javaでこれだけダメなんだから、他の言語用のライブラリはもっと ひどいはず。Microsoft .NETについてもGCM必須なSuite-B対応が進んでいるので もしやとおもいましたが、どうやらダメなようです。

結局、W3Cは「GCM使えばいいじゃん」というものの「使えそうな実装がない」 という、何ともとほほな状況であることがわかりました。 自前でAES-GCM対応するしかないですかね。