大変ご無沙汰しております。もはやセキュリティ技術者とはいえない状態でわけのわからない仕事に忙殺されております。さて、今日は Java の話題です。Java SE 6のリリースが2006年12月でしたから、かれこれ5年、ようやく2011年7月28日 Java SE 7 がリリースされました。今日は「祝 Java SE 7 リリース記念」ということで暗号、セキュリティ、SSL/TLSの部分を中心に変更点を見ていこうと思います。
早速ダウンロード
7月28日になって何度もダウンロードページを訪れていたんですが、日本時間で夜の10時か11時頃にようやくダウンロードできるようになっていたみたいです。バージョンを見るとこんな感じ、、、
一昨日、Java SE 7 Preview Release b147 というのを落としたんですが、内容的には同じもののようです。% java -version java version "1.7.0" Java(TM) SE Runtime Environment (build 1.7.0-b147) Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)
サポートするJCEプロバイダの差分をみてみましょう
Java SE 7 で変更点のひとつの目玉は楕円暗号のサポートなんだそうです。 Java SE 6 と Java SE 7(b147) でJCE(Java Cryptographic Extension)プロバイダの提供物の違いをdiffを取ってつらつら眺めてみました。 全体的にsun実装の内部パッケージ名がcom.sun.net.ssl.internalからsun.securityに変更になっているようです。
| Java SE 6 | Java SE 7(b147) |
|---|---|
| SUN 1.6 | SUN 1.7 |
| CertStore.LDAPのパッケージ名が変更になっただけ | |
| SunRsaSign 1.6 | SunRsaSign 1.7 |
| バージョン変更のみ | |
| なし | SunEC 1.7 |
| 楕円暗号のプロバイダが新規提供 | |
| SunJSSE 1.6 | SunJSSE 1.7 |
| TLSv1.1、TLSv1.2の新規提供。内部パッケージ名の変更 | |
| SunJCE 1.6 | SunJCE 1.7 |
| KeyGeneratorでSunTls12Prfの新規提供 | |
| SunJGSS 1.0 | SunJGSS 1.7 |
| バージョン変更のみ | |
| SunSASL 1.5 | SunSASL 1.7 |
| SASLプロバイダ。NTLM認証の新規提供 | |
| XMLDSig 1.6 | XMLDSig 1.7 |
| XML署名。W3C Canonical XML 1.1の新規サポート | |
| SunPCSC 1.6 | SunPCSC 1.7 |
| バージョン変更のみ | |
| SunMSCAPI 1.6 | SunMSCAPI 1.7 |
| Windows版のみ提供のMS CAPIを使ったプロバイダ。 SignatureでNONEwithRSA、SHA256withRSA、SHA384withRSA、SHA512withRSAの 新規サポート | |
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)どっちが正しいんでしょうね?時間のあるときみてみようと思います。
楕円暗号(Elliptic Curve Cryptography)のサポート
Java SE 7になってようやく楕円暗号のためのJCEプロバイダであるSunECが新たに提供されるようになりました。ECDH、ECDSAをサポートしておりSSL/TLSや署名なんかにちゃんと使えます。 署名アルゴリズムについては以下をサポートしています。
| SunECでサポートする署名アルゴリズム |
|---|
| NONEwithECDSA |
| SHA1withECDSA |
| SHA256withECDSA |
| SHA384withECDSA |
| SHA512withECDSA |
| 曲線名 | オブジェクト識別子 |
|---|---|
| secp112r1 | 1.3.132.0.6 |
| secp112r2 | 1.3.132.0.7 |
| secp128r1 | 1.3.132.0.28 |
| secp128r2 | 1.3.132.0.29 |
| secp160k1 | 1.3.132.0.9 |
| secp160r1 | 1.3.132.0.8 |
| secp160r2 | 1.3.132.0.30 |
| secp192k1 | 1.3.132.0.31 |
| secp192r1,NIST P-192,X9.62 prime192v1 | 1.2.840.10045.3.1.1 |
| secp224k1 | 1.3.132.0.32 |
| secp224r1,NIST P-224 | 1.3.132.0.33 |
| secp256k1 | 1.3.132.0.10 |
| secp256r1,NIST P-256,X9.62 prime256v1 | 1.2.840.10045.3.1.7 |
| secp384r1,NIST P-384 | 1.3.132.0.34 |
| secp521r1,NIST P-521 | 1.3.132.0.35 |
| X9.62 prime192v2 | 1.2.840.10045.3.1.2 |
| X9.62 prime192v3 | 1.2.840.10045.3.1.3 |
| X9.62 prime239v1 | 1.2.840.10045.3.1.4 |
| X9.62 prime239v2 | 1.2.840.10045.3.1.5 |
| X9.62 prime239v3 | 1.2.840.10045.3.1.6 |
| sect113r1 | 1.3.132.0.4 |
| sect113r2 | 1.3.132.0.5 |
| sect131r1 | 1.3.132.0.22 |
| sect131r2 | 1.3.132.0.23 |
| sect163k1,NIST K-163 | 1.3.132.0.1 |
| sect163r1 | 1.3.132.0.2 |
| sect163r2,NIST B-163 | 1.3.132.0.15 |
| sect193r1 | 1.3.132.0.24 |
| sect193r2 | 1.3.132.0.25 |
| sect233k1,NIST K-233 | 1.3.132.0.26 |
| sect233r1,NIST B-233 | 1.3.132.0.27 |
| sect239k1 | 1.3.132.0.3 |
| sect283k1,NIST K-283 | 1.3.132.0.16 |
| sect283r1,NIST B-283 | 1.3.132.0.17 |
| sect409k1,NIST K-409 | 1.3.132.0.36 |
| sect409r1,NIST B-409 | 1.3.132.0.37 |
| sect571k1,NIST K-571 | 1.3.132.0.38 |
| sect571r1,NIST B-571 | 1.3.132.0.39 |
| X9.62c2tnb191v1 | 1.2.840.10045.3.0.5 |
| X9.62 c2tnb191v2 | 1.2.840.10045.3.0.6 |
| X9.62 c2tnb191v3 | 1.2.840.10045.3.0.7 |
| X9.62 c2tnb239v1 | 1.2.840.10045.3.0.11 |
| X9.62 c2tnb239v2 | 1.2.840.10045.3.0.12 |
| X9.62 c2tnb239v3 | 1.2.840.10045.3.0.13 |
| X9.62 c2tnb359v1 | 1.2.840.10045.3.0.18 |
| X9.62 c2tnb431r1 | 1.2.840.10045.3.0.20 |
| Java SE 7 SunJSSEプロバイダの提供する楕円系CipherSuites |
|---|
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 |
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 |
| TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 |
| TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 |
| TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA |
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA |
| TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA |
| TLS_ECDH_RSA_WITH_AES_256_CBC_SHA |
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 |
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 |
| TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 |
| TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 |
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA |
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA |
| TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA |
| TLS_ECDH_RSA_WITH_AES_128_CBC_SHA |
| TLS_ECDHE_ECDSA_WITH_RC4_128_SHA |
| TLS_ECDHE_RSA_WITH_RC4_128_SHA |
| TLS_ECDH_ECDSA_WITH_RC4_128_SHA |
| TLS_ECDH_RSA_WITH_RC4_128_SHA |
| TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA |
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA |
| TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA |
| TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA |
| TLS elliptic_curves拡張にある曲線名 |
|---|
| secp256r1 |
| sect163k1 |
| sect163r2 |
| secp192r1 |
| secp224r1 |
| sect233k1 |
| sect233r1 |
| sect283k1 |
| secp384r1 |
| sect409k1 |
| sect409r1 |
| secp521r1 |
| sect571k1 |
| sect571r1 |
| secp160k1 |
| secp160r1 |
| secp160r2 |
| sect163r1 |
| secp192k1 |
| sect193r1 |
| sect193r2 |
| secp224k1 |
| sect239k1 |
| secp256k1 |
その他気になった変更点
セキュリティ関係の変更点はここにまとめらているんですが、その中で気になったところをかいつまんで紹介したいと思います。
- JSSE(SSL/TLS), TLS 1.1, TLS 1.2
- TLSv1.1, TLSv1.2 がサポートされるようになりました。
- JSSE(SSL/TLS) Connection-sensitive trust management
- SSL/TLSで使われるアルゴリズムを署名アルゴリズム等弱い物を使わない等指定できるようです。 証明書の中のアルゴリズムまで制限できるのか気になるところ。
- JSSE(SSL/TLS) Endpoint verification
- HostnameVerifier()を定義すれば、 SSL/TLSのホストの一致確認方法を実装側で 制御できるようです。逆にホスト名をチェックしないこともできたり、証明書のへんなところに入っている ホスト名であっても認証できるようにしたりできますね。
- JSSE(SSL/TLS) TLS renegotiation
- 2009年3月に発表されたSSL rebindingやSSL renegotiationといわれるSSL/TLSの仕様の欠陥をついた攻撃を防ぐためのTLS renegotiation拡張をサポートしているそうだ。
- JSSE(SSL/TLS) Server Name Indication (SNI) for JSSE client
- SNI拡張がサポートされた。確かにパケットキャプチャするとClientHelloに入っている。一台のウェブサーバーで複数のバーチャルホストに対してちゃんとHTTPS接続することができるようになります。これはテスト目的で前から非常に欲しかった機能。
以上、Java SE 7 リリース記念ということで、JCE関連の機能の変更点をみてみました。やべやべ、もう寝ないとorz
参考リンク
- Java™ Cryptography Architecture (JCA) Reference Guide
- Java™ SE 7 Release Security Enhancements
- Java™ Cryptography Architecture Oracle Providers Documentation for Java Platform Standard Edition 7
- Java™ PKI Programmer's Guide
関連記事>
- 祝 Java SE 7 リリース記念「JCEはどうなってんの?」 (2011.07.29)
- 祝 Java SE 7 リリース記念(第2弾)「証明書検証の弱いアルゴリズムの制限機能」 (2011.08.01)
- 祝 Java SE 7 リリース記念(第3弾) 「世界最強(かもしんない)CipherSuite一覧の更新」 (2011.08.03)
変更履歴
- 2011-07-31 参考リンクにおいてリンク切れを修正、JCA、PKIを追加
Sun SASL providerで利用されてるハッシュ関数ってやっぱりMD5なんすねぇ・・・.
気になるなぁー