<?xml version="1.0" encoding="UTF-8"?> 
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>自堕落な技術者の日記</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/" />
<link rel="service.post" type="application/x.atom+xml" href="http://cms.blog.livedoor.com/atom/blog_id=2799890" title="自堕落な技術者の日記" />
<link rel="hub" href="http://pubsubhubbub.appspot.com" />
<link rel="self" href="http://blog.livedoor.jp/k_urushima/atom.xml" />
<modified>2012-02-13T07:49:05Z</modified> 
<tagline><![CDATA[基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。SkyDeskのインフラ屋な人。テレビ好きで芸能通]]></tagline> 
<id>tag:blog.livedoor.jp,2008:k_urushima</id>
<author>
<name>k_urushima</name> 
</author>
<generator url="http://blog.livedoor.com/" version="1.0">livedoor Blog</generator> 
<copyright>Copyright (c) 2012, k_urushima </copyright>
<entry>
<title>将来Google ChromeがSSL証明書のオンライン失効検証をやめて独自の失効情報プッシュを行うという困った話</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1656214.html" />
<modified>2012-02-12T22:49:02Z</modified> 
<issued>2012-02-13T07:40:49+09:00</issued> 
<id>tag:blog.livedoor.jp,2012:k_urushima.1656214</id>
<summary type="text/plain">
2012年2月5日にGoogleのセキュリティ技術者Adam Langley氏のブログ
&quot;ImperialViolet&quot;において

Revocation checking and Chrome's CRL (05 Feb 2012)
が公開され、ツイッターのタイムラインや

ITmediaニュースの記事「Google Chrome、SSL証明書のオンライン失効チェ...</summary> 
<dc:subject>SSL証明書</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1656214.html">
<![CDATA[<p>
2012年2月5日にGoogleのセキュリティ技術者Adam Langley氏のブログ
<a href="http://www.imperialviolet.org/">"ImperialViolet"</a>において
<a href="http://www.imperialviolet.org/2012/02/05/crlsets.html">
Revocation checking and Chrome's CRL (05 Feb 2012)</a>
が公開され、ツイッターのタイムラインや
<a href="http://www.itmedia.co.jp/news/articles/1202/09/news021.html">
ITmediaニュースの記事「Google Chrome、SSL証明書のオンライン失効チェックを無効に」</a>にもニュースが出て、PKI、認証、セキュリティの関係者の間ではちょっとした騒ぎになったのでご覧になった方も
多いと思います。
</p>
<p>
Langley氏のブログ記事のポイントはこんな感じ
<blockquote>
<ul>
<li>SSL証明書の失効検証をOCSPやCRLをダウンロードしオンラインで検証する方法を
将来のGoogle Chromeではやめにする。</li>
<li>その代わりに各認証局の発行するCRL情報をまとめて軽量化したCRLSetという情報をGoogleからプッシュすることにより、これを失効検証に用いる。</li>
<li>このような方針をとることにした理由は、
<ul>
<li>オンラインで失効検証ができない際、SSL証明書を有効としてしまうブラウザが他にも存在している</li>
<li>オンライン失効検証に係る通信や処理のオーバーヘッドがかなり大きい</li>
</ul>
<li>EV SSLサーバー証明書の検証については、新しい方式を使うかどうかは未定</li>
</ul>
</blockquote>
ここで、
<blockquote>
<b><a href="http://www.itmedia.co.jp/news/articles/1202/09/news021.html">ITmediaニュース記事「Google Chrome、SSL証明書のオンライン失効チェックを無効に」</a>より引用</b><br/>
CAが発行する証明書をめぐっては、2011年に不正なSSL証明書が発行される事件が相次いだことを受け、主要ブラウザメーカーがソフトウェアアップデートを通じて証明書を失効させる措置を取った。<u>Googleは今後、この仕組みを活用して、アップデートを使って失効した証明書のリストを管理していく方針だ</u>としている。
</blockquote>
の記事などにより「将来のGoogle Chromeはオンライン失効検証は行わず、(ブラックリストによる)ソフトウェアの再起動を伴うアップデートにより失効検証する方法を採用する」と勘違いされた方もいらっしゃるようだがImperialVioletのブログを読むと「現在はFireFox、Chrome、IEなど(ブラックリストによる)ソフトウェアアップデートによる失効をきたが」と、現状を紹介しているだけで、将来サポート予定といっているのは「失効リスト(CRLSet)をプッシュする方法(Pushing a revocation list)」であると述べられている。
</p>

<h3><u>それでは将来的にChromeではどのように失効情報提供しようとしているのか？</u></h3>

<p>
Googleはこれまでの
<ul>
<li>(場合によっては巨大な)CRLファイルによるものでもなく</li>
<li>通信オーバーヘッドの大きいOCSPでもなく</li>
<li>迅速に失効情報をアップデートできないブラウザやOSのブラックリストを使う方式でもなく</li>
</ul>
もっと軽量な失効情報のプッシュ方法を考えているそうだ。
</p>

<h3><u>crlsetツールから将来のGoogleの失効情報プッシュを想像する</u></h3>
<p>
「将来のGoogleの失効情報プッシュに関して興味があれば
<a href="https://github.com/agl/crlset-tools">crlset</a>
というオープンソースのツールがあるので、これを見てみろ」とブログにあるので
早速見てみた。
</p>
<p>
GoogleはCRLの代わりにCRLSetというデータにより失効情報をGoogleから配信(プッシュ)しようとしているようだ。
crlsetというコマンドでは、CRLSetと呼んでいるデータをダウンロードしたり、
ダウンロードしたファイルを表示したりということができるようだ。
</p>
<p>
最新のGoogle Goをインストールし試そうと思ったがコンパイルできない。
ここにあるコードはGo1用のコードらしくビルドしようとすると"net/html"やら"json"やらパッケージの
場所やメソッドや不整合が起きる。(ﾑｷｰｰｰｯ!!!)
できるところまで、最新のGo用に書き直したがバカバカしくなってやめてしまった。
Goはコンパイラのチェックが厳しめなので、ちょっとツールを作ったり
試してみたりするのに全く向かない。
</p>
<p>
ソースコード見てもらえばわかる通り"crlset.go"は全く大したことをしていないので、
大まかにPerlで書き直した。(Rubyにすりゃよかったと途中で後悔)
</p>

<h3><u>Google ChromeのCRLSetダウンロードの動き</u></h3>
<p>
"crlset fetch"を実行するとCRLSetをダウンロードするためのメタファイル(XML)がダウンロードされる。
"./crlset fetch"で標準出力に表示されるXMLメタファイルの
内容はこんな感じだ。
<blockquote>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br/>
&lt;gupdate xmlns="http://www.google.com/update2/response" protocol="2.0" server="prod"&gt;<br/>
　&lt;daystart elapsed_seconds="56280"/&gt;<br/>
　&lt;app appid="hfnkpimlhhgieaddgfemjhofmfblmnib" status="ok"&gt;<br/>
　　&lt;updatecheck<br/>
　　　codebase="http://www.gstatic.com/chrome/crlset/100/crl-set-10371439235811702542.crx.data"<br/>
　　　hash="" size="0" status="ok"<br/>
　　　version="100"/&gt;<br/>
　&lt;/app&gt;<br/>
&lt;/gupdate&gt;<br/>
</blockquote>
単にCRLSetというデータファイルの実体と、バージョン(CRLNumberみたいなものだ)を記載しているだけのメタファイルだ。
</p>
<p>
記載されたURLをダウンロードしてみると何かしらのヘッダ領域があり、ZIPファイルのデータがあることがわかる。
ZIPファイルのデータを取り出すと2つのファイルが含まれるZIPアーカイブであることがわかる。
<ul>
<li>manifest.json</li>
<li>crl-set</li>
</ul>
"manifest.json"の方には大した情報は無い。"CRLSet"のデータフォーマットのバージョンが記載されているだけだ。
<blockquote>
{"name": "CRLSet", "version": "0"}
</blockquote>
</p>
<p>
ZIPアーカイブに含まれるもうひとつの"crl-set"ファイルが今回調査すべきメインである。
Google Chromeのオープンソース部分であるChromiumの
<a href="http://src.chromium.org/viewvc/chrome/trunk/src/net/base/crl_set.cc?revision=97640&view=markup">"net/base/crl_set.cc"</a>の
ソースコードにcrl-setファイルのデータ構造の定義が記載されており
ざっくりとしたデータ構造の定義はこんな感じである。
<blockquote>
・crl-setのJSON形式のメタデータのバイト長(2バイト)<br/>
・crl-setのJSON形式のメタデータの値文字列<br/>
・CAや中間CA毎にある失効情報の並び[]<br/>
　・あるCAの失効情報(証明されてない失効リスト相当)<br/>
　　・parent_spki_sha256 - CA証明書のSubjectPublicKeyInfoのSHA256ハッシュ値バイト列<br/>
　　・失効した証明書のシリアル番号の並び(4byte非負整数)<br/>
　　・シリアル番号の並び[]<br/>
　　　・serial_length - シリアル番号のバイト数(1バイト)<br/>
　　　・serial - シリアル番号のバイト列<br/>
注："[]" は同じ要素が繰り返されることを示す
</blockquote>
ここでJSON形式のメタデータの例を以下に示す。
<blockquote>
{ "Version":0,<br/>
　"ContentType":"CRLSet",<br/>
　"Sequence":100,<br/>
　"DeltaFrom":0,<br/>
　"NumParents":35,<br/>
　"BlockedSPKIs":[]}<br/>
</blockquote>
これらの情報からわかる将来のGoogle Chromeで計画しているCRLSetのpush配信の特徴を以下にまとめる。
<ul>
<li>幾つかのCAまたは中間CAの発行するCRLをまとめたファイルである</li>
<li>CAの識別はCA証明書のSubjectPublicKeyInfoフィールドのSHA256ハッシュ値による</li>
<li>CRLSetはデジタル署名で保護されない</li>
<li>CRLSetはHTTP平文で配信される</li>
<li>ただの失効した証明書のシリアル番号のリストである</li>
<li>失効時刻は記載されない</li>
<li>失効理由などCRLエントリ拡張に相当するものは無い</li>
<li>CRLSetの世代管理は番号(Sequence値)により管理されている。(CRLのCRLNumber拡張と同等)</li>
<li>delta CRLにも対応している</li>
</ul>
この方法自体はEV SSLの推進、ガイドライン策定を行っているCA Browser Forumで提案されているものだそうだが、それが会員組織の総意を得られているのかはわからない。(PKI業界で最高に真っ当な有識者である議長のTimさんが納得するとは、ちょっと考えられないと思う。)
</p>
<p>
Googleは、CRLSetファイルをGoogleがプッシュ(=データ配信)するために認証局にCRL提供の呼び掛けを行っていくという事のようだ。
</p>

<h3><u>どれくらいCRLを圧縮できるのか</u></h3>
<p>
一つのCAが発行するCRLに対し、CRLからCRLSetに変換した場合、
ファイルサイズはどれくらい縮小されるのかを予想してみた。
鍵長やシリアル番号の桁数、拡張の有無なども影響するが、
ZIP圧縮の効果もあり概ね40%程度に圧縮されるものと思われる。

<table class="tbl1">
<tbody>
<tr><th>失効証明書数</th><td>131,967</td><td>4,596</td></tr>
<tr><th>シリアル番号バイト数</th><td>16</td><td>16</td></tr>
<tr><th>CRLファイルサイズ</th><td>4.4MB</td><td>157KB</td></tr>
<tr><th>CRLSetファイルサイズ(予想,ZIP圧縮前)</th><td>2.2MB</td><td>78KB</td></tr>
<tr><th>CRLSetファイルサイズ(予想)</th><td>1.8MB</td><td>63KB</td></tr>
</tbody>
</table>

CRLSetではZIP復元処理が2回あるのでCRLのASN.1の
処理コストと比較して5分5分といったところだろうか。
</p>
<p>
ちなみに、現在プッシュしているCRLSetはたった35のルートCA,中間CAしかサポートしていない。
</p>

<h3><u>ImperialVioletのブログの主張のおかしな点</u></h3>
<p>
「オンライン失効検証ができない場合様々な問題が起きる」として幾つか問題点を述べている。
<ul>
<li>「"captive portal"(ホテルのインターネットなどでウェブブラウザで認証してから
ネットが使えるようになる仕組みの事)などでは接続前はオンラインの失効検証が
できない」としているが、その時点ではホテルのサービスの認証のページしか繋がる
必要が無いのであまり大きなリスクとも思えない。特定の問題なので
別に解決策もあると思う。</li>
<li>
「認証局のCRLを提供するリポジトリやOCSPレスポンダがダウンした場合、
そこが単一障害点になる」と述べており、まぁ、確かにその通りだが
認証局はそんなものダウンさせたら大問題になるし、
一般にそのための十分な冗長構成を備えているので
検証側がそれほど心配する問題ではない。
</li>
<li>
「オンライン失効検証が失敗した場合に、検証が成功してしまう
ブラウザがある」と述べており、過去にブラウザを幾つか調査している
ようだが、検証結果にかなりの誤解と思いこみがあるんじゃないかと思う。
まず、大前提として一部のウェブブラウザではデフォルトで
失効検証が無効になっているものがあり、失効検証を有効にしてから
でないとテストの意味がない。(デフォルトで失効検証ONにして
ブラウザ等を提供して欲しいんですけどね。)
あと、Microsoft等の製品ではオンラインで失効検証できない場合、
例えば最新のCRLを取得できない場合やOCSPレスポンスが取得できない
場合、キャッシュにあるCRLやLight Weight OCSPのOCSPレスポンス
が有効期間的に問題が無い場合これを利用して失効検証する。
また、証明書の検証結果もまた維持されるようになっており、
ブラウザの利用の途中で通信断があったとしても直近の検証結果を利用して
SSLに用いる。ブラウザを再起動しないと検証結果の状態がクリアされない場合がある。
このように、設定、キャッシュ、認証結果の維持のために、
オフラインでも検証結果が「有効」となるブラウザがあるという事である。
また、オンラインかオフラインかにかかわらず失効検証できない場合は
(RFC 5280的にも)証明書の検証結果は「無効」とするのが正しいし、
もしそれができないならブラウザの瑕疵だ。
いろいろ攻撃の例を述べているが、
攻撃者者がいくらオンライン失効検証ができないようにしたとしても、
失効検証ができない場合にはブラウザの証明書検証結果が「無効」になれば、
即ちフェールセーフになっていさえすれば問題がない。
</li>
<li>「以上に述べたオンライン失効検証の問題から、
「(オンライン失効検証ができない場合でも有効としてしまうブラウザがあるような)失効検証
の仕組みは、衝突するとポキッと折れてしまう車のシートベルトのようなものだ。
99%動作するかもしれないが、必要な時に動作しないのでは価値がない。」と述べている。
ブラウザがフェールセーフになっていれば99%のケースで使えれば全く問題がない。
これって、「銀行強盗、誤った本人確認や、行員の不正着服があったりして利用者の預金が
危険なので銀行の仕組みを一切やめて他の仕組みを使います。」みたいな話じゃないですか？
</li>
<li>
「OCSPレスポンダへの通信の遅さや、OCSPレスポンダを使った際のIPを認証局が
ログ取得できるためにユーザがどのサイトにアクセスしたのかを認証局が
知りえてしまうというプライバシーの問題がある」と述べている。
確かにOCSPレスポンダは、遅いものもあるし、検証の処理コストも高いが
Light Weight OCSPを使ったり、CRLのキャッシュを使ったり
オンライン失効検証のコストは小さくなるような工夫は認証局もブラウザもしている。
また、プロキシやNATもある状況で接続元IPと接続先の証明書中のホスト名が
OCSPレスポンダに残っていることがそれほど大きなプライバシー問題になるだろうか？
</li>
</ul>
以上の理由から、CRLやOCSPによるオンライン失効検証はやめて
Google Chrome独自の失効検証方法に切り替えようとしているそうだ。
危険な話じゃないですか？
</p>


<h3><u>Google ChromeのCRLSetプッシュ方式の問題点</u></h3>
<p>
結局、CRLSetはGoogleのやる軽量なCRLアグリゲーションのようなものだ。

<dl>

<dt><b>CRLSet失効情報が改ざんされてないと誰が証明してくれるのか？</b><br/>
<dd>
CRLSetのGoogleからのプッシュでは、HTTPSは使わないし、デジタル署名もつかないようだ。
悪意のある中間者によりCRLSetが改ざんされたとしても、それを知る方法がない。
また、HTTPSもCRLSetを元に失効検証しているならHTTPSの証明書の有効性を判断できない。

<dt><b>Googleは誤ったCRLSetを発行したとしても多分罪を認めたりはしない</b><br/>
<dd>
CRLSetのデータは各認証局から発行されているCRLを元にこれをまとめてCRLSetデータを
生成するが、CRLSet生成の過程でバグや故意の間違いがあったとしても、
有効な証明書が無効になったり、無効な証明書が有効になったりしても、
通信路の改ざん防止機能はないし、デジタル署名されているわけでもないので
Googleの誤りなのか、通信路の問題か、中間者攻撃なのか判断ができない。
ニセのサイトにSSL接続して詐欺被害にあったとしても
Googleは多分罪を認めたりはしないだろう。

<dt><b>Googleが回収したCRLを検証するかかなり怪しい</b>
<dd>
Googleは、申し入れのあった認証局からCRLをロボットにより回収し、
CRLSetを生成するようだが、個々のCRLの有効性、即ち正当な認証局から
発行されたCRLであるかを確認するかどうかはかなり怪しいと思う。
おそらく何も検証せずにCRLSetを生成するだろう。

<dt><b>Googleはビッグブラザーになりはしないか</b>
<dd>
GoogleがCRLを集約した(ふりをして)署名もしないCRLSetを発行することで、
Googleは証明書の検証結果を意図的にコントロールできる立場になったことに
注意しなければならない。
Googleの意向一つでCRLSetを発行でき、SSLサーバー証明書は有効にも無効にもできるのだ。

<dt><b>CRLSetのファイルサイズや発行周期が問題にならないか</b>
<dd>
CRLは認証局により発行周期が異なっている。毎日、3日おき、1週間おき、1ヶ月おき等
さまざまであるが、CRLSetを更新する周期はどうするのか、頻度に高いものに
あわせるのか気になるところだ。また、CRLSetは複数のCRLをまとめたデータとなるので
現行の全てのルートCA、中間CAをサポートするとなれば巨大なファイルサイズになることが
予想される。(ルートCAだけでも400近く、中間CAも含めたら3倍以上になるのではと想像する。
一回のアップデートで使うかどうかもわからないほとんど無用な失効情報をダウンロードするならば
現行の必要なCRLだけをダウンロード、キャッシュして使う方が効率的ではないだろうか。

<dt><b>全てのCRL発行モデルに対応できるのか</b>
<dd>
CRLSetはdelta CRLには対応しているようだが、CRL/ARLモデルなど一部の
発行モデルで対応できないケースが無いだろうか。

<dt><b>OCSPでしか失効情報を提供していない場合どうするか</b>
<dd>
認証局によってはOCSPでしか失効情報を提供しないものもあるが、
そのような場合にはCRLSetでは対応できない。

<dt><b>CRLSetはCRLほどは新鮮でない</b>
<dd>
CRLSetは認証局がCRLを発行してから、ある期間を経た後に
発行されるのでCRLほどは新鮮ではない。1日以上のタイムラグは
覚悟しておく必要があるだろう。
失効情報の鮮度という意味ではOCSPもまた多くの場合、
CRLの失効情報を元にOCSPレスポンスの値が決まるケースが多いので
CRLとほぼ同等かちょっと古いかだ。

</dl>
結局はCRLSetを発行するGoogleの監査スキームが
最も重要なポイントなんだと思う。
</p>

<h3><u>おわりに</u></h3>
<p>
私は個人的にOCSPが嫌いでOCSPレスポンダ証明書をちゃんと検証してるよね？とか、
OCSPレスポンス検証のオーバーヘッドだってかえって大きくなるぐらいだよねとか、PKIを
ややこしくしていると思っていてAdamさんのOCSPに対する文句もわからなくはないが、
かといってCRLSetプッシュもまた多くの問題を抱えていることは、このブログで
少しは知っていただけたのではないかと思う。
</p>
<p>
オンライン失効検証にこだわる必要はあまりなく、
CRLをキャッシュして使い、オフラインでも、通信障害でもCRLが取れなければ、
nextUpdate的に問題なければそれを使うというので全く問題無いように思う。
キャッシュされたCRLを使う方がCRLSetを使うよりよっぽど良い。
スマホなんかはディスク容量いっぱいあるしね、、、
</p>


<h3><u>参考リンク</u></h3>
<ul>
<li><a href="http://www.imperialviolet.org/2012/02/05/crlsets.html">ImperialViolet: Revocation checking and Chrome's CRL (05 Feb 2012)</a></li>
<li><a href="http://arstechnica.com/business/guides/2012/02/google-strips-chrome-of-ssl-revocation-checking.ars">ars technica: Google to strip Chrome of SSL revocation checking (2012.02.07)</a></li>
<li><a href="http://www.itmedia.co.jp/news/articles/1202/09/news021.html">ITmediaニュース: Google Chrome、SSL証明書のオンライン失効チェックを無効に (2012.02.09)</a></li>
<li><a href="http://www.networkworld.com/news/2012/020812-google-chrome-will-no-longer-255877.html?source=nww_rss">NETWORKWORLD: Google Chrome will no longer check for revoked SSL certificates online (2012.02.08)</a></li>
<li><a href="http://src.chromium.org/viewvc/chrome/trunk/src/net/base/crl_set.cc?revision=97640&view=markup">Google Chromiumのnet/base/crl_set.ccのソースコード</a></li>
<li><a href="http://permalink.gmane.org/gmane.comp.security.cryptography.randombit/2214">
cryptography@randombit.net: Re: Chrome to drop CRL checking</a></li>

</ul>






]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>米ユタのDigiCertとは無関係なマレーシアのDigicert Sdn認証局の問題について見てみたぞ(補足1)</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1639799.html" />
<modified>2011-11-07T12:12:10Z</modified> 
<issued>2011-11-07T21:10:02+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1639799</id>
<summary type="text/plain">
昨日書いたマレーシアのDigicert Sdn認証局の記事で
ちょっと補足しておこうと思います。

CRLについて




Digicert Sdnの問題を指摘された2つの中間CAは、
発行した証明書にCRL配布点(CDP)拡張は無いんだけども、
CRL自体はきちんと3日おきに発行しているよう...</summary> 
<dc:subject>SSL証明書</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1639799.html">
<![CDATA[<a href="http://blog.livedoor.jp/k_urushima/archives/1639468.html">
昨日書いたマレーシアのDigicert Sdn認証局の記事</a>で
ちょっと補足しておこうと思います。

<h3><u>CRLについて</u></h3>
<p>

<ul>
<li>
Digicert Sdnの問題を指摘された2つの中間CAは、
発行した証明書にCRL配布点(CDP)拡張は無いんだけども、
CRL自体はきちんと3日おきに発行しているようです。
</li>
<li>
Entrustは、
Digicert Sdnの中間CAを少し移行までの猶予期間を持たせ
11月8日かそれより前に失効させると声明しています。
現時点(11月7日18:50 JST)では失効されていません。
</li>
<li>
GTE CyberTrust Global Root(Verizon)は
失効させるといった声明はありません。
現時点(11月7日18:50 JST)では失効されていません。
</li>
</ul>

CRLの発行周期および最新のCRLの発行日の情報は以下の通りです。

<table class="tbl1">
<thead>
<tr><th>認証局名</th><th>発行周期</th><th>thisUpdate</th><th>nextUpdate</th></tr>
</thead>
<tbody>
<tr><td>Entrust.net CA 2048 ルート認証局</td><td>7日</td><td>2011年11月6日</td><td>2011年11月13日</td></tr>
<tr><td>Digisign Server ID - (Enrich) (Entrust用)中間認証局</td><td>3日</td><td>2011年11月6日</td><td>2011年11月8日</td></tr>
<tr><td>GTE CyberTrust Global Root ルート認証局</td><td>3ヶ月</td><td>2011年11月1日</td><td>2012年2月4日</td></tr>
<tr><td>Digisign Server ID (Enrich) (GTE用)中間認証局</td><td>3日</td><td>2011年11月6日</td><td>2011年11月8日</td></tr>
</tbody>
</table>
</p>

<h3><u>Mozilla(FireFox)の認証局ブラックリスト追加のソースコードの更新</u></h3>
<p>
Mozillaでは前回のDigiNotarの証明書をブラックリストに入れる際、
certdata.txt に証明書を登録し、これからコード certdata.c を自動生成しています。
<blockquote>
<a href="http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt">http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt</a>
</blockquote>
このファイルの最終更新は2011年11月3日ですが、まだDigicert Sdnに
対応はしていないようです。
</p>
<p>
以上、ちょっと補足でした。アップデートがあれば、また書きます。
</p>

<h3><u>関連記事</u></h3>
<ul>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1639468.html">
2011.11.06 米ユタのDigiCertとは無関係なマレーシアのDigicert Sdn認証局の問題について見てみたぞ</a></li>
</ul>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>米ユタのDigiCertとは無関係なマレーシアのDigicert Sdn認証局の問題について見てみたぞ</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1639468.html" />
<modified>2011-11-07T03:14:18Z</modified> 
<issued>2011-11-06T02:20:40+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1639468</id>
<summary type="text/plain">
2011年11月3日のニュース
でマレーシアのDigicert Sdn. Bhd.社という認証局が問題のある証明書を発行しており

現在、解読が可能とされている512bitのRSA鍵の証明書を発行している
SSLサーバー証明書として使うには証明書の拡張領域に問題があった
マレーシア政府機関...</summary> 
<dc:subject>SSL証明書</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1639468.html">
<![CDATA[<p>
2011年11月3日の<a href="http://threatpost.com/en_us/blogs/malaysian-ca-digicert-revokes-certs-weak-keys-mozilla-moves-revoke-trust-110311">ニュース</a>
でマレーシアのDigicert Sdn. Bhd.社という認証局が問題のある証明書を発行しており
<ul>
<li>現在、解読が可能とされている512bitのRSA鍵の証明書を発行している</li>
<li>SSLサーバー証明書として使うには証明書の拡張領域に問題があった</li>
<li>マレーシア政府機関に発行したものにも512bitの弱い鍵が使われている</li>
<li>発行した22枚の証明書で512bit鍵が使われている</li>
</ul>
そのような運用が問題視され、
<ul>
<li>MicrosoftやMozillaが問題のあったマレーシアのDigicert Sdnの中間証明書を
ブラックリストに入れた。FireFoxでは8からの対応になる。</li>
<li>Digicert Sdnの上位のルート認証局であるEntrust社は問題のある中間証明書を、少し移行までの猶予を持たせ11月8日かそれより前に失効させる</li>
</ul>
という対応を取りました。
</p>
<p>
最初、ツイッターなどでこの問題が紹介されたとき米ユタ州にある割と
有名な認証局Digicertの子会社が問題が起こしたのかと
勘違いされていたようですが、全く別のマレーシアの会社だったようで
米DigiCert社も声明を出しています。
米DigiCert社は先日のオランダのDigiNotar社の時も
名前が似てたため「うちは関係ないよ」と声明だしており、最近踏んだり蹴ったりですねw。
さて、今日はこのマレーシアのDigicert Sdn認証局について、
ちょっと見てみたので報告したいと思います。
</p>

<h3><u>マレーシアDigicert Sdn社の幾つかの認証局</u></h3>
<p>
マレーシアのDigicert Sdn社はルート、中間を含め(おそらく)13もの認証局を持っています。我々に危険性の影響があるのは図の左側、多くのブラウザに信頼するルート認証局として搭載されている
EntrustとGTE CyberTrust(現Verizon)をルート認証局とする
2つの中間認証局です。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/1/e/1e9d3103.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/1/e/1e9d3103-s.png" width="640" height="287" border="0" alt="fig1" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>

Digicert社のそれぞれの認証局の特徴などを下表にまとめてみました。

<table class="tbl1">
<thead>
<tr><th>認証局</th><th>特徴</th></tr>
</thead>
<tbody>
<tr><td colspan="2">ルート認証局</td></tr>
<tr>
<td>Digicert Class2 Root</td>
<td>
組織、個人(18歳以上)向けに発行する下位CAを持つ信頼レベル高中のルート認証局<br/>
</td>
</tr>
<tr>
<td>Digicert Class1 Root</td>
<td>
個人向けに発行する下位CAを持つ信頼レベル低のルート認証局<br/>
</td>
</tr>
<tr>
<td>Malaysia Primier CA 1024</td>
<td>
SHA1withRSA 1024bit<br/>
大量にMD5withRSAユーザ証明書を発行
</td>
</tr>

<tr><td colspan="2">他社ルートの中間認証局</td></tr>

<tr>
<td>Digisign Server ID (Enrich)</td>
<td>
上位CAはGTE CyberTrust Global Root<br/>
自己署名証明書は公開してなさそう<br/>
SSLサーバー証明書と(証明書管理者用?)ユーザ証明書を発行
</td>
</tr>
<tr>
<td>Digisign Server ID - (Enrich)</td>
<td>
上位CAはEntrust.net Certification Authority (2048)<br/>
自己署名証明書は公開してる<br/>
SSLサーバー証明書と(証明書管理者用?)ユーザ証明書を発行<br/>
上のとは " - "(ハイフン)が違う
</td>
</tr>

<tr><td colspan="2">Digicert Class2 Root下位の中間認証局</td></tr>

<tr>
<td>Digisign Server ID</td>
<td>
SHA1withRSA 1024bit<br/>
証明書管理者用のユーザ証明書を発行しているようだ<br/>
金融系やカード系が多い
</td>
</tr>
<tr>
<td>Digisign ID (Enhanced)</td>
<td>
S/MIMEにも使えそうなユーザ証明書を発行<br/>
変なプライベート拡張がある<br/>
</td>
</tr>
<tr>
<td>Digisign ID (Basic)</td>
<td>
一般のユーザ証明書を発行しているようだ
</td>
</tr>
<tr>
<td>MyKAD Online</td>
<td>
一般のユーザ証明書を発行しているようだ
</td>
</tr>
<tr>
<td>DIGISIGN iVEST CA</td>
<td>
ユーザ証明書かS/MIME証明書か？
</td>
</tr>
<tr>
<td>DIGISIGN iVEST CA Enhanced</td>
<td>
ユーザ証明書かS/MIME証明書か？
</td>
</tr>

<tr><td colspan="2">Digicert Class1 Root下位の中間認証局</td></tr>

<tr>
<td>DigiSign ID</td>
<td>
現在でも大量のRSA 512bit鍵のユーザ証明書を発行しているようだ
</td>
</tr>
<tr>
<td>Digisign Corporate Email</td>
<td>
本中間CA証明書は2006年に期限切れ<br/>
下にユーザ証明書は見当たらず<br/>
</td>
</tr>

</tbody>
</table>

これらのすべての認証局証明書の鍵長は
1024bitか2048bitで証明書プロファイルも
特に問題になりそうな点は見つかりませんでした。

他にも
<ul>
<li>CIMB Investment Bank Berhad Enterprise CA</li>
<li>Bank Negara Malaysia Sub CA</li>
</ul>
などマレーシアの銀行の認証局を運用しているようですが、
証明書が見つからず調査できませんでした。
</p>

<h3><u>EntrustとGTE CyberTrustルートのDigicert Sdn中間認証局</u></h3>
<p>
マレーシアのDigicert Sdnのルート証明書はIEやFireFoxなどの
ルート証明書には搭載されておらず、
今回、Microsoft や Mozillaがブラックリストに入れたのは
EntrustやGTE CyberTrustをルート認証局とするDigicert Sdnの
中間CA証明書です。
IEでみるとGTE CyberTrustルートの場合、証明書チェーンはこんな感じ、
<br clear="all"/>
<img src="http://livedoor.blogimg.jp/k_urushima/imgs/f/6/f64e8b02.png" width="474" height="473" border="0" alt="certview-gte" hspace="5" class="pict" align="left"  />
<br clear="all"/>
IEでみるとEntrustルートの場合、証明書チェーンはこんな感じです。
<br clear="all"/>
<img src="http://livedoor.blogimg.jp/k_urushima/imgs/4/a/4ade648e.png" width="474" height="473" border="0" alt="certview-entu" hspace="5" class="pict" align="left"  />
<br clear="all"/>

両者を少し数字で比較してみましょう。

<table class="tbl1">
<thead>
<tr><th>比較項目</th><th>GTE CyberTrustルート</th><th>Entrustルート</th></tr>
</thead>
<tbody>
<tr>
<td>(a) 証明書発行枚数(2011年11月5日時点、延べ)</td>
<td>1198枚</td>
<td>984枚</td>
</tr>
<tr>
<td>(b) (a)のうち2011年11月3日時点で有効なもの</td>
<td>110枚</td>
<td>448枚</td>
</tr>
<tr>
<td>(c) (a)のうち2011年11月3日時点で有効なマレーシア政府のもの</td>
<td>69枚</td>
<td>205枚</td>
</tr>
<tr>
<td>(d) (a)のうちRSA512bit鍵のもの</td>
<td>37枚</td>
<td>8枚</td>
</tr>
<tr>
<td>(e) (a)のうちRSA512bit鍵で現時点(11/5)で有効なもの</td>
<td>7枚</td>
<td>7枚</td>
</tr>
<tr>
<td>(f) (a)のうちRSA512bit鍵で現時点(11/5)で有効なマレーシア政府ドメインのもの</td>
<td>0枚</td>
<td>5枚</td>
</tr>
</tbody>
</table>

ニュースで取り上げられている22枚という数字は
どこから出てきたものなのかよくわかりませんね。
</p>
<p>
現在、解読された実績のある512bit RSA鍵の証明書を発行している
ことは問題といえば問題ですが、利用者が鍵を生成して
証明書発行要求しているわけですから利用者側にも問題がありますよね。
</p>

<h3><u>問題のある証明書拡張領域とは？</u></h3>
<p>
拡張領域の違いはGTE CyberTrustルートとEntrustルートでは
なくて、鍵長により微妙に拡張が違うようです。
これは鍵長2048bitのもの。
<br clear="all"/>
<img src="http://livedoor.blogimg.jp/k_urushima/imgs/5/e/5e3ce80d.png" width="474" height="473" border="0" alt="certext-gte1" hspace="5" class="pict" align="left"  />
<br clear="all"/>
これは512bitのものです。
<br clear="all"/>
<img src="http://livedoor.blogimg.jp/k_urushima/imgs/1/1/11a04c81.png" width="474" height="473" border="0" alt="certext-entu1" hspace="5" class="pict" align="left"  />
<br clear="all"/>
ニュースでは、通常TLSサーバー用とか
TLSクライアント用とか書かれる
拡張鍵使用目的(Extended Key Usage)がないとか、他にも
拡張でおかしなところがあると言っています。
おかしなところをヤバい順にまとめてみましょう。
<dl>
<dt><b>CRL配布点(CDP:CRL Distribution Points)が無い</b>
<dd>これが無いため証明書を失効させることができません。
今回のように発行した証明書に問題があった時に失効できないことはホント致命的。
<dt><b>KeyUsageがないものがある</b>
<dd>512bit RSA鍵の場合に拡張が無いようです。
RFC 3280的にはTLSでは署名検証に使うので必須(MUST)ですね。
<dt>拡張鍵使用目的(EKU:Extended Key Usage)がない
<dd>必須ではなかった気がしますが普通ついてます。
<dt><b>KeyUsageがあっても、不要なビットが立っている</b>
<dd>
Key Usage拡張は512bitより大きい鍵の証明書では有るようですが、
値としてDigital Signature、Non-Repudiation、Key Encipherment、
Data Enciphermentのビットが立っています。
SSLサーバー証明書ではNon-Repudiation、Data Enciphermentは余計ですよね。
<blockquote>
<b><a href="http://tools.ietf.org/html/rfc5280#section-4.2.1.12">RFC 5280 4.2.1.12 Extended Key Usage</a>より</b></br>
If a certificate contains both a key usage extension and an extended
key usage extension, then both extensions <font color="orange">MUST</font>
 be processed independently and the certificate MUST only be used for a purpose
consistent with both extensions.<br/>
中略<br/>
id-kp-serverAuth             OBJECT IDENTIFIER ::= { id-kp 1 }<br/>
-- TLS WWW server authentication<br/>
-- Key usage bits that may be consistent: <font color="orange">digitalSignature</font>,<br/>
-- <font color="orange">keyEncipherment or keyAgreement</font><br/>
</blockquote>
RFC 5280ではExtended Key UsageとKey Usageが一貫している
事がMUSTになっています。
<dt><b>基本制約(Basic Constraints)が無い</b>
<dd>なければ認証局証明書でないってことなんですが、一般にはつけることが多いですよね。
随分昔、あるメーラーで基本制約が無いことを無視して、ユーザ証明書から下位証明書発行しても検証成功だったことを発見してしまったり、、、
<dt><b>Authority/Subject Key Identifierで64bitは最近珍しい</b>
<dd>ですよね？
</dl>
結局、CRL配布点拡張がなく失効できないというのが一番の問題
だったんだと思います。失効できていれば、
単に問題のあった証明書を失効させ、鍵長や拡張領域に
問題があったとしても正しいものを再発行すれば
よかっただけで、こんなに大きな問題にはならなかったはずです。
失効できないために認証局丸ごとブラックリスト化するしか
手が無かったわけです。
ニュースではEKUが無いのがおかしいとか
わけのわからない事指摘してますよね。
</p>

<h3><u>CPS(認証実施規程)と照らしてどうなの？</u></h3>
<p>
認証局ではCPS(認証実施規程)で定めた運用に従い
証明書を発行するわけですが、これと照らしてどうだったのか
<a href="http://www.digicert.com.my/cps.htm">Digicert SdnのCPS</a>を
ちょっと見てみました。
<ul>
<li>鍵長が512bit以下ではダメだという記述は見当たらなかったので
CPS的に512bitの鍵に対して証明書発行することは問題が無かったようだ。</li>
<li>拡張領域については単に使用可能な拡張をまとめているだけで
発行する証明書の用途ごとに証明書プロファイルを定めて
いなかったのでCDP拡張など拡張が不足していたり問題があったと
してもCPS違反になることは無い。</li>
</ul>
とまぁ、このような感じでCPSに違反しているということは
無かったようです。
</p>
<p>
ただ、CPS中の証明書プロファイルについて、どのような拡張が
必ず含まれるのか、含まれないのか明確になっておらず、
CRL配布点拡張が無いという認証局設計上の重大な欠陥が
明らかになってこなかったという問題はありますけどね。
</p>

<h3><u>今回の問題に対する評価はこれでいいのか</u></h3>
<p>
今回の問題は、COMODOやDigiNotarのように攻撃されて
サブCAやRAが乗っ取られ不正な証明書を出し放題になっていたわけでも
なく、同列に問題を語られているのは違和感を覚えます。
高々、認証局ではなくSSLサーバ証明書の鍵が不正に使われるだけですよね。
512bit鍵の証明書を発行してしまったのは、利用者(お客さん)にも
問題があったわけですよね。
とても悔やまれるのはCRL Distribution Points拡張が
入っていなかったその一点です。
それさえ入っていれば、問題が発覚しても
単に証明書再発行すれば済んだのに、
中間CA証明書のブラックリスト入りという結果になってしまいました。
同じCAから発行されているSSLサーバー証明書でも
拡張のまともなものもあり
<br clear="all"/>
<img src="http://livedoor.blogimg.jp/k_urushima/imgs/f/c/fcd6fad5.png" width="474" height="473" border="0" alt="certext-entu3ok" hspace="5" class="pict" align="left"  />
<br clear="all"/>
完全にとばっちりを食ったお客さんも多数いるわけですよね。
可哀想だなぁと思います。
</p>
<p>
GTE CyberTrust Global Rootを運用しているVerizonからは
何のコメントも無いのも変な感じですよね。
</p>

<h3><u>おわりに</u></h3>
<p>
以上、マレーシアのDigicert Sdnの認証局の問題について
ちょっと調べたところを報告しまいた。
512 bit RSA鍵が問題だみたいなニュースの論調ですが、
あれはユーザの鍵なのでCA鍵と違って危殆化しても大した問題では
なくて、それよりもCRL配布点拡張が無いことにより失効の手立てがなく、
中間CA自体を廃棄するしか手が無かったってことが問題だったわけです。
</p>
<p>
やべやべ、夜更かししちゃったよ。
ではでは、、、
</p>

<h3><u>関連リンク</u></h3>
<ul>
<li><a href="http://threatpost.com/en_us/blogs/malaysian-ca-digicert-revokes-certs-weak-keys-mozilla-moves-revoke-trust-110311">threat post 2011.11.03: Malaysian CA Digicert Revokes Certs With Weak Keys, Mozilla Moves to Revoke Trust</a></li>
<li><a href="http://nakedsecurity.sophos.com/2011/11/03/another-certificate-authority-issues-dangerous-certficates/">SOPHOS Naked Security 2011.11.03: Another certificate authority issues dangerous certficates</a></li>
<li><a href="http://www.digicert.com.my/">(マレーシアの)digicert Certification Authority</a>
<ul>
<li><a href="http://www.digicert.com.my/news/news_20111104.htm">本件のお知らせ</a></li>
<li><a href="http://crl.digicert.com.my/">CRLリポジトリ</a></li>
</ul>
<li><a href="http://www.digicert.com/news/2011-11-1-breaches-and-similar-names.htm?gclid=CL6Kzp2UnqwCFQNNpgodSE_W1w">米ユタ州のDigiCert - DigiCert, Inc. Of No Relation to Recent "Digi" Insecure Certificates</a></li>
<li><a href="http://www.entrust.net/advisories/malaysia.htm">Entrust - Entrust Bulletin on Certificates Issued with Weak 512-bit RSA Keys by Digicert Malaysia</a></li>
<li><a href="http://www.itmedia.co.jp/news/articles/1111/04/news016.html">ITmediaニュース 2011.11.04 SSL認証局問題が再び発覚、MicrosoftとMozillaが対応表明 今度はマレーシアのSSL認証局が発行した証明書に問題が発覚した</a></li>
<li><a href="http://akamai.infoworld.com/d/security/mozilla-microsoft-withdraw-trust-in-digicert-certificates-178092?source=rss_security&utm_source=feedburner&utm_medium=twitter&utm_campaign=Feed%3A+Secureslinger+%28SecureSlinger%29">
InfoWorld SECURITY CENTRAL 2011.11.04 Mozilla, Microsoft withdraw trust in Digicert certificates</a></li>
</ul>

]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>小ネタ：FireFoxとIEでのIPアドレスのSubjectAltName dNSNameの扱いの違い</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1638629.html" />
<modified>2011-11-01T12:15:11Z</modified> 
<issued>2011-11-01T21:12:19+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1638629</id>
<summary type="text/plain">
今日は小ネタです。


今日、某IPアドレスで書かれたサイトにHTTPSでアクセスしてみると
うむむ、FireFox 3.6.23だと
信頼できない接続のアラートが、、、





IE8だと問題ありません。





んなアホな。
うむむと思ってSSLサーバー証明書を見てみると...</summary> 
<dc:subject>SSL証明書</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1638629.html">
<![CDATA[<p>
今日は小ネタです。
</p>
<p>
今日、某IPアドレスで書かれたサイトにHTTPSでアクセスしてみると
うむむ、FireFox 3.6.23だと
信頼できない接続のアラートが、、、
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/8/4/84b740c7.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/8/4/84b740c7-s.png" width="360" height="326" border="0" alt="ipadr1" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</p>
<p>
IE8だと問題ありません。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/8/b/8be83879.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/8/b/8be83879-s.png" width="360" height="115" border="0" alt="ipadr2" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</p>
<p>
んなアホな。
うむむと思ってSSLサーバー証明書を見てみると
</p>
<p>
SubjectAltNameのGeneralName値が
<blockquote>
dNSName: 192.168.1.5
</blockquote>
<p>
みたいにDNS NameのところにIPアドレスが
書いてある証明書のせいみたいなんです。
</p>
<p>
RFC 3280 ではsubjectAltNameにドメイン名を入れる場合には
dNSNameフィールドに入れなければならず(MUST)、
RFC 1034の"prefered name syntax"でなければ
ならない(MUST)となっています。
</p>
<blockquote>
<b><a href="http://tools.ietf.org/html/rfc3280#section-4.2.1.7">RFC 3280 4.2.1.7 SubjectAltName</b></a>より<br/>
When the subjectAltName extension contains a domain name system
label, the domain name MUST be stored in the dNSName (an IA5String).
The name MUST be in the "preferred name syntax," as specified by RFC
1034 [RFC 1034]. 
</blockquote>
<p>
で、RFC 1034のpreferred name syntaxを見てみると
普通のFQDNドメイン名でありラベルの先頭は英大小文字の
A-Zにでなければならないので、
dNSNameには "192.168.1.5" のようなIPアドレスは
入れてはならないことになります。
</p>
<p>
IPアドレスを指定したい場合にはiPAddressフィールドが使えますよね。
</p>
<blockquote>
GeneralName ::= CHOICE {<br/>
　　 otherName　　　　　　　　　　　 [0]　　 OtherName,<br/>
　　 rfc822Name　　　　　　　　　　　[1]　　 IA5String,<br/>
　　 dNSName　　　　　　　　　　　　 [2]　　 IA5String,<br/>
　　 x400Address　　　　　　　　　　 [3]　　 ORAddress,<br/>
　　 directoryName　　　　　　　　　 [4]　　 Name,<br/>
　　 ediPartyName　　　　　　　　　　[5]　　 EDIPartyName,<br/>
　　 uniformResourceIdentifier　　　 [6]　　 IA5String,<br/>
　　 iPAddress　　　　　　　　　　　 [7]　　 OCTET STRING,<br/>
　　 registeredID　　　　　　　　　　[8]　　 OBJECT IDENTIFIER }<br/>
</blockquote>
<p>
FireFoxは厳密にsubjectAltName dNSNameをみて
それがFQDNでないとリジェクトしちゃうけども、
IE8はIPアドレスが書いてあっても通してしまうと、、、
結局は発行した証明書のsubjectAltNameが
間違ってるってことなんですが誰に言えばいいんですかねぇ、、、
</p>

]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>W3C XML暗号化の脆弱性に対するW3Cのコメントに「ちょっとなぁ」と思った件</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1637612.html" />
<modified>2011-11-01T09:05:25Z</modified> 
<issued>2011-10-27T20:58:31+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1637612</id>
<summary type="text/plain">

2011年10月17日より米国シカゴで開催された国際会議

&quot;18th ACM Conference on Computer and Communications Security&quot;
において、
Tibor Jager と Juraj Somorovsky により
&quot;How to Break XML Encryption&quot; という発表がありました。
W3C勧告であるXML文書の暗号化...</summary> 
<dc:subject>Java</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1637612.html">
<![CDATA[
<p>
2011年10月17日より米国シカゴで開催された国際会議
<a href="http://www.sigsac.org/ccs/CCS2011/techprogram.shtml">
"18th ACM Conference on Computer and Communications Security"</a>
において、
Tibor Jager と Juraj Somorovsky により
"How to Break XML Encryption" という発表がありました。
W3C勧告であるXML文書の暗号化の標準 
<a href="http://www.w3.org/TR/xmlenc-core/">
"XML Encryption Syntax and Processing, 10 Dec 2002"
</a>においてAESでも3DESでもCBC(Cipher Block Chaining)モードを
使っている限り解読される可能性があるというものです。
</p>
<p>
これに対しW3Cは
<a href="http://www.w3.org/QA/2011/10/some_notes_on_the_recent_xml_e.html">
"Some notes on the recent XML Encryption attack"</a>
というコメントを発表しました。
</p>
<p>
これはぶっちゃけちゃうと「CBC使わずにGCM(Galois Counter Mode)なんかを使ってね。
標準にもなってるしね。」という内容なんですが、
標準になっているといってもOPTIONALですよね。
<blockquote>
引用：<a href="http://www.w3.org/TR/xmlenc-core1/#sec-AES-GCM">W3C XMLEnc 5.2.4 AES-GCM</a><br/>
- http://www.w3.org/2009/xmlenc11#aes128-gcm (OPTIONAL)<br/>
- http://www.w3.org/2009/xmlenc11#aes256-gcm (OPTIONAL)<br/>
</blockquote>
AES-GCMをサポートするXML暗号化ライブラリなんてあるのかと
ちょっと調べてみました。
</p>
<p>
手軽に手に入りやすそうな比較的メジャーなJava XML暗号ライブラリというと
こんなところかと思います。
<ul>
<li>
<a href="http://santuario.apache.org/javaapi.html">
Apache Santuario/XML Security for Java</a>
- <a href="http://santuario.apache.org/Java/api/constant-values.html#org.apache.xml.security.encryption.XMLCipher.AES_128">
サポートするアルゴリズム情報</a>
</li>
<li>
<a href="http://jce.iaik.tugraz.at/sic/Products/XML-Security/XSECT">
IAIK XML Security Toolkit (XSECT)</a>
- <a href="http://jce.iaik.tugraz.at/sic/Products/XML-Security/XSECT/Features">サポートするアルゴリズム</a>
</li>
<li><a href="http://www-01.ibm.com/support/docview.wss?uid=swg21516002">
IBM SDK Java Technology Edition Verion 7</a>
</li>
</ul>
Sun/Oracle JavaのXMLはXML署名しか含まれていません。
サポートするアルゴリズム情報をApache, IAIKで見てみましたが
AES-GCMはサポートされていないようです。
IBM Java SDKについても検索してみましたが、どうやらGCMはサポートしていないようです。
Javaでこれだけダメなんだから、他の言語用のライブラリはもっと
ひどいはず。Microsoft .NETについてもGCM必須なSuite-B対応が進んでいるので
もしやとおもいましたが、どうやらダメなようです。
</p>
<p>
結局、W3Cは「GCM使えばいいじゃん」というものの「使えそうな実装がない」
という、何ともとほほな状況であることがわかりました。
自前でAES-GCM対応するしかないですかね。
</p>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>祝iOS5リリース記念(その2)：iOS5のS/MIME署名・暗号メールのフォーマット、アルゴリズムを見てみたぞ</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1636711.html" />
<modified>2011-10-27T09:52:24Z</modified> 
<issued>2011-10-23T12:37:01+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1636711</id>
<summary type="text/plain">
前回はApple iOS 5のメーラーの新機能であるS/MIME署名暗号メールを
送受信してみるあたりを見てきましたが、今日はその中身を覗いてみましょう。
(結論からいうとフツーすぎてかなりがっかり)

まずメッセージヘッダの特徴的なところを

iOS5から送られたS/MIME署名...</summary> 
<dc:subject>iPhone</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1636711.html">
<![CDATA[<p>
前回はApple iOS 5のメーラーの新機能であるS/MIME署名暗号メールを
送受信してみるあたりを見てきましたが、今日はその中身を覗いてみましょう。
(結論からいうとフツーすぎてかなりがっかり)

<h3><u>まずメッセージヘッダの特徴的なところを</u></h3>

iOS5から送られたS/MIME署名メールについて
メッセージ本体のヘッダで特徴的なところを抜き出すとこんな感じ。

<blockquote>
Content-Type: multipart/signed;<br/>
　　　　micalg=sha1;<br/>
　　　　boundary=Apple-Mail-XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX;<br/>
　　　　protocol="application/pkcs7-signature"<br/>
X-Mailer: iPhone Mail (XXXXX)<br/>
Content-Transfer-Encoding: 7bit<br/>
Mime-Version: 1.0 (1.0)<br/>
</blockquote>

S/MIME署名メールはクリアテキスト形式になっており
署名データのMIMEヘッダはこんな感じ。

<blockquote>
Content-Disposition: attachment;<br/>
　　　　filename=smime.p7s<br/>
Content-Type: application/pkcs7-signature;<br/>
　　　　name=smime.p7s<br/>
Content-Transfer-Encoding: base64<br/>
</blockquote>

まぁ、至って普通です。
</p>
<h3><u>署名データの中身は</u></h3>
<p>
PKCS#7 SignedData形式である署名データを覗いてみて
特徴をまとめてみました。
<table class="tbl1">
<thead><th>フィールド</th><th>値</th></thead>
<tbody>
<tr><td>version(SignedData)</td><td>1</td></tr>
<tr><td>digestAlgorithms</td><td>SHA1</td></tr>
<tr><td>certificates</td><td>EE証明書のみ</td></tr>
</tbody>
</table>

SignedDataの中のSignerInfoの特徴はこんな感じ。

<table class="tbl1">
<thead><th>フィールド</th><th>値</th></thead>
<tr><td>version(SignerInfo)</td><td>1(=IssuerSerial)</td></tr>
<tr><td>digestAlgorithm</td><td>SHA1</td></tr>
</tbody>
</table>

SignerInfoの中の署名属性(signedAttributes)の一覧は以下の通り。

<table class="tbl1">
<thead><th>フィールド</th><th>値</th></thead>
<tbody>
<tr><td>contentType</td><td>data</td></tr>
<tr><td>signingTime</td><td>UTCTime</td></tr>
<tr><td>messageDigest</td><td>署名対象のSHA1ハッシュ値</td></tr>
<tr><td>microsoftRecipientInfo(1.3.6.1.4.1.311.16.4)</td><td>受信者のIssuerSeiralセット</td></tr>
<tr><td>encrypKeyPref(1.2.840.113549.1.9.16.2.11)</td><td>送信者の暗号用証明書のIssuerSerial</td></tr>
<tr><td>signatureAlgorithm</td><td>rsaEncryption(1.2.840.113549.1.1.1)</td></tr>
</tbody>
</table>
</p>
<h3><u>暗号データの中身</u></h3>
<p>
次にPKCS#7 EnvelopedData形式である暗号データを覗いてみました。
特に特徴的なところはなくてTriple DES EDEモード(des-EDE3-CBC 1.2.840.113549.3.7)
が使われているというだけでしょうか。
</p>
<h3><u>まとめ</u></h3>
<p>
というわけで、iOS5のメールのS/MIME機能は使われている
フォーマットや暗号アルゴリズムは至って普通で
とても相互運用性が高いものになっていると言っていいんでしょうかね。
うーん、つまらん。
</p>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>祝iOS5リリース記念：iOS5のS/MIME署名・暗号メールサポートについて</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1633660.html" />
<modified>2011-10-14T02:18:18Z</modified> 
<issued>2011-10-14T00:07:57+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1633660</id>
<summary type="text/plain">
iOS5が日本時間2011年10月12日2:00にダウンロードできるようになったそうで、私は夜待ってたんですが待ち切れずに寝てしまい、朝を迎えてしまいました。ツイッター上ではアップデートしたという方、Error 3200が出てアップデートできないという方、悲喜こもごものレポート...</summary> 
<dc:subject>電子署名</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1633660.html">
<![CDATA[<p>
iOS5が日本時間2011年10月12日2:00にダウンロードできるようになったそうで、私は夜待ってたんですが待ち切れずに寝てしまい、朝を迎えてしまいました。ツイッター上ではアップデートしたという方、Error 3200が出てアップデートできないという方、悲喜こもごものレポートが上がっています。
</p>
<p>
ようやく私も昼ごろアップデートできました。ある方は「TLにiOS5のS/MIME対応について何も流れてない」と心配されており、私も検索してちょっと心配になってみたりしたんですが、まぁ、早速試してみるべ～～～と。と、いうかiOS5のアップデートで「ほとんど、そこ」にしか喰い付いてないという話もあります。というわけで、iPhone iOS5からサポートされるようになったS/MIME署名暗号メール機能についてのレポートです。
</p>
<p>
Outlook, Outlook Express, Thunderbird, Becky!, Mac OS X Mailなど
最近のメジャーなメーラーではデフォルトで
S/MIME署名暗号メールに対応していて、
S/MIME対応の証明書と鍵さえあれば、
自分のメールを途中で改ざんされないように署名したり、
知り合いにムフフと秘密のメールを送ることができます。
iPhone iOS5になって初めてS/MIME対応になり
どんな感じなのか見てみました。
</p>

<h3><u>とりあえず、どこ設定すんだ？</u></h3>
<p>
すでに自分のメールアドレス用に使えるクライアント証明書というかS/MIME用証明書をを持っていたので、そんなのがあると仮定して話を進めます。無い方はどこかの証明書発行サービスから買うとか、適当な認証用の(メールアドレスの入っている)証明書をゲットするとかしないといけません。
</p>
<p>
とりあえず、Google大先生に聞いてみると「<a href="http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta">GEMINI Securityのブログがあるぞよ</a>」と仰るので斜め読みしてみると、ざっくり以下の手順でS/MIMEのメール設定ができるようです。
</p>
<blockquote>
<ul>
<li>(1) iPhone iOS5 で「設定」アイコンを開く</li>
<li>(2) 項目「メール/連絡先/カレンダー」を開く</li>
<li>(3) S/MIME用に使える証明書(と鍵)がインストールされているメールアドレスに
対応するアカウントを開く</li>
<li>(4) 項目「詳細」を開く</li>
<li>(5) すると最下部に「S/MIME」の項目があるので「オン」にする
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/2/a/2a490c08.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/2/a/2a490c08-s.png" width="360" height="202" border="0" alt="i5s1" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
<li>(6) 送信時には必ずS/MIME署名メールにしたい場合には「署名」の項目を選び、
署名を「オン」にし使用する署名に使用する証明書(と鍵)を選択します。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/2/0/207e85ae.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/2/0/207e85ae-s.png" width="360" height="296" border="0" alt="IMG_0137" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
例えば証明書の詳細を見てみるとこんな感じ、、、
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/4/2/42701620.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/4/2/42701620-s.png" width="360" height="300" border="0" alt="IMG_0138" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
ここで証明書は自分のメールアドレス用のもの、即ちiPhoneの証明書の詳細表示でコモンネームかサブジェクト代替名のメールアドレスに自分のメールアドレスが記載されているものでなければなりません。(そのような証明書をとりあえずタダで入手できる方法についてはグーグル大先生で調べるか、私の知り合いの人はこっそり聞いてください。)
</li>
<li>(7) 同様に、送信時には可能ならば必ずS/MIME暗号メールにしたい場合には「暗号」の項目を選び、暗号を「オン」にし復号時に使用する証明書(と鍵)を選択
<br/>
(普通の人は署名用と暗号用の証明書は同じ人が多いです)
</li>
<li>(8) アカウント設定に戻り右上の「完了」ボタンを押せば設定は終わり</li>
</ul>
</blockquote>

<h3><u>さてと、軽ーくS/MIME署名メールを送ってみますか</u></h3>
<p>
とりあえず、S/MIMEのための設定は終わっているので、フツーにメール送ってみることにします。受け取り側は、Outlook Expressなんですが、問題なくS/MIME署名メールとして有効なものが受信できました。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/b/0/b0db1606.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/b/0/b0db1606-s.png" width="360" height="209" border="0" alt="oe001" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</p>
<h3><u>次に外部(Outlook)から暗号のみのメール、署名暗号メールをiPhone iOS5で受けてみます</u></h3>
<p>
まずは暗号だけのメール。南京錠のアイコンが差出人名につくことで暗号化されていることがわかるようです。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/0/e/0ec0f2ec.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/0/e/0ec0f2ec-s.png" width="360" height="269" border="0" alt="IMG_0139" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
差出人をクリックするとこんな感じに「暗号化済み」と表示されます。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/d/2/d275ab91.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/d/2/d275ab91-s.png" width="360" height="252" border="0" alt="IMG_0140" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
次に署名暗号メールを受信してみます。
差出人名にチェックと南京錠のアイコンが表示されます。
これにより署名暗号メールであることがわかります。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/7/7/771a797a.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/7/7/771a797a-s.png" width="360" height="266" border="0" alt="IMG_0141" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
同様に差出人の詳細を見てみると、
<br clear="all"/>
</ul>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/5/3/531ab588.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/5/3/531ab588-s.png" width="360" height="369" border="0" alt="IMG_0142" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
有効な署名メールだと青で無効な署名メールだと赤になるんだと
思います。(後述)
</p>

<h3><u>さて次に暗号メールを送信してみましょう</u></h3>
<p>
すでに誰かからS/MIME署名メールを受け取ったことがあれば
おそらくそのS/MIME署名書は自動的に(見るすべはありませんが)
keychain に登録されるようです。
証明書が自動登録済である人にメールを送ってみようとします。
宛先名が青になり、この場合には問題なく署名暗号メールが
送られます。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/0/1/012a05f5.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/0/1/012a05f5-s.png" width="360" height="252" border="0" alt="IMG_0143" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
次に、まだ証明書を持っていないであろう人に
署名暗号メールを送ってみようとしましょう。
宛先名が赤になり南京錠がかかってない状態になります。
この状態のときには「証明書を持っていないので
暗号メールを送れませんよ」という意味のようです。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/c/7/c7e99880.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/c/7/c7e99880-s.png" width="360" height="255" border="0" alt="IMG_0144" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</p>
<p>
残念なことにiOS5の「住所録」は従来のものと全く変わらず、
住所録に送信したい相手のS/MIMEがあるかどうかを知るすべが
ありません。
</p>
<p>
あと、普通の人は場合によっては署名をつけたり、暗号化したり、
動的に切り替えるのが普通で、Outlook Expressなども
そのような署名と暗号を切り替えるトグルボタンが
メール送信にはついていますが、
iPhoneには一切それはありません。
共通の設定にさかのぼって署名をするか、暗号化するか
決めないといけません。
これは何とも厄介な仕様だなぁ、、、、と思います。
</p>

<h3><u>おわりに</u></h3>
<p>
以上、iOS5のS/MIME署名暗号メール機能がとてもうれしかったので
レポートしてみました。
ただ、実用で使うにはトグルボタンが無いので
かなり苦しいかなぁという印象です。
次回は、iOS5が出すメールの中身や、S/MIME(=PKCS#7)
署名データ、暗号化データの構造なんかをマニアックに
のぞいてみたいと思います。
</p>
<p>
今日は、中央線やら丸ノ内線の事故でえらい目にあって
疲れちゃったので、この辺で、、、、おやすみなさい Zzzz....
</p>

<h3><u>参考リンク</u></h3>
<ul>
<li><a href="http://www.atmarkit.co.jp/fsecurity/special/04smime/smime01.html">@IT: 【特集】S/MIMEでセキュアな電子メール環境をつくる！～実は危ない電子メール、安全性を実現するS/MIMEの詳細解説～</a></li>
<li><a href="http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta">GEMINI Security Blog: Sending and Receiving S/MIME Encrypted Email on iOS 5 (Beta)</a></li>
<li><a href="http://www.secure-mail.me/">Secure-Mail</a> - 
S/MIME署名暗号対応 iPhone メールアプリなんだそう。iOS5じゃなくても使えちゃうんだろうからすごいっすね。</a></li>
</ul>

<h3><u>謝辞</u></h3>
<p>
S/MIMEのテストを自分一人でやるのはいろいろ面倒だったので、
送り相手をうちのチームの平井堅に似た人にお願いしてしまいました。
ありがとね。この場を借りてお礼しまふ。
</p>

]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>IBM Java SDK 7.0 のリリースとJCE</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1630174.html" />
<modified>2011-09-27T14:02:01Z</modified> 
<issued>2011-09-27T23:01:36+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1630174</id>
<summary type="text/plain">
IBMのJava SDK 7.0(IBM SDK, Java Technology Edition, Version 7.0)が2011年9月19日に
リリースされました。


私が食いつくのは暗号ライブラリ(Java Cryptography Extension(JCE))の部分しかありません。
先日Oracle(Sun) Java J2SE 7.0がリリースされたばかりです...</summary> 
<dc:subject>Java暗号プログラミング</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1630174.html">
<![CDATA[<p>
IBMのJava SDK 7.0(<a href="http://www-01.ibm.com/support/docview.wss?uid=swg21516002">IBM SDK, Java Technology Edition, Version 7.0</a>)が2011年9月19日に
リリースされました。
</p>
<p>
私が食いつくのは暗号ライブラリ(Java Cryptography Extension(JCE))の部分しかありません。
先日Oracle(Sun) Java J2SE 7.0がリリースされたばかりですが、
IBMの方はどうちがうのか見ていきましょう。
</p>
<p>
<h3><u>早速IBM Java 6.0と比較</u></h3>
<p>
まずはIBM Java 6.0と比較してどうなのか調べていきましょう。
下に示す両者の間でどう違うのか見ていきます。
<table class="tbl1">
<thead>
<tr><th>Java</th><th>IBM Java 6.0 Win</th><th>IBM Java 7.0 Linux</th></tr>
</thead>
<tbody>
<tr><td>Build</td><td>pwi3260sr1-20080416_01(SR1)</td><td>pxi3270-20110827_01</td></tr>
<tr><td>Arch</td><td>Windows XP x86-32</td><td>Linux x86-32</td></tr>
</tbody>
</table>

IBM Java 7.0 に同梱されたJCEプロバイダの一覧は以下の通りです。
変更の概要についても簡単に書いておきました。

<table class="tbl1">
<thead>
<tr><th>Provider</th><th>IBM Java 6.0 Win</th><th>IBM Java 7.0 Linux</th></tr>
</thead>
<tbody>
<tr><td>IBMJSSE2</td><td>1.6</td><td>1.7<br/>
TLSv1.1/v1.2サポートを追加
</td></tr>
<tr><td>IBMJCE</td><td>1.2</td><td>1.7<br/>
楕円(EC,ECDH)追加<br/>
SHA1/256/384/512withECDSAを追加<br/>
HmacSHA256/512を追加<br/>
</td></tr>
<tr><td>IBMJGSSProvider</td><td>1.6</td><td>7.0</td></tr>
<tr><td>IBMCertPath</td><td>1.1</td><td>1.1</td></tr>
<tr><td>IBMSASL</td><td>1.5</td><td>1.7<br/>
NTLM認証を追加<br/>
</td></tr>
<tr><td>IBMXMLCRYPTO</td><td>1.0</td><td>1.0<br/>変更無</td></tr>
<tr><td>IBMXMLEnc</td><td>1.0</td><td>1.0<br/>変更無</td></tr>
<tr><td>IBMSPNEGO</td><td>1.0</td><td>1.0<br/>変更無</td></tr>
<tr><td>SUN</td><td></td><td>1.7<br/>
新規追加<br/>
ポリシ対応のみでほぼ空<br/>
</td></tr>
</tbody>
</table>
</p>

<h3><u>SSL/TLS CipherSuitesについて</u></h3>
<p>
次に、IBMJSSE2プロバイダがサポートするCipherSuitesを見てみようと思います。
簡単なTLSクライアントを実装して接続して試してみました。
以下のようなところが特徴的かと思います。

<ul>
<li>28のCipherSuitesをサポートとSun Javaに比べ少なめ</li>
<li>楕円系(ECDSA,ECDHをサポート)</li>
<li>MD5は1つのみで残り27はSHA1</li>
<li>NSA Suite-Bはサポートしない(GCM,SHA2がない)</li>
<li>安全な再ネゴシエーション(<a href="http://tools.ietf.org/html/rfc5746">RFC 5746</a>に対応している</li>
<li>AESが基本でRC4、3DESがちょっと</li>
<li>Sun JavaでサポートするSHA2系のCipherSuitesが無い</li>
</ul>

サポートしているCipherSuitesは以下の通りです。

<table class="tbl1">
<thead>
<tr><th>値(16進)</th><th>曲線名</th></tr>
</thead>
<tbody>
<tr><td>0004</td><td>TLS_RSA_WITH_RC4_128_WITH_MD5</td></tr>
<tr><td>0005</td><td>TLS_RSA_WITH_RC4_128_CBC_SHA</td></tr>
<tr><td>000a</td><td>TLS_RSAWITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>0013</td><td>TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>0016</td><td>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>002f</td><td>TLS_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>0032</td><td>TLS_DHE_DSS_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>0033</td><td>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>0035</td><td>TLS_RSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>0038</td><td>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>0039</td><td>TLS_DHE_RSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>00ff</td><td>TLS_EMPTY_RENEGOTIATION_INFO_SCSV</td></tr>
<tr><td>c002</td><td>TLS_ECDH_ECDSA_WITH_RC4_128_WITH_CBC_SHA</td></tr>
<tr><td>c003</td><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>c004</td><td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>c005</td><td>TLS_ECDH_ECDSA_WITH_AES_256_WITH_CBC_SHA</td></tr>
<tr><td>c007</td><td>TLS_ECDHE_ECDSA_WITH_RC4_128_CBC_SHA</td></tr>
<tr><td>c008</td><td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>c009</td><td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>c00a</td><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>c00c</td><td>TLS_ECDH_RSA_WITH_RC4_128_WITH_CBC_SHA</td></tr>
<tr><td>c00d</td><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>c00e</td><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>c00f</td><td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>c011</td><td>TLS_ECDHE_RSA_WITH_RC4_128_CBC_SHA</td></tr>
<tr><td>c012</td><td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>c013</td><td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>c014</td><td>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</td></tr>
</tbody>
</table>
</p>

<h3><u>SSL/TLS 拡張について</u></h3>
<p>
同様にSSL/TLSネゴシエーションの際のSSL/TLS拡張について
見てみました。特徴的なところは次の2点です。
<ul>
<li>SNI(Server Name Indication)在り</li>
<li>楕円曲線拡張 (25曲線)</li>
</ul>
</ul>
サポートしている楕円曲線の数が多いですが、これはOracle(Sun) Java J2SE 7.0と
同じ数ですね。たぶん値も同じでしょう。下に一覧表を示します。
<table class="tbl1">
<thead>
<tr><th>値(16進)</th><th>曲線名</th></tr>
</thead>
<tbody>
<tr><td>0001</td><td>sect163k1</td></tr>
<tr><td>0002</td><td>sect163r1</td></tr>
<tr><td>0003</td><td>sect163r2</td></tr>
<tr><td>0004</td><td>sect193r1</td></tr>
<tr><td>0005</td><td>sect193r2</td></tr>
<tr><td>0006</td><td>sect233k1</td></tr>
<tr><td>0007</td><td>sect233r1</td></tr>
<tr><td>0008</td><td>sect239k1</td></tr>
<tr><td>0009</td><td>sect283k1</td></tr>
<tr><td>000b</td><td>sect409k1</td></tr>
<tr><td>000c</td><td>sect409r1</td></tr>
<tr><td>000d</td><td>sect571k1</td></tr>
<tr><td>000e</td><td>sect571r1</td></tr>
<tr><td>000f</td><td>secp160k1</td></tr>
<tr><td>0010</td><td>secp160r1</td></tr>
<tr><td>0011</td><td>secp160r2</td></tr>
<tr><td>0012</td><td>secp192k1</td></tr>
<tr><td>0013</td><td>secp192r1</td></tr>
<tr><td>0014</td><td>secp224k1</td></tr>
<tr><td>0015</td><td>secp224r1</td></tr>
<tr><td>0016</td><td>secp256k1</td></tr>
<tr><td>0017</td><td>secp256r1</td></tr>
<tr><td>0018</td><td>secp384r1</td></tr>
<tr><td>0019</td><td>secp521r1</td></tr>
</tbody>
</table>
</p>

<p>
今日はこの辺で
</p>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>わけのわからないDigiNotarのOCSPレスポンダ証明書</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1626991.html" />
<modified>2011-09-13T12:12:01Z</modified> 
<issued>2011-09-13T21:11:08+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1626991</id>
<summary type="text/plain">
前回はDigiNotar Cyber CAの証明書の不可解な点について
紹介しましたが、今回は「わけのわからないシリーズ第2段」として
DigiNotar OCSPレスポンダ証明書の不可解な点について
紹介していこうと思います。
OCSPやOCSPレスポンダとは何かについては
@ITの記事で詳し...</summary> 
<dc:subject>PKI</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1626991.html">
<![CDATA[<p>
前回はDigiNotar Cyber CAの証明書の不可解な点について
紹介しましたが、今回は「わけのわからないシリーズ第2段」として
DigiNotar OCSPレスポンダ証明書の不可解な点について
紹介していこうと思います。
OCSPやOCSPレスポンダとは何かについては
<a href="http://www.atmarkit.co.jp/fsecurity/rensai/pki05/pki01.html" target="_blank">@ITの記事で詳しく紹介されている</a>のでご覧ください。
</p>

<h3><u>ocsp-nocheck拡張とOCSPレスポンダ証明書の有効期間のミスマッチ</u></h3>
<p>
まず最初に、
validation.diginotar.nlのOCSPレスポンダ証明書には
ocsp-nocheck拡張が設定されています。
これは、「(OCSPレスポンダ証明書の有効期間が非常に短く設定されており、OCSPレスポンダの
鍵は頻繁に更新するので鍵危殆化リスクが少なくOCSPレスポンダ証明書を
失効させることもないので)OCSPレスポンダ証明書を失効検証する必要はありませんよ」
という意味を持つフラグです。
ところが、validation.diginotar.nlのOCSPレスポンダ証明書の有効期間は
<blockquote>
notBefore: 2007.11.21<br/>
notAfter: 2017.11.21<br/>
</blockquote>
と10年の長きに渡るOCSPレスポンダ証明書なので、失効検証しないというのは難しいかなと思います。
このような状況では、OCSPレスポンダ証明書の廃棄は、上位のCAである
DigiNotar Services CAごと廃棄するしか方法がありません。
</p>

<h3><u>オレオレOCSP???</u></h3>
<p>
なんと驚いた事にvalidation.diginotar.nlのOCSPレスポンダ証明書には
機関情報アクセス(authorityInfoAccess)のOCSPのフィールドがあり、
他のSSLサーバー証明書などと全く同じ http://validation.diginotar.nl という
URIを持っています。つまり、OCSPレスポンダ証明書自体がOCSPで検証してよいことを言っています。
</p>
<p>
これはおかしな話で「OCSPレスポンダ証明書が有効かどうかOCSPレスポンダに聞きに行く」って
ことで、こりゃオレオレですよね？
</p>
<p>
最悪の場合、実装によってはOCSPを使ったパス検証がループしてしまう可能性だってあります。
<blockquote>
- www.diginotar.nl が正しいか聞く<br/>
　- 失効検証のため www.diginotar.nl が有効かOCSPに聞く<br/>
　　- OCSPレスポンダ証明書が有効かOCSPに聞く<br/>
　　　- OCSPレスポンダ証明書が有効かOCSPに聞く<br/>
　　　　- OCSPレスポンダ証明書が有効かOCSPに聞く<br/>
　　　　　&#8226;&#8226;&#8226;永遠に続く<br/>
</blockquote>
</p>

<h3><u>おわりに</u></h3>
<p>
前回紹介したDigiNotar Cyber CAの証明書も怪しかったですが、
DigiNotarのOCSPレスポンダ証明書も相当怪しいです。
DigiNotarは全体的に凝ったPKI設計になっていますが、いろんなところで間違えています。
(できないなら)シンプルに行った方がいいんじゃないかと思うんですけどねぇ。
</p>
<p>
今日はこんなところで
</p>

<h3><u>関連記事</u></h3>
<ul>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1626459.html">2011.09.11 わけのわからないDigiNotar Cyber CAの証明書</a></li>
</ul>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>サイバーなレーザー投影タイプのBlutoothキーボード「MagicCube」ユーザーレビュー</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1626667.html" />
<modified>2011-09-11T14:27:00Z</modified> 
<issued>2011-09-11T23:08:41+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1626667</id>
<summary type="text/plain">
実はですねぇ、iPhoneやAndroidなどでも使えるレーザー投影タイプのキーボード
「Magic Cube」を買ってしまいました。





ただのキーボードでしかないのに大枚2万円近く払うのもどうかとも思いましたが、
最近その手のおもちゃを買ってなかったし、
仕事も一段...</summary> 
<dc:subject>ガジェット</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1626667.html">
<![CDATA[<p>
実はですねぇ、iPhoneやAndroidなどでも使えるレーザー投影タイプのキーボード
「Magic Cube」を買ってしまいました。

<br clear="all"/>
<object width="320" height="205"><param name="movie" value="http://www.youtube.com/v/g0qARDGJj1w&feature=youtube_gdata_player&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/g0qARDGJj1w&feature=youtube_gdata_player&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="205"></embed></object>
<br clear="all"/>

ただのキーボードでしかないのに大枚2万円近く払うのもどうかとも思いましたが、
最近その手のおもちゃを買ってなかったし、
仕事も一段落ついたし、まぁ、行っちゃえと、、、
紹介ムービー見ると近未来的でサイバーで楽しそうじゃないですか。
今日は、Facebookの知り合いで期待している方がおられるようなので
使用感レビューなど書いてみたいと思います。
</p>

<h3><u>注文してやってくるまで</u></h3>
<p>
私は<a href="http://www.restir.com/goods/index.html?ggcd=Magic-Cube-1&cid=60900000" target="_blank">ここ</a>で買ったんですが、注文が殺到しちゃっているみたいで、8月上旬に注文して
8月末か9月上旬に来る予定になっていたみたいですが、結局着いたのは9月10日でした。
<a href="http://www.mgcube.net/?gclid=CIW0wfKWlKsCFSZKpgodwDS9tQ">
いつ到着するかは知りませんがmagic cube shopさんの方が18,800円と安いみたいです。</a>
</p>

<h3><u>iPhoneへの接続</u></h3>
<p>
いろいろ試してみて何とかiPhone、iPadに繋げたんですが、
後から<a href="http://www.magic-cube.jp/" target="_blank">日本語サイト</a>が
あったり、そこで
<a href="http://www.magic-cube.jp/magiccube_jp_manual.pdf" 
target="_blank">日本語マニュアル</a>、
<a href="http://www.magic-cube.jp/magiccube_jp_connection.pdf"
target="_blank">iPhone接続マニュアル</a>、
FAQを公開していたりすることを知りました。
最初から見ておけばさらに苦労がなかったのかも知れません。
それくらい内包されている英語のマニュアルは
読みにくい上に情報が無いのです。
</p>
<p>
接続するときのつまづきやすいポイントは以下の通りです。
<ul>
<li>買ったらフル充電されるまでUSB接続する</li>
<li>USB接続のフタを開けたとき基本的にトグルスイッチは「HID」側に
倒しておく。「SPP」は「HID→SPP→HID」という設定リセット用途でしか使えない。</li>
<li>Blutoothで接続したら機器の認証のため投影されたキーボードから
iPhoneで表示された4桁の数字を入力する</li>
</ul>
</p>

<h3><u>iPhoneとの組み合わせでまず困るのは日本語入力の切り替え</u></h3>
<p>
繋いでからすぐ、ローマ字入力はできるんですが、英字入力に切り替える方法が
どこにも書いてな~~~い!!! 接続デバイス依存ですから、、、と、、、
そりゃそうかもしれないけど、、、
結局、
<blockquote>
FN+スペース＝日本ローマ字入力に切り替え<br/>
MENU+スペース=日本語テンキー→日本語ローマ字→英字のローテーション<br/>
なので<br/>
FN+スペース＝日本ローマ字入力<br/>
MENU+スペース=英字<br/>
</blockquote>
で切り替えるのが良さそうです。
</p>

<h3><u>キー入力時のタイプ音がいかにも安っぽい</u></h3>
<p>
デフォルトではキー入力する時、安っぽいビープ音が出ます。
こういうのは静かな喫茶店とかでは最悪。
折角サイバーで近未来的な気分に浸っているのにあんまりです。
キー入力音の大小の調節は
<blockquote>
FN + ↑ <br/>
FN + ↓ <br/>
</blockquote>
で行います。音が消える一つ手前ぐらいで十分ですかね。
</p>

<h3><u>テキスト入力状態で電源切ると誤入力が、、、</u></h3>
<p>
テキスト入力状態にある時にMagicCubeの電源を落とそうとすると
意味不明なキー入力が入ってしまいます。
キーボード入力やめたいときにはキーボード投影をしない
省電力モードがあるそうで、そうしてから電源切るのがいいかもしれません。
<blockquote>
FN + バックスペース(Back) = 省電力モードへ<br/>
キーボードが投影されるあたりの任意の場所で3本指同時にタッチ = 省電力からの復帰<br/>
</blockquote>
</p>

<h3><u>その他のインプレッションはこんな感じ</u></h3>
<p>
<ul>
<li>
入力する他の指をきちんと浮かせとかないと誤入力されてしまう。
最悪、慣れるまでは一本指入力か二本指ぐらいの入力の方がいいのかも。
誤入力を頻繁にしてしまうイライラ感は結構あります。
</li>
<li>
カンマ、コロンなどが一般的な日本のキーボードと違って上の方にあるので
慣れる必要があります。多分韓国のメーカーなので韓国のキー配列なのかも。
</li>
<li>
メーカーが言うように折りたたみのキーボードのようにメカニカルな部分がないので
壊れにくいというのはあるかもしれませんが、電源のオン/オフスイッチは
早いうちに接触が悪くなりそうな気がします。
</li>
<li>
一応フルサイズのキーピッチに余裕があるキーボードなので
コンパクトな折りたたみ型よりかは打ちやすいと思う人もいるかもしれない。
</li>
<li>
Bluetooth対応で78gと軽いのは確かに良い。
</li>
<li>
大量に文字をうたなければならない場合に、MagicCubeが使えるか?
と言われるとちょっと考えてしまう。
例えば Apple Wireless Keyboardならフルキーボードで
電池込みで重さ324gと大したことないし、それほどかさ張らない。
</li>
</ul>
</p>

<h3><u>結局のところ</u></h3>
<p>
サイバーでハイパーな雰囲気(笑)を味わいたいから
これを使うんであって、多少の入力のしにくさも含めて
楽しめるようでないとダメっすかねぇ(笑)
</p>
<p>
娘にちょっと入力してみてもらったのをiPhoneで撮影してiMovieでフリーの音楽つけてみました。(単にiMovieを初めて使ってみたかっただけorz)
<br clear="all"/>
<object width="320" height="205"><param name="movie" value="http://www.youtube.com/v/N7rCqTiz_7w&feature=youtube_gdata_player&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/N7rCqTiz_7w&feature=youtube_gdata_player&hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="205"></embed></object>
<br clear="all"/>
</p>

<p>
今日はこんなところで
</p>

<h3>リンク</h3>
<ul>
<li><a href="http://celluon.com/products/laserkey1_3.htm?sm=2_1">Magic Cube製造元 CelluonのMagic Cubeのページ</a>
<li><a href="http://www.magic-cube.jp/">Magic Cube 公式日本語サイト</a></li>
<li><a href="http://zonostyle.com/2011/09/magiccube01.html">ZONESTYLE 赤色レーザーの未来型キーボードでブラインドタッチに挑戦！Celluon Magic Cube</a></li>
</ul>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>わけのわからないDigiNotar Cyber CAの証明書</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1626459.html" />
<modified>2011-09-11T01:13:42Z</modified> 
<issued>2011-09-11T00:04:11+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1626459</id>
<summary type="text/plain">
オランダの認証局DigiNotarが攻撃を受け、今わかっているだけで不正なSSLサーバー証明書を531枚
発行してしまった件を、気になってずっとウォッチしています。


いろいろ疑問に思っていることがあり時間があるとき、ここでも紹介していきたいと
思っているんですが、...</summary> 
<dc:subject>PKI</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1626459.html">
<![CDATA[<p>
<a href="http://www.itmedia.co.jp/news/articles/1109/07/news075.html" target="_blank">オランダの認証局DigiNotarが攻撃を受け、今わかっているだけで不正なSSLサーバー証明書を531枚
発行してしまった件</a>を、気になってずっとウォッチしています。
</p>
<p>
いろいろ疑問に思っていることがあり時間があるとき、ここでも紹介していきたいと
思っているんですが、その気になるところの一つにDigiNotar Cyber CAというのがあります。
<a href="https://blog.torproject.org/blog/diginotar-damage-disclosure">Torプロジェクトのページで不正に発行された証明書の一覧(531枚)</a>がCSVやExcel形式で
ダウンロードできるようになっており、不正な証明書を発行してしまったDigiNotar管理下の
認証局の一覧は
<ul>
<li>DigiNotar Cyber CA</li>
<li>DigiNotar Extended Validation CA★</li>
<li>DigiNotar Public CA - G2</li>
<li>DigiNotar Public CA 2025★</li>
<li>Koninklijke Notariele Beroepsorganisatie CA</li>
<li>Stichting TTP Infos CA</li>
</ul>
となっています。「★」印をつけたものは
<a href="http://www.diginotar.nl/Klantenservice/Rootcertificaten/tabid/308/Default.aspx">DigiNotarのページ</a>から
ダウンロードできる中間CA証明書になんですが、
他のものはGoogle等で探してみてもダウンロードすることができませんでした。
被害があった認証局の証明書がDigiNotarのサイトで公開されていないのは
非常に問題だと思っていて、特に DigiNotar Cyber CAは
"*.google.com"、"*.skype.com" などの想定被害の大きいSSLサーバー証明書を
発行しているCAなので、CA証明書が無いと対策の打ちようがないと思っていました。
不正に発行された証明書についてOCSPオンライン証明書検証の結果がほとんど有効のまま
になっているのでは?と報告している人もいて(OCSPレスポンダ証明書が無効であれば
問題ないわけですが)それを調査するためにもCA証明書が必要になるわけです。
</p>
<h3><u>やっとみつけた</u></h3>
<p>
DigiNotarのサイトに無いのでちょっとあきらめ気味だったんですが、
FireFox 3.6.22 の証明書ストアを見てみたら以下の信頼するCA証明書がありました。
<ul>
<li>DigiNotar Root CA</li>
<li>DigiNotar Services 1024 CA</li>
<li>DigiNotar Cyber CA (2枚)</li>
<li>DigiNotar PKIoverheid CA Orgaisatie - G2</li>
<li>DigiNotar PKIoverheid CA Overheiden Berdrijven</li>
</ul>
なんだ、DigiNotar Cyber CAあるじゃないですか、、、それも2枚も。
ぱっと見、ふんふん、名前がちょっと違うルート証明書で有効期間もちょっとだけ違うんだなと
納得しそうになったんです。まぁ、特別な事情があって同じようなルート作ったんだろうなぁ、、、と。
<blockquote>
DigiNotar Cyber CA (1枚目)<br/>
　発行者：C=NL,O=DigiNotar,CN=DigiNotar Cyber CA,Email=info@diginotar.nl<br/>
　主体者：C=NL,O=DigiNotar,CN=DigiNotar Cyber CA,Email=info@diginotar.nl<br/>
　有効期間：2006.10.04-2011.10.04<br/>
DigiNotar Cyber CA (2枚目)<br/>
　発行者：C=NL,O=DigiNotar,CN=DigiNotar Cyber CA<br/>
　主体者：C=NL,O=DigiNotar,CN=DigiNotar Cyber CA<br/>
　有効期間：2006.09.27-2013.09.20<br/>
</blockquote>
そしたら、あれれ？？？拡張領域あるじゃないですか？？？それも全く同じ値、、、、
<blockquote>
発行者鍵識別子：<br/>
　A6:0C:1D:9F:61:FF:07:17:B5:BF:38:46:DB:43:30:D5:8E:B0:52:06<br/>
　C=US,O=GTE Corporation,OU=GTE CyberTrust Solutions, Inc.,CN=GTE CyberTrust Global Root<br/>
　serial:01:A5<br/>
主体者鍵識別子：<br/>
　AB:F9:68:DF:CF:4A:37:D7:7B:45:8C:5F:72:DE:40:44:C3:65:BB:C2<br/>
証明書ポリシ：<br/>
　CPS: http://www.public-trust.com/CPS/OmniRoot.html<br/>
CRL配布点<br/>
　URI:http://www.public-trust.com/cgi-bin/CRL/2018/cdp.crl<br/>
</blockquote>
ってことは、DigiNotar Cyber CAの証明書は2枚とも自己署名ルート証明書ではなくて
主体者名、発行者名が同じなのにGTE CyberTrust Global Rootから
発行された中間CA証明書ってことなんですよね。
CPSやCRLDPの場所もGTEを管理している所のものになっているみたいですしね。
</p>
<p>
この2枚の証明書がさらに不可解なのはシリアル番号で両方とも(0x0fffffff)で同じ値になっているってことです。CA鍵が同じっていうのもアレですが、同じシリアル番号の異なる証明書をGTE CyberTrustは発行したって事になるわけですよね。普通の認証局なら考えられない話ですし、シリアル番号をあえて同じにする意図もよくわかりません。
</p>
<p>
さらには、DigiNotar Cyber CA証明書の発行者は同じFireFoxに入っているGTE CyberTrust Global Rootではなくて、Mac OSXには入っていたシリアル番号(0x01A5)の方のGTE CyberTrust Global Root
になっているわけです。
どのようなケースでDigiNotar Cyber CAのような移行策が必要だったのか、
そもそもメリットがわからないのよくわかりません。さぞかし大人の事情があったのでしょう。
</p>
<h3><u>OCSPの検証結果もまたわからない</u></h3>
<p>
2枚のうちどちらが使われているかわからないながらもDigiNotar Cyber CAの証明書は
とりあえず入手できたわけです。
DigiNotar Cyber CAから発行されたSSLサーバー証明書が一枚も入手できていないので
これがDigiNotarの共通のOCSPレスポンダで検証できるのかはわからないのですが、
ある一つの不正な証明書のシリアルとCyber CAの証明書により検証してみます。
すると2つのCAで別の結果が返ってきて
<blockquote>
DigiNotar Cyber CA (1枚目)が発行者だったとした時のOCSP応答：<br/>
　malformed-request(1)<br/>
DigiNotar Cyber CA (2枚目)が発行者だったとした時のOCSP応答：<br/>
　Cert Status: unknown<br/>
　This Update: GeneralizedTime "00010101000000Z"<br/>
　Next Update: GeneralizedTime "00010101000000Z"<br/>
</blockquote>
GeneralizedTimeとしてものすごい値が返ってきました。
他にもこのOCSPレスポンダは疑問に思うところが多々あって、
DigiNotar用にカスタムで実装したもののような気がしています。
</p>
<p>
返ってきた２つの値から、
DigiNotar Cyber CAから発行されたSSLサーバー証明書は
OCSP失効検証をサポートしないと考えるのが自然でしょうか。
</p>

<h3><u>ちなみにDigiNotar Cyber CAの発行するCRLは？</u></h3>
<p>
ちなみにDigiNotar Cyber CAが発行するCRLのURLは1枚目が発行したものは見つかったものの2枚目が発行した方は見つかっていない。CRLの検証では鍵よりもむしろ発行者識別名の方が必要なので、1枚目と2枚目と同じCA鍵であったとしても、そのCRLは1枚目の方にしか使えないですよね。
</p>

<p>
今日はこんなところで
</p>

<h3><u>GTE CyberTrust Global Rootの発行するCRL(追記)</u></h3>
<p>
DigiNotar Cyber CA 中間CA証明書はFireFox 3.6.22の信頼する
CA証明書リストに入っているのでGTE CyberTrust Global Rootからの
証明書検証をする必要もないですが、DigiNotar Cyber CA証明書には
CRL配布点も書いてありますし、
GTE CyberTrust Global Rootは今でもCRLを発行しているので
失効検証はできます。そのCRLをちょっとみてみると、
大体3ヶ月おきに発行されているようで
<blockquote>
thisUpdate: 2011.08.31<br/>
nextUpdate: 2011.12.03<br/>
</blockquote>
となっており当然DigiNotar Cyber CAの2枚の証明書のシリアル
0x0fffffffは記載されておらず、DigiNotar Cyber CA証明書が
GTE CyberTrustから失効されているということはありませんでした。
</p>
GTE CyberTrust Global Rootを信頼点として検証した場合、
結局、識別名のチェーンがつながらないのでパス検証失敗になりますけどね。
<p>

</p>

</p>

<h3><u>更新履歴</u></h3>
<ul>
<li>2011.09.11 - GTE CyberTrustのCRLについて追記</li>
</ul>]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>祝 Java SE 7 リリース記念(第3弾) 「世界最強(かもしんない)CipherSuite一覧の更新」</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1616725.html" />
<modified>2011-08-05T07:21:40Z</modified> 
<issued>2011-08-03T23:30:39+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1616725</id>
<summary type="text/plain">
以前からサーバーやクライアント(ブラウザ)、暗号ライブラリなどでサポートしている

SSL/TLS 暗号スイート(CipherSuite)のサポート一覧表をメンテしていて、
多分これは(無駄に)世界最強なCipherSuiteの表だと思うんですが、
Java SE 7のリリースに合わせて過去のJava...</summary> 
<dc:subject>Java</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1616725.html">
<![CDATA[<p>
以前からサーバーやクライアント(ブラウザ)、暗号ライブラリなどでサポートしている
<a href="http://www9.atwiki.jp/kurushima/pub/pkimisc/SSLTLS_CipherSuite_Support_Table_.html" target="_blank">
SSL/TLS 暗号スイート(CipherSuite)のサポート一覧表</a>をメンテしていて、
多分これは(無駄に)世界最強なCipherSuiteの表だと思うんですが、
Java SE 7のリリースに合わせて過去のJava SEを含めたCipherSuiteのサポート状況が
Sun(Oracle)から文書として出されるようになったので、
これを表に反映してみました。
</p>
<p>
右の方のカラムに「Sun(Oracle) Java JCA」と書いてあるのがそれです。
<ul>
<li>緑(o)がデフォルトで有効になっているもの</li>
<li>赤(x)がデフォルトで無効になっているもの</li>
<li>灰(-)がサポートしていないもの</li>
</ul>
です。
</p>
<p>
この表から読み取れるのはざっくりこんなとこ。
<ul>
<li>Java SE 1.4.1よりAES系CipherSuitesをサポート</li>
<li>Java SE 5よりケルベロス系のCipherSuitesをデフォルトで無効</li>
<li>Java SE 6より楕円系CipherSuitesをサポート</li>
<li>Java SE 7よりSHA2系CipherSuitesをサポート</li>
<li>Java SE 7でも米国政府のSuites-BはGCMモードがないのでサポートしてない</li>
<li>共通鍵暗号化なしはデフォルトで無効</li>
<li>認証なし(anonymous)はデフォルトで無効</li>
<li>とても弱い共通鍵暗号はデフォルトで無効</li>
<li>鍵交換のDHはサポートせずDHEのみをサポート</li>
<li>認証にRSA, DSSを公平にサポート</li>
</ul>
</p>
<p>
今日はあっさり、この辺で、、、ではでは。
</p>
<h3><u>関連記事</u></h3>
<ul>
<li><a href="http://www9.atwiki.jp/kurushima/pub/pkimisc/SSLTLS_CipherSuite_Support_Table_.html" target="_blank">SSL/TLS Supported Cipher Suites</a></li>
</ul>
<ul>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615116.html">祝 Java SE 7 リリース記念「JCEはどうなってんの？」 (2011.07.29)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615933.html">祝 Java SE 7 リリース記念(第2弾)「証明書検証の弱いアルゴリズムの制限機能」 (2011.08.01)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1616725.html">祝 Java SE 7 リリース記念(第3弾) 「世界最強(かもしんない)CipherSuite一覧の更新」 (2011.08.03)</a></li>
</ul>
<ul>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/888293.html">RSA BSAFE Shareを試してみました(その3) (2009年04月28日)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1260916.html">ブラウザが対応するSSL/TLS CipherSuite一覧 (2010年03月05日)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1415861.html">Xperia上のブラウザがサポートするSSL/TLS CipherSuites (2010年04月24日)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1489528.html">Google Chrome が NSS を使うようになったのでSSL/TLS CipherSuite一覧を更新 (2010年09月11日)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1514978.html">ニンテンドーWiiのSSLクライアント認証 (2010年10月31日)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1557961.html">Apache HarmonyのJSSE(Java Secure Socket Extension) (2011年01月28日)</a></li>
</ul>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>祝 Java SE 7 リリース記念(第2弾)「証明書検証の弱いアルゴリズムの制限機能」</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1615933.html" />
<modified>2011-08-05T07:21:00Z</modified> 
<issued>2011-08-01T00:30:15+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1615933</id>
<summary type="text/plain">
Java SE 7のSecurity Enhancementsには

CertPath Algorithm Disabling
 Weak cryptographic algorithms can now be disabled. For example, the MD2 digest algorithm is no longer considered secure. The Java SE 7 release provides a mechanism for denying the us...</summary> 
<dc:subject>Java暗号プログラミング</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1615933.html">
<![CDATA[<p>
Java SE 7の<a href="http://download.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html">Security Enhancements</a>には
<blockquote>
<b>CertPath Algorithm Disabling</b><br/>
 Weak cryptographic algorithms can now be disabled. For example, the MD2 digest algorithm is no longer considered secure. The Java SE 7 release provides a mechanism for denying the use of specific algorithms in certification path processing and TLS handshaking. See Appendix D: Disabling Cryptographic Algorithms in Java PKI Programmer's Guide and Disabled Cryptographic Algorithms in Java Secure Socket Extension (JSSE) Reference Guide for more information.
</blockquote>
と書いてあります。なるなる。証明書の検証において弱い暗号アルゴリズムを使わないように設定することができ、これはSSL/TLSの場合でも同様に設定できるようです。今日はこのアルゴリズム無効化について説明したいと思います。
</p>

<h3><u>プロパティファイル java.security の違い</u></h3>
<p>
Java SE 6 と7では若干$JRE_HOME/lib/security/java.securityのファイルの内容が違うんですが、
大きく追加されているのは3点あります。
<ul>
<li>Policy for failed Kerberos KDC lookups - Kerberosの設定</li>
<li>Algorithm restrictions for certification path (CertPath) processing - 
(証明書の)認証パス検証処理のアルゴリズム制限
</li>
<li>Algorithm restrictions for Secure Socket Layer/Transport Layer Security (SSL/TLS) processing -
SSL/TLS処理のアルゴリズム制限
</li>
</ul>
一般の証明書検証とSSL/TLSでの証明書検証とで分けてアルゴリズムに制限をかけることができるようです。
ちなみに一般の証明書検証ではデフォルトは
<blockquote>
jdk.certpath.disabledAlgorithms=MD2
</blockquote>
になっており、MD2アルゴリズムは無効になるよう設定されています。SSL/TLSでは
<blockquote>
jdk.tls.disabledAlgorithms
</blockquote>
のプロパティで設定するようになっていますが、SSL/TLSにおいては無効設定は無いようです。

<h3><u>アルゴリズムの無効化の指定方法</u></h3>
指定するのは署名アルゴリズムではなく、ハッシュアルゴリズムと公開鍵暗号のアルゴリズムで、
公開鍵暗号のアルゴリズムについては、鍵長を指定できます。以下に幾つか設定の例を示します。
<blockquote>
# MD2を無効化(デフォルト)<br/>
jdk.certpath.disabledAlgorithms=MD2<br/>
# MD2, SHA1, DSA, ECDSAを無効化<br/>
jdk.certpath.disabledAlgorithms=MD2, SHA1, DSA, ECDSA<br/>
# MD2, SHA1 を無効とし、鍵長2048bit未満のRSAを無効<br/>
jdk.certpath.disabledAlgorithms=MD2, SHA1, RSA keySize &lt; 2048<br/>
</blockquote>
RIPEMD-160等のSun(Oracle)提供の暗号アルゴリズムにないものを指定できるのかは
気になるところです。時間が取れたら見てみます。
</p>

<h3><u>プログラムの中でアルゴリズム制限を指定する</u></h3>
<p>
上記のようにプロパティファイルで指定することもできますが、
プログラムの中でも動的に指定することも可能です。
<blockquote>
import java.security.Security;<br/>
・・・<br/>
Security.setProperty("jdk.certpath.disabledAlgorithms", "MD2, MD5, DSA");<br/>
</blockquote>

<h3><u>で、実際に使ってみた</u></h3>
<p>
試しにRSAの鍵長を可変にして、どうなるか試してみました。
<blockquote>
# jdk.certpath.disabledAlgorithms=RSA keySize < 1024 -- RSA1024bit未満を禁止<br/>
→検証成功<br/>
# jdk.certpath.disabledAlgorithms=RSA keySize < 2048 -- RSA2048bit未満を禁止<br/>
→unable to find valid certification path to requested target<br/>
</blockquote>
う～ん、確かにプロパティの変更によって検証結果は変わりますが、
例外のメッセージは全くアルゴリズム理由でそうなったのか
わからないようになっちゃってますね。
</p>
<p>
仕方ないのでデバックメッセージを表示するようにして
(java -Djava.security.debug=all)
メッセージを見てみるとアルゴリズムを禁止した場合と鍵長を制限した
場合とでメッセージが異なるみたいです。
<blockquote>
# jdk.certpath.disabledAlgorithms=RSA -- RSAを禁止してみた場合<br/>
algorithm check failed: SHA1withRSA disabled<br/>
# jdk.certpath.disabledAlgorithms=RSA keySize < 2048 -- RSA2048bit未満を禁止<br/>
algorihtm constraints check failed<br/>
</blockquote>
</p>

<h3><u>暗号アルゴリズムの危殆化情報の管理と自動処理</u></h3>
<p>
暗号アルゴリズムは時代の変遷とともに脆弱になり、推奨されない暗号の鍵長もまた
変わっていきます。特に過去の電子署名ファイルや暗号化されたファイルで
使われている暗号アルゴリズムが当時大丈夫だったのかは気になるところです。
「
<a href="http://tools.ietf.org/html/rfc5698">RFC 5698 Data Structure for the Security Suitability of Cryptographic Algorithms (DSSC)</a>」というデータフォーマットがありますが、これは、
は、
どの暗号アルゴリズムや鍵長が何時の時代に、どのくらいの期間までは安全とされていたかを規定することができるデータフォーマットです。
<p>
現在、DES、MD5、SHA1、鍵長の短いRSAなど暗号アルゴリズムの危殆化が話題になっていますが、どのアルゴリズムが何年から何年頃までは使い物になったのかをNIST、CRYPTRECなど暗号アルゴリズムの公的な評価機関がDSSCのような電子データの形式として公開、発行して頂けると、このデータを検証ポリシーとして使用し、過去のあるデータが「当時安全とされていた暗号アルゴリズム(や鍵長)」を使っていたかを自動的に判定できるようになります。
</p>
<p>
DSSCの内容により自動的にjdk.certpath.disabledAlgorithmsに反映させて検証するなんてこともできますね。
</p>

<h3><u>おわりに</u></h3>
<p>
今日はJava SE 7で新たに提供されることになった証明書検証における弱い暗号アルゴリズムの制限機能について紹介しました。
これまでに、暗号スイートのレベルで制限することはできましたが、ハッシュや公開鍵暗号アルゴリズム、鍵長のレベルでミドルウェアで制限が加えられる汎用の製品はJava SE 7が初めてなのではないかと思います。
SSL/TLSにも使えるので、そろそろ "jdk.tls.disabledAlgorithms=MD2" などとしてもいい頃ですよね。
</p>
<p>
やべやべ、会社は夏休みなんだけど明日から一週間休日出勤だ。風呂入って寝よう。ではでは。
</p>

<h3><u>関連記事</u>></h3>
<ul>             
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615116.html">祝 Java SE 7 リリース記念「JCEはどうなってんの？」 (2011.07.29)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615933.html">祝 Java SE 7 リリース記念(第2弾)「証明書検証の弱いアルゴリズムの制限機能」 (2011.08.01)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1616725.html">祝 Java SE 7 リリース記念(第3弾) 「世界最強(かもしんない)CipherSuite一覧の更新」 (2011.08.03)</a></li>
</ul>
]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>祝 Java SE 7 リリース記念「JCEはどうなってんの？」</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1615116.html" />
<modified>2011-08-05T07:20:22Z</modified> 
<issued>2011-07-29T03:38:38+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1615116</id>
<summary type="text/plain">
大変ご無沙汰しております。もはやセキュリティ技術者とはいえない状態でわけのわからない仕事に忙殺されております。さて、今日は Java の話題です。Java SE 6のリリースが2006年12月でしたから、かれこれ5年、ようやく2011年7月28日 Java SE 7 がリリースされました。今...</summary> 
<dc:subject>Java</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1615116.html">
<![CDATA[<p>
大変ご無沙汰しております。もはやセキュリティ技術者とはいえない状態でわけのわからない仕事に忙殺されております。さて、今日は Java の話題です。Java SE 6のリリースが2006年12月でしたから、かれこれ5年、ようやく2011年7月28日 Java SE 7 がリリースされました。今日は「祝 Java SE 7 リリース記念」ということで暗号、セキュリティ、SSL/TLSの部分を中心に変更点を見ていこうと思います。
</p>

<h3><u>早速ダウンロード</u></h3>
<p>
7月28日になって何度も<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">ダウンロードページ</a>を訪れていたんですが、日本時間で夜の10時か11時頃にようやくダウンロードできるようになっていたみたいです。バージョンを見るとこんな感じ、、、
<blockquote><pre>
% 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)
</pre></blockquote>
一昨日、Java SE 7 Preview Release b147 というのを落としたんですが、内容的には同じもののようです。
</p>

<h3><u>サポートするJCEプロバイダの差分をみてみましょう</u></h3>
<p>
Java SE 7 で変更点のひとつの目玉は楕円暗号のサポートなんだそうです。
Java SE 6 と Java SE 7(b147) でJCE(Java Cryptographic Extension)プロバイダの提供物の違いをdiffを取ってつらつら眺めてみました。
全体的にsun実装の内部パッケージ名がcom.sun.net.ssl.internalからsun.securityに変更になっているようです。

<center>
<table class="tbl1">
<thead><tr><th>Java SE 6</th><th>Java SE 7(b147)</th></tr></thead>
<tbody>
<tr><td>SUN 1.6</td><td>SUN 1.7</td></tr>
<tr><td colspan="2">CertStore.LDAPのパッケージ名が変更になっただけ</td></tr>
<tr><td>SunRsaSign 1.6</td><td>SunRsaSign 1.7</td></tr>
<tr><td colspan="2">バージョン変更のみ</td></tr>
<tr><td>なし</td><td>SunEC 1.7</td></tr>
<tr><td colspan="2">楕円暗号のプロバイダが新規提供</td></tr>
<tr><td>SunJSSE 1.6</td><td>SunJSSE 1.7</td></tr>
<tr><td colspan="2">TLSv1.1、TLSv1.2の新規提供。内部パッケージ名の変更</td></tr>
<tr><td>SunJCE 1.6</td><td>SunJCE 1.7</td></tr>
<tr><td colspan="2">KeyGeneratorでSunTls12Prfの新規提供</td></tr>
<tr><td>SunJGSS 1.0</td><td>SunJGSS 1.7</td></tr>
<tr><td colspan="2">バージョン変更のみ</td></tr>
<tr><td>SunSASL 1.5</td><td>SunSASL 1.7</td></tr>
<tr><td colspan="2">SASLプロバイダ。NTLM認証の新規提供</td></tr>
<tr><td>XMLDSig 1.6</td><td>XMLDSig 1.7</td></tr>
<tr><td colspan="2">XML署名。<a href="http://www.w3.org/TR/2007/CR-xml-c14n11-20070621/">W3C Canonical XML 1.1</a>の新規サポート</td></tr>
<tr><td>SunPCSC 1.6</td><td>SunPCSC 1.7</td></tr>
<tr><td colspan="2">バージョン変更のみ</td></tr>
<tr><td>SunMSCAPI 1.6</td><td>SunMSCAPI 1.7</td></tr>
<tr><td colspan="2">Windows版のみ提供のMS CAPIを使ったプロバイダ。
SignatureでNONEwithRSA、SHA256withRSA、SHA384withRSA、SHA512withRSAの
新規サポート</td></tr>
</tbody>
</table>
</center>

XML正規化1.1(Canonical XML 1.1)をサポートしたのは個人的にはちょっと嬉しいかもしんない。SunSASLのNTLM認証もいろいろ遊べそうですね。SunSASLについては<a href="http://download.java.net/jdk7/docs/technotes/guides/security/SunProviders.html#SunSASLProvider" target="_blank">ここ</a>にサポートアルゴリズムが書いてあるんですが、そこにはNTLMについて触れてません。しかしながらSunSASLプロバイダのinfoを見てみるとこんな感じになってます。
<blockquote>Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, <font color="orange"><b>NTLM</b></font>)</blockquote>
どっちが正しいんでしょうね？時間のあるときみてみようと思います。
</p>

<h3><u>楕円暗号(Elliptic Curve Cryptography)のサポート</u></h3>
<p>
Java SE 7になってようやく楕円暗号のためのJCEプロバイダであるSunECが新たに提供されるようになりました。ECDH、ECDSAをサポートしておりSSL/TLSや署名なんかにちゃんと使えます。
署名アルゴリズムについては以下をサポートしています。
<center>
<table class="tbl1">
<thead><tr><th>SunECでサポートする署名アルゴリズム</th></tr></thead>
<tbody>
<tr><td>NONEwithECDSA</td></tr>
<tr><td>SHA1withECDSA</td></tr>
<tr><td>SHA256withECDSA</td></tr>
<tr><td>SHA384withECDSA</td></tr>
<tr><td>SHA512withECDSA</td></tr>
</tbody>
</table>
</center>
サポートしている楕円曲線の名前は以下の通りです。かなりの数サポートしていますね。カスタム定義した曲線の利用が可能なのかは時間があるとき調べてみたいと思います。
<center>
<table class="tbl1">
<thead><tr><th>曲線名</th><th>オブジェクト識別子</th></tr></thead>
<tbody>
<tr><td>secp112r1</td><td>1.3.132.0.6</td></tr>
<tr><td>secp112r2</td><td>1.3.132.0.7</td></tr>
<tr><td>secp128r1</td><td>1.3.132.0.28</td></tr>
<tr><td>secp128r2</td><td>1.3.132.0.29</td></tr>
<tr><td>secp160k1</td><td>1.3.132.0.9</td></tr>
<tr><td>secp160r1</td><td>1.3.132.0.8</td></tr>
<tr><td>secp160r2</td><td>1.3.132.0.30</td></tr>
<tr><td>secp192k1</td><td>1.3.132.0.31</td></tr>
<tr><td>secp192r1,NIST P-192,X9.62 prime192v1</td><td>1.2.840.10045.3.1.1</td></tr>
<tr><td>secp224k1</td><td>1.3.132.0.32</td></tr>
<tr><td>secp224r1,NIST P-224</td><td>1.3.132.0.33</td></tr>
<tr><td>secp256k1</td><td>1.3.132.0.10</td></tr>
<tr><td>secp256r1,NIST P-256,X9.62 prime256v1</td><td>1.2.840.10045.3.1.7</td></tr>
<tr><td>secp384r1,NIST P-384</td><td>1.3.132.0.34</td></tr>
<tr><td>secp521r1,NIST P-521</td><td>1.3.132.0.35</td></tr>
<tr><td>X9.62 prime192v2</td><td>1.2.840.10045.3.1.2</td></tr>
<tr><td>X9.62 prime192v3</td><td>1.2.840.10045.3.1.3</td></tr>
<tr><td>X9.62 prime239v1</td><td>1.2.840.10045.3.1.4</td></tr>
<tr><td>X9.62 prime239v2</td><td>1.2.840.10045.3.1.5</td></tr>
<tr><td>X9.62 prime239v3</td><td>1.2.840.10045.3.1.6</td></tr>
<tr><td>sect113r1</td><td>1.3.132.0.4</td></tr>
<tr><td>sect113r2</td><td>1.3.132.0.5</td></tr>
<tr><td>sect131r1</td><td>1.3.132.0.22</td></tr>
<tr><td>sect131r2</td><td>1.3.132.0.23</td></tr>
<tr><td>sect163k1,NIST K-163</td><td>1.3.132.0.1</td></tr>
<tr><td>sect163r1</td><td>1.3.132.0.2</td></tr>
<tr><td>sect163r2,NIST B-163</td><td>1.3.132.0.15</td></tr>
<tr><td>sect193r1</td><td>1.3.132.0.24</td></tr>
<tr><td>sect193r2</td><td>1.3.132.0.25</td></tr>
<tr><td>sect233k1,NIST K-233</td><td>1.3.132.0.26</td></tr>
<tr><td>sect233r1,NIST B-233</td><td>1.3.132.0.27</td></tr>
<tr><td>sect239k1</td><td>1.3.132.0.3</td></tr>
<tr><td>sect283k1,NIST K-283</td><td>1.3.132.0.16</td></tr>
<tr><td>sect283r1,NIST B-283</td><td>1.3.132.0.17</td></tr>
<tr><td>sect409k1,NIST K-409</td><td>1.3.132.0.36</td></tr>
<tr><td>sect409r1,NIST B-409</td><td>1.3.132.0.37</td></tr>
<tr><td>sect571k1,NIST K-571</td><td>1.3.132.0.38</td></tr>
<tr><td>sect571r1,NIST B-571</td><td>1.3.132.0.39</td></tr>
<tr><td>X9.62c2tnb191v1</td><td>1.2.840.10045.3.0.5</td></tr>
<tr><td>X9.62 c2tnb191v2</td><td>1.2.840.10045.3.0.6</td></tr>
<tr><td>X9.62 c2tnb191v3</td><td>1.2.840.10045.3.0.7</td></tr>
<tr><td>X9.62 c2tnb239v1</td><td>1.2.840.10045.3.0.11</td></tr>
<tr><td>X9.62 c2tnb239v2</td><td>1.2.840.10045.3.0.12</td></tr>
<tr><td>X9.62 c2tnb239v3</td><td>1.2.840.10045.3.0.13</td></tr>
<tr><td>X9.62 c2tnb359v1</td><td>1.2.840.10045.3.0.18</td></tr>
<tr><td>X9.62 c2tnb431r1</td><td>1.2.840.10045.3.0.20</td></tr>
</tbody>
</table>
</center>

Java SE 7のSunJSSEプロバイダでサポートしているCipherSuitesのリストは<a href="http://download.java.net/jdk7/docs/technotes/guides/security/SunProviders.html#SupportedCipherSuites">ここ</a>にありますが、その中で楕円系のCipherSuitesはこんな感じ、、、かなりの数ですね。メンテしている<a href="http://www9.atwiki.jp/kurushima/pub/pkimisc/SSLTLS_CipherSuite_Support_Table_.html">環境別のCipherSuitesサポート状況のテーブル</a>は、近いうちJava SE 7を含め歴代Javaのサポート状況を追記したいと思っています。

<center>
<table class="tbl1">
<thead><tr><th>Java SE 7 SunJSSEプロバイダの提供する楕円系CipherSuites</th></tr></thead>
<tbody>
<tr><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</td></tr>
<tr><td>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA</td></tr>
<tr><td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</td></tr>
<tr><td>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</td></tr>
<tr><td>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_RC4_128_SHA</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_RC4_128_SHA</td></tr>
<tr><td>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</td></tr>
<tr><td>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</td></tr>
</tbody>
</table>
</center>
次に簡単なHTTPSクライアントを書いてTLSのelliptic_curves extensionに何が設定されているか、パケットキャプチャして調べてみました所、下のような感じになっていました。げげっ25個もサポートされています。多すぎです。IEやFireFoxでは確か3つぐらいだったはず。
<center>
<table class="tbl1">
<thead><tr><th>TLS elliptic_curves拡張にある曲線名</th></tr></thead>
<tbody>
<tr><td>secp256r1</td></tr>
<tr><td>sect163k1</td></tr>
<tr><td>sect163r2</td></tr>
<tr><td>secp192r1</td></tr>
<tr><td>secp224r1</td></tr>
<tr><td>sect233k1</td></tr>
<tr><td>sect233r1</td></tr>
<tr><td>sect283k1</td></tr>
<tr><td>secp384r1</td></tr>
<tr><td>sect409k1</td></tr>
<tr><td>sect409r1</td></tr>
<tr><td>secp521r1</td></tr>
<tr><td>sect571k1</td></tr>
<tr><td>sect571r1</td></tr>
<tr><td>secp160k1</td></tr>
<tr><td>secp160r1</td></tr>
<tr><td>secp160r2</td></tr>
<tr><td>sect163r1</td></tr>
<tr><td>secp192k1</td></tr>
<tr><td>sect193r1</td></tr>
<tr><td>sect193r2</td></tr>
<tr><td>secp224k1</td></tr>
<tr><td>sect239k1</td></tr>
<tr><td>secp256k1</td></tr>
</tbody>
</table>
</center>
</p>

<h3><u>その他気になった変更点</u></h3>
<p>
セキュリティ関係の変更点は<a href="http://download.java.net/jdk7/docs/technotes/guides/security/enhancements7.html">ここ</a>にまとめらているんですが、その中で気になったところをかいつまんで紹介したいと思います。

<dl>
<dt><b>JSSE(SSL/TLS), TLS 1.1, TLS 1.2</b>
<dd>TLSv1.1, TLSv1.2 がサポートされるようになりました。
<dt><b>JSSE(SSL/TLS) Connection-sensitive trust management</b>
<dd>SSL/TLSで使われるアルゴリズムを署名アルゴリズム等弱い物を使わない等指定できるようです。
証明書の中のアルゴリズムまで制限できるのか気になるところ。
<dt><b>JSSE(SSL/TLS) Endpoint verification</b>
<dd><a href="http://download.java.net/jdk7/docs/api/javax/net/ssl/HostnameVerifier.html">HostnameVerifier()</a>を定義すれば、
SSL/TLSのホストの一致確認方法を実装側で
制御できるようです。逆にホスト名をチェックしないこともできたり、証明書のへんなところに入っている
ホスト名であっても認証できるようにしたりできますね。
<dt><b>JSSE(SSL/TLS) TLS renegotiation</b>
<dd>2009年3月に発表されたSSL rebindingやSSL renegotiationといわれるSSL/TLSの仕様の欠陥をついた攻撃を防ぐためのTLS renegotiation拡張をサポートしているそうだ。
<dt><b>JSSE(SSL/TLS) Server Name Indication (SNI) for JSSE client</b>
<dd>SNI拡張がサポートされた。確かにパケットキャプチャするとClientHelloに入っている。一台のウェブサーバーで複数のバーチャルホストに対してちゃんとHTTPS接続することができるようになります。これはテスト目的で前から非常に欲しかった機能。
</dl>
</p>

<p>
以上、Java SE 7 リリース記念ということで、JCE関連の機能の変更点をみてみました。やべやべ、もう寝ないとorz
</p>

<h3><u>参考リンク</u></h3>
<ul>
<li><a href="http://download.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html">
Java&#8482; Cryptography Architecture (JCA) Reference Guide</a></li>
<li><a href="http://download.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html">Java&#8482; SE 7 Release Security Enhancements</a></li>
<li><a href="http://download.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html">
Java&#8482; Cryptography Architecture Oracle Providers Documentation for Java Platform Standard Edition 7</a></li>
<li><a href="http://download.oracle.com/javase/7/docs/technotes/guides/security/certpath/CertPathProgGuide.html">
Java&#8482; PKI Programmer's Guide</a></li>
</ul>

<h3><u>関連記事</u>></h3>
<ul>             
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615116.html">祝 Java SE 7 リリース記念「JCEはどうなってんの？」 (2011.07.29)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1615933.html">祝 Java SE 7 リリース記念(第2弾)「証明書検証の弱いアルゴリズムの制限機能」 (2011.08.01)</a></li>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1616725.html">祝 Java SE 7 リリース記念(第3弾) 「世界最強(かもしんない)CipherSuite一覧の更新」 (2011.08.03)</a></li>
</ul>

<h3><u>変更履歴</u></h3>
<ul>
<li>2011-07-31 参考リンクにおいてリンク切れを修正、JCA、PKIを追加</li>
</ul>

]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>

<entry>
<title>SignNowを試してみたぞ</title> 
<link rel="alternate" type="text/html" href="http://blog.livedoor.jp/k_urushima/archives/1582118.html" />
<modified>2011-07-28T16:25:35Z</modified> 
<issued>2011-04-08T00:47:37+09:00</issued> 
<id>tag:blog.livedoor.jp,2011:k_urushima.1582118</id>
<summary type="text/plain">
20日ぐらい前、SignNow (https://signnow.com/)という電子署名をしてくれるらしいサービスが近日リリース予定というのを見つけまして、業界では楽しみにしていた方が何人かいたみたいですが(笑)どうやらようやく今日正式にサービス開始になったみたいなもんで早速試してみ...</summary> 
<dc:subject>PDF署名</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.livedoor.jp/k_urushima/archives/1582118.html">
<![CDATA[<p>
20日ぐらい前、<a href="https://signnow.com/" target="_blank">SignNow (https://signnow.com/)</a>という電子署名をしてくれるらしいサービスが近日リリース予定というのを見つけまして、業界では楽しみにしていた方が何人かいたみたいですが(笑)どうやらようやく今日正式にサービス開始になったみたいなもんで早速試してみました。<a href="https://esign.adobe.com/" target="_blank">Adobe eSIGNATURES</a>なんかと似た感じなんすかね？乞うご期待。
</p>
<h3><u>SignNowってどういうサービスなの？</u></h3>
<p>
<a href="https://signnow.com/" target="_blank">SignNow</a>は
米国のオンライン電子公証サービス<a href="http://notarynow.com/" target="_blank">NotaryNow</a>の提供するウェブオンライン電子署名サービスでテキストやPDFなどのファイルを送信し、ウェブ画面上で手書き署名画像の場所を決めてやれば、サーバー側で電子署名してくれて署名済みPDFファイルをダウンロードできるようになっているというものです。サービスを利用するために事前/事後でアカウント作成をする必要はなくすぐに利用することができます。アプリケーションも一切必要なくウェブブラウザだけでできるそうです。
</p>
<h3><u>使ってみましょ</u></h3>
<p>
試しに、"aaa"という文字が入ったテキストファイルをアップロードして署名してみましょう。
<ol>
<li>
<a href="https://signnow.com/" target="_blank">SignNowのトップページ</a>をウェブブラウザで開き「Upload&amp;Go」のボタンをクリックします。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/f/5/f5a0b839.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/f/5/f5a0b839-s.png" width="600" height="477" border="0" alt="signnow01" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
<li>
署名してもらうファイルを選択します。テキストファイルやPDFなど
多分、OpenOfficeで扱えるフォーマットなら何でもアップロード
できるんだと思います。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/e/5/e53a5f24.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/e/5/e53a5f24-s.png" width="300" height="200" border="0" alt="signnow02" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
<li>
アップロードしたファイルがPDFに変換されます。付箋など貼ることも
できるようです。表示されているファイルをクリックすると
手書き署名入力ダイアログが表示されます。マウスじゃうまく
手書き署名はできないし、毎回同じように書けっこないから
こりゃあくまでも飾りですね。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/9/f/9f1623f8.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/9/f/9f1623f8-s.png" width="600" height="376" border="0" alt="signnow03" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
<li>
手で書くのが面倒ならば自分の名前をタイプして手書き風フォントで
手書き署名風の画像を表示させることもできます。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/3/a/3a3ff5a9.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/3/a/3a3ff5a9-s.png" width="600" height="376" border="0" alt="signnow04" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
右側にメールアドレスを入力する箇所があります。
正しいアドレスを入れなきゃいけない風のことを書いてありますが、
別に嘘のアドレスでも問題はありません。
</li>
<li>
次に手書き署名画像を表示させる場所をマウスで動かして設定します。
右にあるオレンジの「Complete」ボタンを押せば完成です。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/6/3/631edcd6.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/6/3/631edcd6-s.png" width="600" height="351" border="0" alt="signnow05" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
<li>
最後に署名完了の画面が表示されます。
画面中の「Click here to download」から署名済みPDFファイルを
ダウンロードできます。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/e/f/ef748949.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/e/f/ef748949-s.png" width="600" height="440" border="0" alt="signnow06" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</li>
</ol>
</p>

<h3><u>生成された電子署名付きPDFを開いてみよう</u></h3>
<p>
さて、生成されたPDFファイルを開いてみましょう。署名パネルボタンを開き、「すべてを検証」のリンクをクリックしてもAdobe Acrobat Reader
のデフォルト設定では「文書の証明の完全性が不明です。
作成者を検証できませんでした。」と表示されます。
デフォルトではWindowsのルート証明書ストアを使わないよう
設定されているためです。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/1/9/1943f6fa.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/1/9/1943f6fa-s.png" width="600" height="412" border="0" alt="signnow_c1" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
証明書の話は後でやりますが、これを検証できるようにするには
メニュー「編集＞環境設定」を開き「セキュリティ」を選択します。
「詳細環境設定」のボタンを押します。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/6/d/6df163cc.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/6/d/6df163cc-s.png" width="600" height="410" border="0" alt="signnow_b2" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
「電子署名の詳細環境設定」で「Windows統合」のタブを開き以下の2つにチェックを入れます。
<ul>
<li>Windows証明書ストアからの証明書取り込みと使用を有効にする。</li>
<li>証明済み文書を検証</l>
</ul>
このように設定された状態で再度「すべてを検証」をすれば
下のように検証成功となります。
<br clear="all"/>
<a href="http://livedoor.blogimg.jp/k_urushima/imgs/f/c/fc197f44.png" target="_blank"><img src="http://livedoor.blogimg.jp/k_urushima/imgs/f/c/fc197f44-s.png" width="600" height="241" border="0" alt="signnow_b1" hspace="5" class="pict" align="left"  /></a>
<br clear="all"/>
</p>

<h3><u>PDF署名をみてみると</u></h3>
<p>
証明書の話は後にして、PDF署名の署名ディクショナリはこんな感じ
<blockquote>
/Type /Sig<br/>
/Filter /Adobe.PPKLite<br/>
/SubFilter /adbe.pkcs7.detached<br/>
/ByteRange [0 10060 21804 57036]<br/>
/Contents &lt;308212....&gt;<br/>
</blockquote>
署名はフツーの署名タイムスタンプなしのPKCS#7署名で
署名属性もこれまた普通です。
<ul>
<li>contentType</li>
<li>signingTime</li>
<li>messageDigest</li>
<li>sMIMECapabilities</li>
</ul>
Reasonの値だけに特徴があってこんな感じ。
入力した本物とは限らないメールアドレスと
操作したIPアドレスがReasonに記載されています。
<blockquote>
/Reason (<br/>
IP Address: 192.168.128.110<br/>
Email address of signer (unconfirmed): foo@foo.com<br/>
Date/Time: 1:08 EDT 4/7/2011<br/>
This document has not been modified.<br/>
This certificate was signed using SignNow.com<br/>
SignNow itself does not sign this document.<br/>
This is to be used only for data integrity, not identification.<br/>
) 
</blockquote>
</p>

<h3><u>さて署名者証明書とその証明書チェーンは？</u></h3>
<p>
PDF署名に使われた署名者証明書はドイツの認証サービス
TC TrustCenterから発行されたもので以下のような
証明書チェーンになっています。
<ul>
<li>ルートCA：TC TrustCenter Universal CA I</li>
<li>中間CA：TC TrustCenter Class 1 L1 CA IX</li>
<li>署名者証明書：SignNow Online</li>
</ul>
ルートCAは最近のWindowsの信頼されるルート認証機関に
デフォルトで含まれているものです。(少なくとも2009年2月から
は入っています。)
</p>
<p>
署名者証明書の主体者識別名はこんな感じ。
雑な感じですねぇ。
<blockquote>
/C=US<br/>
/ST=CA<br/>
/L=Newport Beach<br/>
/OU=To verify, email: verified@signnow.com←ええ？？<br/>
/CN=SignNow Online<br/>
/SERIALNUMBER=online signing service←なんじゃこりゃ？<br/>
</blockquote>
わりとまともなところが発行した証明書なんで
概ね問題ないんですが、拡張鍵使用目的の値はこんなの。
<ul>
<li>クライアント認証 (1.3.6.1.5.5.7.3.2)</li>
<li>S/MIME電子メールの保護 (1.3.6.1.5.5.7.3.4)</li>
<li>IPsecVPNユーザー (1.3.6.1.5.5.7.3.7)</li>
<li>スマートカードログオン (1.3.6.1.4.1.311.20.2.2)</li>
</ul>
この鍵使用目的じゃPDF署名に使っていいかは
ちょっと微妙なところですねぇ。
電子メールの保護に入れちゃっていいんですかねぇ？
しっかし、Microsoftの証明書ビューアもヒドイ。
ipsecUser (1.3.6.1.5.5.7.3.7)を
「IPセキュリティユーザー」と訳すのはどうなんでしょうねぇ？
</p>

<h3><u>というわけでこれは何を証明してくれるのか？</u></h3>
<p>
これは、Adobe eSIGNATURESの時にも述べたように
文書の作成者、受領者、承認者でもない、
なんでもない人による自動的な署名なんですよね。
SignNowは署名対象に対して何の保証もしてくれません。
また、途中誰でも文書を改竄してから再署名するチャンスが
いくらでもあるので文書の完全性についても怪しいです。
Adobe eSIGNATURESについてはアカウントを持っている人が
行っていることになるのでAdobeが公証人として信頼できる組織ならば
証明にもなるかもしれませんが、SignNowについては
何ら本人を認証するものではないので、
生成された署名には何の意味もありません。
</p>
<h3><u>これって優良誤認じゃないの？</u></h3>
<p>
サービスの<a href="https://signnow.com/index/infolegal">
「Legal &amp; Secure」のページ</a>に
「電子署名は手書き署名と同等の法的効力を持つ」とか
「電子政府でも使われている」とか
各国の電子署名法を参照してみるとかして
SignNowのサービスによる電子署名が
法的効力を持っているかのように
「Don't worry! Even if your signature
looks weird, It's still legally valid.」みたいな
事を書いていますがとんでもない話です。
<a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:31999L0093:en:HTML" target="_blank">EUの電子署名に係る指針</a>であったり米国のESIGN Actなどで
電子署名が手書き署名と同等の法的効力を持つためには
「署名者(signatory)本人が電子署名を行ったと
特定できる場合にのみ電子署名が手書き署名と同等の法的効力を持つ」
としてます。
通常はスマートカードなどを用いて本人しか使用することができない
鍵がきちんと管理されており、その鍵と本人との関係が電子証明書により
紐づけられており、その鍵を使用して署名した場合に
法的効力を持つのです。
SignNowの場合は誰が署名したかなんて全くわからないわけですよね。
SignNowの署名が法的効力を持つかのような表現をしているのは
いけない事です。JAROに訴えちゃいたくなります。
</p>
<p>
<a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:31999L0093:en:HTML" target="_blank">EUの電子署名に係る指針</a>に基づいて欧州各国の電子署名法を定めていますが電子署名が手書き署名と同等の法的効力を持つためには適格電子署名(qualified electronic signature)である必要があるとしています。
<blockquote>
・適格電子署名(qualified electronic signature)は以下が必要<br/>
　・署名者である自然人が特定できる<a href="http://www.ipa.go.jp/security/rfc/RFC3739JA.html" target="_blank">適格証明書(qualified certificate)</a>を用いて署名されている。<br/>
　・署名者本人がのみが利用可能なセキュアな署名デバイスにより署名されていること。<br/>
　・証明書と署名データとの関係をより厳密に特定できる高度電子署名(advanced electronic signature)が使われている事。<br/>
</blockquote>
これと比較してみるとSignNowの署名はどれ一つ要件を満足していない事がわかります。
高度電子署名のフォーマットにはバイナリ形式の<a href="http://ja.wikipedia.org/wiki/CAdES" target="_blank">CAdES</a>、XML形式の<a href="http://ja.wikipedia.org/wiki/XAdES" target="_blank">XAdES</a>、PDF形式のPAdESがありフォーマットの雛型(プロファイル)は日本工業規格(JIS)化されています。
</p>
<p>
また、ホームページを見るとiPhoneからでも
署名ができるかのような表現になっていますけど、
現在 iPhone 用のアプリを提供しているわけでもないし、
ファイルアップロードボタンが表示されないので
iPhoneのSafariから本サービスを利用することはできません。
これも優良誤認ですよね。
(もう一度iPhoneで開いて良く見てみたら
mobile uploads coming soonとなってますね（＾＾；)
</p>

<h3><u>おわりに</u></h3>
<p>
というわけで、おもしろそうなサービスだし、
電子署名の新しい可能性を示してくれている感じもしますが
何の役にも立たない上に、優良誤認というか
詐欺まがいの代物だと思いますがどうでしょうか？
なんか、長くなっちゃいましたが、今日はこの辺で、、、
</p>

<h3><u>関連リンク</u></h3>
<ul>
<li><a href="http://blog.livedoor.jp/k_urushima/archives/1430657.html">Adobe eSignaturesを試してみたんですが、、、(2010.05.17)</a></li>
</ul>

]]> 
</content>
<author>
<name>k_urushima</name> 
</author>
</entry>
</feed>

