2008年5月27日火曜日

AndroidにおけるPKI実装

昨日、グーグルのソフトウェア・エンジニアの若狭氏とAndroidのPKI実装について議論した。
Androidのパッケージの中身には以下があって、
android
com.google
com.ibm.icu4jni
org.apache.commons.codec
org.apache.commons.httpclient
org.apache.commons.logging
org.apache.harmony
org.apache.http
org.bluz
org.bouncycastle
org.json
org.kxml2
org.mobilecontrol
org.w3c.dom
org.xml.sax
org.xmlpull
SQLite
bouncycastle.orgが含まれている。ここまでは若狭氏に教わったことだ。

自分で調べたところ、Bouncy CastleのVersion 1.38のようだ。
The Legion of the Bouncy Castle」の最新版は、Version 1.39となっている。Android SDK 1.0の時には、Bouncy Castle v1.39が搭載されることを期待しよう。比較的大きなライブラリのBouncy Castleが動作するのだからJDKとの互換性がどうやら高いようだ。ただし、Bouncy Castleが動いたからといって、JDKのどのバージョンとの互換性があるのかはわからない。
なぜならBouncy CastleはJDK1.4-1.6に主に対応しているからだ。1.3以前でも十分に使えるようだ。Apache Harmonyをベースにしているのであれば、J2SE 1.5に相当するはずだ。
なぜ、J2SEと思うかというとBouncy CastleのJ2ME版はTSPなどの機能が無いからだ。

Bouncy Castle Specifications を見ると、SHA-256からSHA-512の実装も入っている。Whirlpool 512bitも実装されている。2010年問題にも対応ができそうだ。

Bouncy Castleは、S/MIMEの実装も持っているので電子メールのS/MIME署名も扱える。JavaによるPDFの処理系は、iTextがある。このiTextは、Java版のBouncy Castleが必要だ。電子署名の応用としての長期署名フォーマットのOpenXAdES(JDigiDoc)は、JavaのXAdES実装だ。Bouncy-Castleを使っている。(See "JDigiDoc Programmers Guide")J2MEだと以上のような実装を全てカバーするのは無理がある。だからJ2SE互換レベルに携帯電話がなるのは非常に歴史的なことではないかと思う。

余談だが、Bouncy Castleには、C#版(1.3)もありMonoとの併用も考えられている。C#版もだんだんとJava版に追いつきつつあるようだ。iText.NETという.NET版のiTextもある。こちらも、C#版のBouncy Castleが必要だ。C#版の長期署名XAdESは、LeXAdESライブラリが2008-04-30に公開された。
このXAdESライブラリは実システムでの採用実績がいろいろあるようなので安心できるだろう。
# 仮定形で申し訳ない。

もし、Dalvik VMでMonoが動作するようになったらPKI関係も十分使えそうだ。
Windows上での暗号アルゴリズムの問題については「.NET Framework のRSA署名用ハッシュアルゴリズム[by miyachi]」が参考になる。

ちなみに日本語でのBouncy Castleの解説ページもある。LangEdge社で公開している。既に古くなっているが参考にはなるだろう・・・

今後が、楽しみだ。

0 件のコメント: