15 情経第 1516 号 セキュリティ API に関する技術調査 − Part 4 − IC カードなどのハードウェアトークン API 2004 年 2 月 独立行政法人 情報処理推進機構 登録商標について Microsoft、MS、Windows、Windows 2000、Windows NT、Windows ロゴ、Internet Explorer、Outlook、 Visual C++などは、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標 である。 Sun Microsystems、Sun ロゴ、Java コーヒーカップロゴ、Solaris、Java、JDK、Solaris などは、米国 Sun Microsystems の米国およびその他の国における登録商標または商標である。 その他、本文書に記載されている会社名、商品名、製品名などは、一般に各社の商標または登録商標 または商標である。 本書では、™、©、®などを記載しない。 ― 目 次 ― 1 はじめに.................................................................................................................. 1 2 ハードウェアトークンについて.............................................................................. 2 2.1 ハードウェアトークン ..................................................................................... 2 2.2 IC カード.......................................................................................................... 3 3 PKCS #11 ................................................................................................................ 7 3.1 PKCS #11 の概要 ............................................................................................. 7 3.1.1 PKCS #11 仕様の策定理由について ......................................................... 7 3.1.2 PKCS #11 の目的 ...................................................................................... 7 3.2 PKCS #11 の考え方.......................................................................................... 8 3.2.1 Cryptoki のシステムアーキテクチャ ........................................................ 8 3.2.2 PKCS #11 で規定される概念 .................................................................... 9 3.3 PKCS #11 の機能 ............................................................................................11 3.3.1 Cryptoki 関数一覧....................................................................................11 3.3.2 暗号メカニズム....................................................................................... 14 3.4 実装の留意点 ................................................................................................. 14 3.4.1 Cryptoki における留意点 ........................................................................ 14 3.4.2 動作環境における留意点 ........................................................................ 15 3.4.3 PKI ライブラリの実際 ............................................................................ 15 3.5 暗号処理アルゴリズムの一例 ........................................................................ 15 4 CSP (Cryptographic Service Provider) ................................................................ 17 4.1 CSP 概要 ........................................................................................................ 17 4.1.1 CryptoAPI について ............................................................................... 17 4.1.2 CSP について .......................................................................................... 17 4.1.3 CryptoAPI のシステムアーキテクチャ ................................................... 17 4.1.4 CryptoSPI と CryptoAPI の関係 ............................................................ 19 4.1.5 CryptoSPI について................................................................................ 20 4.1.6 CSP のプロバイダータイプについて ...................................................... 21 4.2 IC カードを使った CSP の開発留意点 ........................................................... 22 4.2.1 暗号ロジックの実装方法 ........................................................................ 22 4.2.2 マルチアプリケーション環境での利用................................................... 23 4.2.3 PIN のキャッシュ ................................................................................... 24 4.2.4 証明書のキャッシュ ............................................................................... 25 4.2.5 証明書の登録 .......................................................................................... 25 4.2.6 証明書の利用 .......................................................................................... 25 4.2.7 レジストリ登録情報 ............................................................................... 26 4.2.8 仕様書、参考資料 ................................................................................... 26 i 5 PKCS #11 と CSP の相互運用............................................................................... 27 5.1 IC カード内のファイル構造共通化................................................................. 27 5.2 キャッシュされた PIN の共有化 ................................................................... 27 5.3 データの差異の吸収....................................................................................... 29 5.4 属性証明書の扱い .......................................................................................... 29 6 PKCS #15.............................................................................................................. 30 6.1 PKCS #15 の背景・目的 ................................................................................ 30 6.2 PKCS #15 の考え方 ....................................................................................... 30 6.2.1 オブジェクトについて............................................................................ 31 6.2.2 ファイル構造のモデル............................................................................ 32 6.3 PKCS #15 の機能 ........................................................................................... 34 6.3.1 オブジェクトの管理について ................................................................. 34 6.3.2 オブジェクトの追加 ............................................................................... 34 6.3.3 オブジェクトの削除 ............................................................................... 36 7 GSC-IS (Government SmartCard Interoperability Specification) ..................... 37 7.1 成立した背景 ................................................................................................. 37 7.2 GSC-IS の構成 ............................................................................................... 37 7.3 Access Control ............................................................................................... 40 7.4 BasicServiesInterface ................................................................................... 41 7.5 Virtual Card Edge Interface ......................................................................... 43 7.6 Card Capabilities Container......................................................................... 45 7.7 DataModel ..................................................................................................... 47 8 まとめ ................................................................................................................... 48 9 参考文献................................................................................................................ 50 10 用語(参考)....................................................................................................... 51 ii ― 図目次 ― 図 図 図 図 図 図 図 図 図 図 図 2-1 専用 OS の論理ファイル構成例 ............................................................... 3 2-2 マルチアプリケーション OS 型 IC カードの構成 .................................... 4 3-1 Cryptoki のモデル例 ................................................................................ 8 4-1 CryptoAPI のシステムアーキテクチャ .................................................. 18 4-2 CryptoAPI と CryptoSPI の関係 ........................................................... 19 4-3 プリインストールされている CSP をコール ......................................... 22 4-4 共有、排他モードで IC カードと接続 ................................................... 23 4-5 PIN をキャッシュして自動的に Verify 実行 .......................................... 24 5-1 PIN キャッシュ共有と不正プログラム排除 ........................................... 28 5-2 アプリケーション毎に PIN キャッシュ................................................. 28 6-1 カードのファイル構造 ........................................................................... 32 図 図 図 図 図 図 図 図 図 6-2 PKCS #15 Application Directory .......................................................... 33 6-3 オブジェクト追加の例:STEP1 ............................................................ 34 6-4 オブジェクト追加の例:STEP2 ............................................................ 35 6-5 オブジェクト削除の例:削除前............................................................. 36 6-6 オブジェクト削除の例:削除後............................................................. 36 7-1 IS アーキテクチャモデル ....................................................................... 38 7-2 GSC-IS の動作 ....................................................................................... 39 7-3 CCCEF 配置場所.................................................................................... 45 7-4 T-Buffer、V-Buffer ................................................................................ 47 iii ― 表目次 ― 表 表 表 表 表 表 表 表 表 表 表 2-1 鍵および証明書の処理に必要なコマンド例 ............................................. 5 2-2 IC カードの不正利用を防止するために必要なコマンド例 ....................... 6 3-1 オブジェクトの代表例 ............................................................................. 9 3-2 オブジェクトの属性の代表例 ................................................................ 10 3-3 Cryptoki 関数一覧...................................................................................11 3-4 処理手順 ................................................................................................ 16 4-1 CryptoAPI 関数群 .................................................................................. 17 4-2 CSP がエクスポートすべき関数(必須) .............................................. 20 4-3 CSP がエクスポートすべき関数(オプショナル) ................................ 20 7-1 Access Control Rules ............................................................................. 40 7-2 BSI Application Interface...................................................................... 41 表 表 表 表 7-3 ファイルシステム用 APDU ................................................................... 43 7-4 VM カード APDU .................................................................................. 44 7-5 CCC フィールド ..................................................................................... 46 7-6 firstTLV(ファイルシステムカード) ........................................................ 47 iv 1 はじめに 本報告書では、ハードウェアトークンを利用するための API の標準化動向につい て解説する。 一般的には、トークン(token)という英単語は「しるし、象徴、証拠」という意 味をもつが、IT セキュリティ分野では身許(identity)を証明するための証拠という 意味で身許トークン(identity token)とうように使われる。LAN の規格にトークン リング(token ring)と呼ばれるものがあるが、この場合のトークンは LAN 上への データ送出権を表彰する「証拠」としてのデータを指しているのも、同じ用語の使い 方の類例である。 本報告書で述べるハードウェアトークンとは、トークンリングにおけるようなデー タ(ソフトウェア)としてのトークンではなく、身許トークンとして利用しうる物理 的な装置(device)のことである。 1 2 ハードウェアトークンについて 2.1 ハードウェアトークン ハードウェアトークンは身許トークンとしての用途から一般に携帯に便利な小型 の装置として作られ、IC カード(キャッシュカード大のプラスチック製カードに半 導体集積回路(IC チップ)を埋め込み、情報を記録/処理できるようにしたもの) や USB プラグ形態をした USB キー型トークン等がある。本章ではハードウェアト ークンの中でも、クレジットカードなどの金融系用途、交通系用途、携帯電話の USIM などとして広く利用されている IC カードについて主に述べる。 PKI システムの構築において留意しなければならないことは、プライベート鍵の漏 洩を防ぐことである。PKI システムで行われているプライベート鍵の管理方法には、 端末のハードディスクドライブ内にプライベート鍵を格納する、厳重にアクセス制御 されたサーバーで管理する等の方法があるが、ハードウェアトークンをプライベート 鍵の格納に用いることには二つのメリットがある。 第一に、プライベート鍵の所有者本人がプライベート鍵を携帯することが可能とな る。公開鍵暗号におけるプライベート鍵は、その所有者を識別するためのデータであ り、デジタル署名を生成する際の必須データである。プライベート鍵の携帯を可能と するハードウェアトークンは、ユーザが必要なときに必要な場所で(必ずしもコンピ ュータキーボードの前ではなく)、自分の身許を証明することを可能にし、電子商取 引など PKI の適用範囲を著しく拡大する。 第二に、IC カードのように CPU(演算処理装置)を具えたハードウェアトークン では、デジタル署名の生成をハードウェアトークン内で行うことができ、プライベー ト鍵の秘匿性はさらに高まる。たとえば、ハードウェアトークン内からプライベート 鍵を外に出さずにデジタル署名を生成することができるので、不正なサーバーやホス トプログラムに対して、プライベート鍵を開示する危険を冒すことなく、身許の証明 を実行できる。 「プライベート鍵の格納場所」として使われるハードウェアトークンには、外部か らの攻撃に対する耐タンパー性が要求される。 CPU を内蔵する IC カードでは、OS や IC カードアプリケーションに、利用者の 認証やファイルへのアクセス制御などのセキュリティ機能を搭載することにより、プ ライベート鍵のような秘密情報へのアクセス権を持たない第三者による読出しを禁 止する耐タンパー性を実現している。IC カードのセキュリティ機能は、コマンドイ ンターフェイスを経由した通常のアクセス経路に対しては、上述のように認証機能や アクセス制御機能で対応している。 2 近年では通常のアクセス経路以外に、IC チップそのものへの物理的な直接攻撃や、 CPU での処理中の消費電力などのリーク情報を利用した DPA(Differential Power Attack)などの攻撃が知られているが、金融系用途で使われる IC カードでは、これ らの攻撃にも十分に耐えられる対策が施されている。 2.2 IC カード 現在、IC カードは金融系、交通系を中心として多く利用されている。金融系では 接触型の IC カード、交通系では非接触型の IC カードが主に使われている。近年では、 接触型と非接触型のチップそれぞれを 1 枚のカードに加工したハイブリッド型の IC カードや、接触型と非接触型のチップが一体化して1つのメモリを共有しているデュ アルインターフェイス型の IC カードも出始めている。インターフェイスを 2 種類持 つことで、IC カードの利便性が向上する。特に、デュアルインターフェイス型の IC カードは1つのメモリを 2 つのインターフェイスで共有しているため、ハイブリッド 型に比べコストメリットもあり、今後更に利用が広まっていくと考えられる。 現状、PKI アプリケーション用で主に使われる IC カードは、Co-Processor が搭載 された高機能な接触型の IC カードである。 IC カードを OS で大別すると、専用 OS と呼ばれているものとマルチアプリケーシ ョン OS と呼ばれているもの2種類に分けられる。 専用 OS では、OS と IC カードアプリケーションが ROM に焼きこまれた状態にな っており、データのみが書き換え可能な EEPROM に格納される。データ部の論理フ ァイル構成が図 2-1のような構成になっているため、ファイルシステム OS とも呼ば れている。 図 2-1 専用 OS の論理ファイル構成例 一方、マルチアプリケーション OS では、汎用の基本処理を行うための OS が ROM に焼きこまれた状態になっており、IC カードアプリケーションはデータとともに EEPROM に格納される。書き換え可能な領域に IC カードアプリケーションが書き 3 込まれるため、IC カードを発行した後でも、新たな IC カードアプリケーションを IC カード内に追加することが可能となる。また、不要となった IC カードアプリケーシ ョンを削除することも可能である。 マルチアプリケーション OS は、図 2-2のように、IC カードアプリケーションの共 通の実行環境である Virtual Machine(VM)が、ハードウェアに依存性がある個別 の OS の差異を隠蔽するため、VM カードと呼ばれることもある。 現在、マルチアプリケーション OS 型の IC カードの代表的なものとして、Java Card と MULTOS の 2 種類があげられる。 図 2-2 マルチアプリケーション OS 型 IC カードの構成 IC カードがもつ携帯性や耐タンパー特性、更には、マルチアプリケーション OS の拡張性などの特徴を生かして、PKI 機能を持った IC カードアプリケーションが搭 載された IC カードへクレジットカード、キャッシュカード、ポイントカード、交通、 医療、入退出管理等、さまざまな機能が搭載された IC カードが今後多く利用されて いくと考えられる。 確かに、IC カードの高機能化・高性能化が進んでいるが、IC カードの基本機能や IC カードアプリケーションの開発には、以下に述べるような点を考慮する必要もあ る。 1. 携帯可能なサイズにするために格納できるデータの容量が制限されることも事 実である。利便性があがるからといって、いたずらに IC カードアプリケーシ ョンを搭載したり、多くのデータを格納しようとすると、大容量のチップが必 要になり、コスト的な問題や技術的な問題をクリアしなければならなくなる。 そのため、IC カードアプリケーションを作成する際は、必要なコマンドのみを 搭載し、スリム化を行うことも重要な点となる。 2. IC カードは、通信方式、OS の特性などで数種類に分類することができるが、 カードの形状、物理特性、端子、伝送プロトコル、APDU などは、国際標準規 格で決められている。IC カードの互換性を保つためには、標準規格に準じたコ マンドを実装する必要がある。 3. プライベート鍵の秘匿という観点からは、プライベート鍵を IC カード外部に 取り出さず IC カード内部でデジタル署名作成のための演算行うだけではなく、 プライベート鍵自身の生成も IC カード内で実行されることが望ましい。この 4 ように、PKI に関連する重い演算処理が求められるため、利便性を損なわない 処理速度を提供できる性能も IC カードと IC カードアプリケーションに求めら れる。 4. プライベート鍵を外部の暗号モジュールで生成し、IC カードに格納する方法も あるが、その場合、鍵生成から格納までセキュアな環境を、IC カードもサポー トしなければならない。特に、証明書を読み書きするためのコマンドも必要と なる。 接触型 IC カードの国際標準規格である ISO/IEC7816 での鍵および証明書の処理 に必要なコマンド例を表 2-1に示す。 表 2-1 鍵および証明書の処理に必要なコマンド例 用途 コマンド GENERATE PUBLIC KEY IC カード内で公開鍵ペア作成 IC カード内でプライベート鍵の演算 COMPUTE DIGITAL SIGNATURE (デジタル署名の生成) READ BINARY IC カードから証明書の読み出し (バイナリーデータの読み出し) READ RECORD (レコードの読み出し) WRITE BINARY (バイナリーデータの初期書き込み) UPDATE BINARY (バイナリーデータの更新) WRITE RECORD (レコードの初期書き込み) APPEND RECORD (レコードの追記) UPDATE RECORD (レコードの更新) CHANGE REFERENCE DATA IC カードへの証明書の書き込み IC カードへの鍵の書き込み また、PKI 機能だけでなく、IC カードを不正な利用から守るためのコマンドも必 要となってくる。 例えば、IC カード所有者の本人確認を行うことは必須だろう。IC カードは、内部 に記録されているデータへアクセスするための条件を設定することができ、この条件 が満たされているかどうかがそのファイルのセキュリティステータスとして保持さ れている。セキュリティステータスが満たされている時、そのファイルへアクセス可 能となる。現時点では、セキュリティステータスを満たすための条件として PIN 入 力を行い、IC カード内に格納してある PIN との比較を行うことにより認証を行う方 5 法が一般的である。バイオメトリクスと組み合わせた方法として、指紋データ、声紋 データの認証による本人確認が行える IC カードも存在し始めている。 更に、PIN を IC カードへ送信する際に、PIN の値を秘匿して渡すためのコマンド や、IC カードの特徴を生かして、外部接続装置と IC カードのお互いがそれぞれを認 証させるために、乱数を生成してそのデータの暗号化、復号を行うことにより IC カ ードおよび接続装置の正当性認証を行うことが必要な場合もある。 IC カードの不正利用を防止するために必要なコマンド例を表 2-2に示す。 表 2-2 IC カードの不正利用を防止するために必要なコマンド例 用途 コマンド ICカード所有者認証 VERIFY 送信コマンドの秘匿 ENVELOPE 乱数の生成 GET CHALLENGE ICカードの正当性認証 INTERNAL AUTHENTICATE 接続装置の正当性認証 EXTERNAL AUTHENTICATE IC カードを利用した PKI アプリケーションを開発する場合、PKI アプリケーショ ンからこれらのコマンドを IC カードへ直接送信して処理を行わせる方法もあるが、 この様な PKI アプリケーションを開発するためには、PKI に関する知識はもちろん のこと、IC カードの中身まで熟知している必要がある。 また、独自のコマンドを搭載している IC カードを利用する場合には、IC カードに 直接干渉するアプリケーションは、その特定の IC カードでしか動作しない。 このような、アプリケーション開発上のオーバーヘッドを取り除き、互換性を向上 させて適用範囲を広げるために、標準化された API が必要となってくる。 実際、PKI アプリケーションや IC カードも互換性を持たせるために、PKCS #11 や CryptoAPI の等標準化された API を利用したアプリケーションの開発が多く行わ れている。また、PKCS #15 による IC カード内部のファイル構造に関する標準化や GSC-IS による IC カードのコマンドインターフェイスの標準化も進んでいる。 今後、PKI アプリケーションや IC カードなどのハードウェアトークンの互換性を 得るために、これらのハードウェアトークン用の標準規格の利用がますます進んでい き、整備されていくだろう。 6 3 PKCS #11 3.1 PKCS #11 の概要 3.1.1 PKCS #11 仕様の策定理由について PKCS とは「Public Key Cryptography Standards」 (公開鍵暗号における標準) の略であり、RSA Laboratories を中心として策定された規格セットである。PKCS #11 は「Cryptographic Token Interface Standard」(暗号処理におけるトークンイン ターフェイスの標準)といわれており、トークンに対して、証明書の呼び出し/格納、 プライベート鍵/公開鍵を使用したデジタル署名/検証などの暗号演算を行うため の API が規定されている。 次に、PKCS #11 が策定された背景を記す。暗号関連製品の利用を促進させるには、 暗号技術が様々なトークンやアプリケーションで利用される必要がある。しかし各ベ ンダー(トークンベンダーや R/W ベンダー、アプリケーションベンダー等)がそれ ぞれ独自仕様の製品を開発し市場に参入すれば、製品間の互換がとれない可能性がで てくる。そのためベンダー側は、トークン∼アプリケーションに至るまで全てを網羅 しなければいけないことから、暗号関連製品の開発が難しくなる。仮に独自仕様の製 品が販売されても、エンドユーザは自由に製品(トークン、R/W、アプリケーション など)を選べなくなる。よって暗号関連製品の利用が促進される可能性は低い。その ため RSA Laboratories は、公開鍵暗号技術における標準仕様を策定した。 PKCS #11 仕様は、1996 年 7 月から検討され、最新のバージョンは 2.11 である。 また現在、バージョン 2.20 が検討され、Draft4 が公開されている。 バージョン 2.11 までは、様々なトークンやアプリケーションで利用されることを 考慮して、必須項目を規定することはなかったが、バージョン 2.20 では必須項目を 規定している。必須項目を規定した理由として、昨今様々なモバイルデバイスが市場 に登場しており、必須項目が規定されないと互換性を損ねる危険性があるためと考え られる。 本章では、バージョン 2.11 に基づき記述していく。 3.1.2 PKCS #11 の目的 PKCS #11 の主な目的としては、公開鍵暗号技術の実装間での互換性(トークン∼ アプリケーション間での互換性)が挙げられる。目標として、『特定の機種に依存し ない暗号製品の開発促進』と『複数アプリケーションから複数トークンへのアクセス 7 可能化』を挙げる。これらの目標を達成すべく、PKCS #11 では「Cryptoki(クリプ トキー)」と呼ばれる標準 API を規定し、アプリケーションに対してトークンへの共 通の論理的視点を与えた。 3.2 PKCS #11 の考え方 Cryptoki の一般的なモデルを記し、PKCS #11 の考え方について説明する。 3.2.1 Cryptoki のシステムアーキテクチャ PKCS #11 の目標として『複数アプリケーションから複数トークンへのアクセス可 能化』を挙げた。そのため、PKCS #11 では「スロット」と呼ばれる概念を導入して 実現を図っている。アプリケーションがトークンにアクセス(暗号処理など)する際 に「スロット」を経由すると規定している。アプリケーションはトークンにアクセス 可能なスロットを事前に検出し、トークンへのアクセスを行う。スロットの数に上限 は設けていないため、複数トークンへのアクセスが可能な仕様である。 図 3-1にモデル例を示す。 図 3-1 Cryptoki のモデル例 8 3.2.2 PKCS #11 で規定される概念 PKCS #11 の考え方を簡単に箇条書きで記す。また3.5 では、Cryptoki ライブラ リの使用例を記した。 1. Cryptoki を通してアクセスできるトークン内のデータは、「オブジェクト」と 見なされる。 2. トークンにアクセスができる者を、「ユーザ」として規定している。また、アク セスした者が「ユーザ」か否かを判断するために「PIN」の概念を規定してい る。 3. アプリケーションがトークンにアクセスする際は「スロット」を経由するが、 「セッション」と呼ばれる接続を確保してアクセス(暗号処理など)が可能とな る。 以上を踏まえ、PKCS #11 で使用されている用語・概念のうち主な7項目を説明す る。 (1) オブジェクト 「オブジェクト」とは、トークンに格納されるデータである。オブジェクトとし て格納されるデータの内容(「クラス」と呼ばれる)は主に表 3-1に記した 4 種類 があり、それぞれのオブジェクトにアクセスするための関数が PKCS #11 では規定 されている。 表 3-1 オブジェクトの代表例 クラス Data Key Certificate Hardware Feature 説明 任意のデータ 鍵。公開鍵、プライベート鍵、共通鍵の 3 種が定義でき る。 証明書。公開鍵用証明書と属性証明書の 2 種が定義でき る。 IC カード等のデバイスが保持しているユーザ表示用の データ。時計オブジェクトなどがある。 9 (2) オブジェクトの属性 オブジェクトには、「属性」が設定できる。主な属性を表 3-2に記す。 表 3-2 オブジェクトの属性の代表例 属性 Object Identifier 一般的な属性(例) (オブジェクト ID) Value(値) 種別を表 セッションに Token(永続的) わす属性 おける種別 Session(一時的) 説明 トークン内でユニークとす るオブジェクトの ID オブジェクト内のデータ セッションが終了しても存 在する セッションが終了すると破 棄される アクセス権に Public(公開) アクセス権フリー おける種別 Private(秘密) アクセスに PIN が必要 クラス特 鍵オブジェク ID(ID) 鍵の ID 有の属性 ト特有の属性 Start Date(開始日) 鍵の有効開始日 (例) (例) 発行者の名前 証明書オブジ Issuer(発行者) ェクト特有の 属性(例) (3) ユーザ 「ユーザ」とは、トークンにアクセスできる者である。SO(セキュリティオフ ィサー)ユーザと一般ユーザの 2 種類を規定している。 1. SO ユーザ:トークンの初期化、一般ユーザの PIN の設定が可能 2. 一般ユーザ:プライベートオブジェクトへのアクセスが可能 (4) PIN PKCS #11 では、ユーザ識別(ユーザログイン)のために、PIN が規定されてい る。 プライベートオブジェクト(Private 属性を有するオブジェクト)にアクセスし たい場合には、一般ユーザでログインが必要になる。以下の手順となる。 1. セッションを開く。 2. 一般ユーザの PIN をアクセス者に入力させる。 3. PIN の認証を行い、成功した場合に限り、プライベートオブジェクトへのア クセスが可能になる。 10 (5) セッション 「セッション」とは、暗号処理アプリケーションのトークンアクセス用の接続で ある。アクセス用に確保されたメモリと考えてもよい。つまり、アプリケーション がトークンにアクセスするには、必ずセッションを使用する必要がある。セッショ ンの役割として、ログイン管理、オブジェクト管理、暗号処理の 3 項目に大きく分 かれる。 セッションの種類として、 読み書き可能 と 読み出しのみ の 2 種ある。 Cryptoki は複数のセッションをサポートすることが可能である。 (6) スロット 「スロット」とは、アプリケーションがトークンにアクセスする際に経由するコ ンポーネント群である。 (7) トークン 「トークン」とは、認証用データが格納されたデバイスの総称である。具体的に は、IC カードが挙げられる。 3.3 PKCS #11 の機能 Cryptoki が規定している関数の一覧と、PKCS #11 で実装可能な暗号メカニズム について簡単に記す。 3.3.1 Cryptoki 関数一覧 Cryptoki が規定する関数は、表 3-3で記す 68 個である。 表 3-3 Cryptoki 関数一覧 分類 一般関数 関数名 C_Initialize C_Finalize C_GetInfo C_GetFunctionList 説明 Cryptoki ライブラリを初期化する Cryptoki ライブラリを終了する Cryptoki の一般情報を取得する Cryptoki ライブラリ関数のエントリ ポインタを返す システム内のスロット一覧を取得す る システム内の特定のスロットの情報 を取得する ス ロ ッ ト と ト C_GetSlotList ークン管理関 数 C_GetSlotInfo 11 分類 関数名 C_GetTokenInfo C_WaitForSlotEvent C_GetMechanismList C_GetMechanismInfo C_InitToken C_InitPIN C_SetPIN セ ッ シ ョ ン 管 C_OpenSession 理関数 C_CloseSession C_CloseAllSessions C_GetSessionInfo C_GetOperationState C_SetOperationState オブジェクト 管理関数 C_Login C_Logout C_CreateObject C_CopyObject C_DestroyObject C_GetObjectSize C_GetAttributeValue C_SetAttributeValue C_FindObjectsInit 暗号関数 復号関数 C_FindObjects C_FindObjectsFinal C_EncryptInit C_Encrypt C_EncryptUpdate C_EncryptFinal C_DecryptInit 12 説明 システム内の特定のトークンの情報 を取得する スロットのイベント(トークンの挿抜 など)の発生を待つ トークンで使用可能なメカニズム一 覧を取得する トークンで使用可能なメカニズムの 情報を取得する トークンを初期化する 一般ユーザ PIN の初期化を行う 現在ログイン中のユーザの PIN 変更 を行う セッションを開く セッションを閉じる あるトークンへの全セッションを閉 じる セッション情報を取得する セッションの暗号処理状態をバイト 列化して取得する セッションの暗号処理状態を設定す る トークンへのログインを行う トークンからのログアウトを行う 新規オブジェクトの生成を行う オブジェクトをコピーして新規オブ ジェクトを作成する オブジェクトの廃棄を行う オブジェクトサイズをバイト単位で 取得する オブジェクトの属性値を取得する オブジェクトの属性値を変更する オブジェクト検索処理の初期設定を 行う オブジェクト検索処理を実行する オブジェクト検索処理を終了する 暗号処理の初期設定を行う 単数ブロックの暗号化を行う 複数ブロックの暗号化を継続する 複数ブロックの暗号化を終了する 復号処理の初期設定を行う 分類 関数名 C_Decrypt C_DecryptUpdate C_DecryptFinal メ ッ セ ー ジ ダ C_DigestInit イジェスト関 数 C_Digest C_DigestUpdate C_DigestKey C_DigestFinal 署名と MAC 関数 C_SignInit C_Sign C_SignUpdate C_SignFinal C_SignRecoverInit C_SignRecover 署 名 と MAC C_VerifyInit の検証関数 C_Verify C_VerifyUpdate C_VerifyFinal C_VerifyRecoverInit C_VerifyRecover 目的暗号関数 C_DigestEncryptUpdate C_DecryptDigestUpdate C_SignEncryptUpdate C_DecryptVerifyUpdate 鍵管理関数 C_GenerateKey C_GenerateKeyPair C_WrapKey 13 説明 単数ブロックの復号を行う 複数ブロックの復号を継続する 複数ブロックの復号を終了する メッセージダイジェスト化処理の初 期設定を行う 単数ブロックのデータをメッセージ ダイジェスト化する 複数ブロックのメッセージダイジェ スト化を継続する 複数ブロックのメッセージダイジェ ストを継続する 複数ブロックのメッセージダイジェ スト化を終了する 署名処理の初期設定を行う 単数ブロックの署名を行う 複数ブロックの署名を継続する 複数ブロックの署名を終了する データ復元可能な署名の初期設定を 行う 復元可能な単数ブロックデータの署 名を行う 検証処理の初期設定を行う 単数ブロックの署名検証を行う 複数ブロックの署名検証を継続する 複数ブロックの署名検証を終了する データ復元可能な署名検証の初期設 定を行う 復元可能な単数ブロックデータの署 名検証を行う 複数ブロックの同時ダイジェスト化 と暗号化を継続する 複数ブロックの同時復号とダイジェ スト化を継続する 複数ブロックの同時署名と暗号化を 継続する 複数ブロックの同時復号と検証を継 続する プライベート鍵を生成し、新規オブジ ェクトを作成する 公開・プライベート鍵ペアを生成する 鍵のラップを行う 分類 乱数生成関数 関数名 C_UnwrapKey C_DeriveKey C_SeedRandom C_GenerateRandom 並 列 関 数 の 制 C_GetFunctionStatus 御関数 C_CancelFunction 説明 ラップ化された鍵のアンラップを行 う 基本鍵から鍵を導出する トークンの乱数生成器に、初期化用の 値を設定する 乱数または擬似乱数を生成する 並列実行中の関数状態を取得するた めの関数 (以前のバージョンで使用された関 数 。 現 在 は 、 常 に 戻 り 値 CKR_FUNCTION_NOT_PARALLE L である) 並列実行中の関数を停止する関数 (以前のバージョンで使用された関 数 。 現 在 は 、 常 に 戻 り 値 CKR_FUNCTION_NOT_PARALLE L である) 3.3.2 暗号メカニズム PKCS #11 で実装可能な暗号メカニズムは、177 個と多い。ただし、注意として、 Diffie-Hellman 演 算 の よ う に 、 鍵 ペ ア 生 成 に 使 用 さ れ る 暗 号 メ カ ニ ズ ム (CKM_DH_PKCS_KEY_PAIR_GEN) と 、 鍵 導 出 に 使 用 さ れ る 暗 号 メ カ ニ ズ ム (CKM_DH_PKCS_KEY_DRIVE)とを、別のメカニズムと規定する演算もある。 3.4 実装の留意点 PKCS #11 準拠のライブラリを使用してライブラリを実装する場合、以下の点を留 意すべきである。また、以下の点はアプリケーションを作成する場合でも留意すべき 事項に挙げられる。 3.4.1 Cryptoki における留意点 Cryptoki を利用する場合の留意点をいくつか挙げる。 1. Cryptoki で扱えるスロットは、C_Initialize 関数の実行時に確定される。その ため、C_Initialize 関数実行後に R/W をマシンにつないでも、Cryptoki では認 識されない。認識させるには、再度 C_Initialize 関数を実行する必要がある。 R/W と IC カードが一体化したトークンを利用する場合、注意が必要である。 14 2. 暗号処理用の関数は、初期化用(Init 関数) ・実行用・終了用(Final 関数)の 3 種類が規定されている。ただし、単数ブロックを暗号処理する場合は、終了 用(Final)の関数を実行する必要はない。 3. C_GetSlotList 関数や暗号用の関数(例えば、C_Encrypt 関数)において、関 数実行後に取得できる値が複数個の場合がある。そのためにそれらの関数にお いて、初めに個数のみを取得し、取得する領域を確保した後、値を取得するよ う規定されている。 3.4.2 動作環境における留意点 PKCS #11 の目標として、『特定の機種に依存しない暗号製品の開発促進』が挙げ られる。そのため、PKCS #11 準拠のライブラリの実装には、動作対象 OS の知識が 必要で、それらの OS 上で正常動作することを考慮している。また、PIN のキャッシ ュ等、エンドユーザへの利便性を考慮した設計もライブラリの特長として挙げられる だろう。 3.4.3 PKI ライブラリの実際 PKCS #11 の仕様は、セキュリティフレームワークで十分発揮できるものであり、 PKCS #11 準拠のライブラリを利用できれば十二分にセキュリティ機能が満たせる。 しかし前述したように、ライブラリを実装するには OS の知識等が必要なため、実装 完了まで長期間を有すると予想される。ただ、一部の実装で PKI ライブラリの役割 を果たせる場合が多いため、ライブラリ開発サイドの目的意識や相互運用性への配慮 等に、実装される機能は依存されるだろう。そのためアプリケーションベンダーは、 利用する PKI ライブラリの実装機能(製品仕様など)に留意する必要がある。また PKCS #11 では、ライブラリのファイルについて規定がない(推奨しているのみ)た め、ファイル名などにも留意が必要である。 一般的に Windows が使われる環境が多いため、Windows にプレインストールされ る Internet Explorer やスマートカードログオンの利用者が多いと予想される。 Internet Explorer やスマートカードログオンは CryptoAPI を PKI ライブラリとして 使用するため、1つのトークンを利用して、CryptoAPI 仕様のアプリケーションと の相互運用が可能であることを特長に挙げる PKI ライブラリも存在している。 3.5 暗号処理アルゴリズムの一例 PKCS #11 に基づいた暗号処理アルゴリズムの一例として、データオブジェクトを トークン内に作成し、既に格納されている鍵オブジェクトで暗号化を行う場合の例を 表 3-4に示す。 15 表 3-4 処理手順 順番 処理内容 1 Cryptoki の初期化 2 スロットに挿入されているトークンを検出し、 それらのスロットを ID として取得する。 3 新しいセッションを開き、セッションハンドル を取得する。 4 ログイン処理を行う。その際、取得したセッシ ョンハンドルと、PIN を引数として指定する。 5 データオブジェクトの作成。その際、セッショ ンハンドルと、オブジェクトの属性を引数とし て指定する。 6 トークン内の鍵オブジェクトを検出するに当た り、そのオブジェクトの属性(例えば、Object Identifier)を指定する。その際、セッションハ ンドルも引数として指定する。 7 指定された属性のオブジェクトを検出する。そ の際、セッションハンドルと、検出する最大個 数を引数として指定すると、オブジェクトのハ ンドルが取得される。 8 検出の Finalize。その際、セッションハンドル を引数として指定する。 9 暗号化の初期化。その際、セッションハンドル と、検出した鍵オブジェクトのハンドルと、使 用する暗号メカニズムを引数として指定する。 10 作成したオブジェクトの Value 属性(データ) に対し、暗号化を行う。その際、セッションハ ンドルも引数として指定する。 11 ログアウト。その際、セッションハンドルを引 数として指定する。 12 セッションハンドルを引数として指定し、セッ ションを閉じる。 13 Cryptoki の Finalize 16 使用する関数 C_Initialize C_GetSlotList C_OpenSession C_Login C_CreateObject C_FindObjectsInit C_FindObjects C_FindObjectsFinal C_EncryptInit C_Encrypt C_Logout C_CloseSession C_Finalize 4 CSP (Cryptographic Service Provider) 4.1 CSP 概要 4.1.1 CryptoAPI について CryptoAPI は Microsoft 社が定めた暗号機能を提供する API で、暗号化や復号演 算、デジタル署名の生成と検証などの機能を提供するものである。CryptoAPI は Microsoft 社が 1996 年に発表した「MISF: Microsoft Internet Security Framework」 のベースとなる技術であった。アプリケーション、システム、CSP の三層から成る構 造をしており、CSP によって暗号化機能が提供される仕組みをとっているため、暗号 技術の進化や輸出規制への対応を容易に行うことが可能である。 4.1.2 CSP について CSP(Cryptographic Service Provider)は暗号機能やデジタル署名生成機能がモ ジュール化されたソフトウェアである。Windows にはデフォルトで数種類のタイプ の CSP がインストールされており、CryptoAPI 経由でその機能を呼び出すことがで きる。また、CSP は開発ツールである CSPDK(CSP Development Kit)を Microsoft 社より入手することにより、ベンダーが独自に開発することも可能である。IC カー ドの持つ暗号機能を利用した、IC カード用の CSP が数多く開発されている。CSP は 実装すべきインターフェイスが規定されているだけであり、その実装方法はソフトウ ェア、ハードウェアを問わず自由である。 4.1.3 CryptoAPI のシステムアーキテクチャ CryptoAPI は暗号関連の操作に関する機能を提供しており、機能別に分類すると表 4-1のようになる。これらの関数と CSP との関係について説明する。 表 4-1 CryptoAPI 関数群 関数群 Base cryptograp hic functions Certificate encode/dec 関数の接頭辞 Crypt Crypt 説 明 CSP に接続するための関数である。アプリケーシ ョンは CSP 名を指定することで、接続する CSP を決定することが可能である。 証明書のエンコード、デコードを行うための関数 である。 17 関数群 ode functions Certificate store functions Simplified message functions Low-level message functions 関数の接頭辞 説 明 Store 証明書のコレクションを管理するための関数で ある。 Message メッセージやデータを暗号化/復号、デジタル署名 生成、デジタル署名の検証を行うための関数であ る。 Simplified message functions で呼び出される関 数である。低レベル関数であるためフレキシブル であるが、まとまった機能を実現するためにはよ り多くのファンクションコールを必要とする。 Msg 図 4-1に示す通り、アプリケーションはこれらの CryptoAPI 関数を呼び出して利 用することが可能であるが、CSP の関数をダイレクトにコールすることはできない。 CSP と通信する際には必ず Base cryptographic functions を経由することになる。 Base cryptographic functions には、使用する CSP を指定するパラメータが用意され ており、接続先 CSP を指定して CSP と通信を行うことになる。このパラメータが省 略された場合は、デフォルトの CSP が選択されることになる。 図 4-1 CryptoAPI のシステムアーキテクチャ 18 4.1.4 CryptoSPI と CryptoAPI の関係 本節では4.1.3節の仕組みをより詳しく説明する。 主にセキュリティ面での理由により、アプリケーションはダイレクトに CSP と通 信することはできない仕組みになっている。このため、アプリケーションは OS のフ ァイルである Advapi32.dll と Crypt32.dll でエクスポートされた関数をコールし、間 接的に CSP を呼び出す仕組みを提供している。OS はアプリケーションからのファン クションコールをフィルタリングし、適切な CSP へパスすることによって、アプリ ケーションからは間接的にアクセスされることになる。 CSP が実装してエクスポートする関数である CryptoSPI と CryptoAPI は1対1に 対応している。対応関係にある関数は、関数名の接頭辞(CryptoSPI の接頭辞は「CP」 であり、CryptoAPI の接頭辞は「Crypt」である)を除いた名称が一致している。 例えば CryptoAPI の CryptAcquireContext()に対応する CryptoSPI 関数は CPAcquireContext()である。 図 4-2 CryptoAPI と CryptoSPI の関係 19 4.1.5 CryptoSPI について 表 4-2に示す 23 の関数は、CSP で実装しエクスポートしなければならない関数で ある。 表 4-2 CSP がエクスポートすべき関数(必須) CryptoSPI CPAcquireContext CPCreateHash CPDecrypt CPDeriveKey CPDestroyHash CPDestroyKey CPEncrypt CPExportKey CPGenKey CPGenRandom CPGetHashParam CPGetKeyParam CPGetProvParam CPGetUserKey CPHashData CPHashSessionKey CPImportKey CPReleaseContext CPSetHashParam CPSetKeyParam CPSetProvParam CPSignHash CPVerifySignatur e 説 明 指定されたコンテナに対する鍵ハンドルを取得する ハッシュオブジェクトを生成する データの復号を行う ハッシュデータを使ってセッション鍵を生成する ハッシュオブジェクトを破棄する 鍵オブジェクトを破棄する データを暗号化する 暗号鍵をエクスポートする 鍵を生成する 乱数を生成する ハッシュオブジェクトのパラメータを取得する 鍵オブジェクトのパラメータを取得する プロバイダーオブジェクトのパラメータを取得する 不揮発な鍵ペアのハンドルを取得する ハッシュオブジェクトにデータをセットする ハッシュオブジェクトに鍵をセットする 鍵をインポートする CPAquireContext で生成したコンテキストを破棄する ハッシュオブジェクトにパラメータをセット 鍵オブジェクトにパラメータをセット プロバイダーオブジェクトにパラメータをセット ハッシュオブジェクトにデジタル署名する デジタル署名データの検証を行う 表 4-3に示す 2 つの関数はオプショナルであり、CSP のプロバイダータイプが PROV_RSA_SCHANNEL か PROV_DH_SCHANNEL の場合に実装しなければならない。 表 4-3 CSP がエクスポートすべき関数(オプショナル) CryptoSPI 説 明 CPDuplicateHash ハッシュオブジェクトのコピーを生成する CPDuplicateKey 鍵オブジェクトのコピーを生成する 20 4.1.6 CSP のプロバイダータイプについて CSP には、サポートするアルゴリズムや用途に応じてプロバイダータイプが用意さ れている。 プロバイダータイプは以下に示す 10 種類が予め定義されているが、CSP 開発者が 新しいプロバイダータイプを定義してもよい。 1. PROV_RSA_FULL 2. PROV_RSA_AES 3. PROV_RSA_SIG 4. PROV_RSA_SCHANNEL 5. PROV_DSS 6. PROV_DSS_DH 7. PROV_DH_SCHANNEL 8. PROV_FORTEZZA 9. PROV_MS_EXCHANGE 10. PROV_SSL 21 4.2 IC カードを使った CSP の開発留意点 4.2.1 暗号ロジックの実装方法 IC カードを使った CSP を開発するに当たり、IC カードで利用不可能な暗号機能を ホスト側で動作するソフトウェアから調達することとし、必ずしもサポート予定のア ルゴリズム全てを開発する CSP 自身で実装する必要はない。 この場合は図 4-3に示すように、Windows にプリインストールされている CSP を 呼び出すような構成としてもよい。また、ホスト側で実行しても安全な暗号演算(ハ ッシュ値の生成など)は、たとえ IC カードで実装されていたとしても、存在するな らば、プレインストールされているホスト上の CSP をコールして処理させることで 実行効率が向上する場合もある。 このように、ホスト上の CSP を利用することでサポートするアルゴリズムを増や すことが可能になるが、暗号鍵の管理など IC カード外での処理となるためセキュリ ティ面で問題がないか注意する必要がある。 図 4-3 プリインストールされている CSP をコール 22 4.2.2 マルチアプリケーション環境での利用 複数のアプリケーションから同時に IC カードが利用されることを想定する必要が ある。例えば、Internet Explorer でセキュリティにより保護された Web ページを SSL で閲覧しつつ、Outlook Express で S/MIME を行うなど、ごく普通に行われる。こ のため、仮に CSP が他の IC カードとの接続を許さないいわゆる排他モードで接続す るように実装されていると、他のアプリケーションから IC カードを利用できなくな る可能性がある(図 4-4参照)。 利用される環境によって、排他モードで接続する/しないを決める必要性がある。 排他処理を行わない場合、他のアプリケーションが IC カードの状態をどのように変 更するかが不明である。よって IC カードの状態が前回のアクセス終了時から変化し ていないと想定して動作させるような実装では正常に動作しないため、注意が必要で ある。 図 4-4 共有、排他モードで IC カードと接続 23 4.2.3 PIN のキャッシュ 複数のアプリケーションから IC カードにアクセスされると、セキュリティステー タスなどのセッションごとのセキュリティ情報が変更される可能性がある。このため、 セキュリティフリーでないコマンドを実行するためには PIN による認証がその都度 必要になってしまい、ユーザが何度も PIN を入力しなければならなくなってしまう。 ユーザの PIN 入力回数を少なくするために、例えばユーザが入力した PIN を CSP がキャッシュしておき、必要に応じて自動的に IC カードに対して Verify コマンドを 実行するような仕組みが必要となる(図 4-5参照)。 ただし、共有モードで IC カードに接続している状態で特定のアプリケーションが Verify コマンドに成功すると、他の CSP を呼び出すアプリケーションも同じセキュ リティレベルで IC カードにアクセスできてしまうことに注意しなければならない。 これを防ぐためには、上位アプリケーションが PIN を開錠したアプリケーションか どうかを判断するなどのロジックを入れる必要がある。 図 4-5 PIN をキャッシュして自動的に Verify 実行 24 4.2.4 証明書のキャッシュ PKI 技術を使ったシステムやアプリケーションでは、公開鍵を使ったデジタル署名 検証を行うために、IC カードから証明書データを読み出すことがよくある。X.509 形式の証明書データサイズは特殊なオブジェクトを含まなければ通常 1~2KByte 程 度である。ISO 準拠の IC カードの場合、デフォルトの通信速度は 9600bps であるた め、単純計算で証明書の読み出しに 1~2 秒要することになる。さらに R/W ドライバ や APDU 変換などのソフトウェアの処理、環境によっては、証明書データを複数回 に分けて読み出すこともあるため、実際には 3~4 秒程度を要することが多い。 IC カード内の証明書を読み出す場合は、利便性を損なわない様に工夫することも 必要となってくる。 4.2.5 証明書の登録 Internet Explorer や Outlook Express で SSL や S/MIME を行うためには、証明 書がローカルストア(レジストリ)に登録されていなければならない。つまり、IC カード内に証明書とプライベート鍵が格納されていて、CSP が正しくインストールさ れていたとしても、その証明書がローカルストアにコピーされていなければ利用でき ないことになる。このため IC カード用の CSP を開発する場合には、証明書取得時に レジストリにも証明書が登録されるような実装とするなどの工夫が必要である。 しかし、証明書を取得した PC と異なる PC で IC カードを利用する場合、ローカ ルストアには証明書が登録されていない。この場合、何らかのツールを利用してカー ド内の証明書を読み出してレジストリへ登録する仕組みが必要である。例えば常駐プ ログラムが IC カードの挿入を検知して、自動的に証明書を登録する方法などが考え られる。 4.2.6 証明書の利用 Internet Explorer や Outlook Express の機能を利用すると、ローカルストアに登 録された証明書の内容確認や削除を行うことができる。この時、IC カードを R/W に 挿入していたとしても、IC カード内に格納された証明書は表示されない。これは IC カード用の CSP 等、追加インストールした CSP を Internet Explorer が呼び出さな いためである。このため、IC カード用の CSP をインストールしただけでは、IC カー ドのメンテナンスができないため、専用のツールをあわせて用意する必要がある。 25 4.2.7 レジストリ登録情報 CSP や IC カード、R/W に関する情報はレジストリに登録しておく必要がある。こ の処理は通常 CSP のインストーラーによって行われる。 a) HKLM¥SOFTWARE¥Microsoft¥Cryptography¥Calais¥SmartCards にはカ ードの ATR、ATR マスク、対応する CSP 名を登録する。 CSP 名は CryptoAPI で CSP を呼び出す際に指定する CSP の名称である。 b) HKLM¥SOFTWARE¥Microsoft¥Cryptography¥Defaults¥Provider に は CSP 名、CSP のプロバイダータイプ、CSP の格納場所(パス)、署名が登録さ れる。 以下にこれらのレジストリ情報を利用して、カード挿入時に自動的に対応した CSP が選択され呼び出される手順の一例を示す。 1. カードが R/W に挿入されると ATR がカードから出力される。 2. この ATR 情報をキーにして上記a)のレジストリ情報を検索し、挿入されたカー ドに対する CSP 名を決定する。 3. この CSP 名を指定して CryptoAPI を呼び出せば、挿入されたカードにマッチ した CSP が起動される。 4. この際、上記b)のレジストリ情報から CSP の実体とその署名データが得られ、 CSP の正当性もシステムによって検証される。 4.2.8 仕様書、参考資料 CSP で実装する関数については MSDN に全て記載されている。しかし、サポート すべきフラグなどの情報に関しては MSDN で全て網羅されていないのが現状である。 最新の Platform SDK に含まれているヘッダファイル等を参考にしつつ情報を取得 することも必要である。また、CSP の開発についての不明点は CryptoAPI のメーリ ングリストへ投げかけてみるのもよい方法である。 (http://discuss.microsoft.com/archives/cryptoapi.html) 26 5 PKCS #11 と CSP の相互運用 5.1 IC カード内のファイル構造共通化 CSP で利用する IC カードには、コンテナの情報、プライベート鍵、証明書が関連 付けられて保管され、これらの情報が CSP から容易にアクセスできるようになって いることが望ましい。一方、PKCS #11 ではデータオブジェクトに対するアクセスが 容易であることが重要である。 容易かつ高速にアクセスするためには、極力不要なデータにアクセスすることなく 目的のデータを取り出したり書き込んだりできなければならない。しかし、両ライブ ラリからのアクセス性だけを考えると、占有するメモリ領域が増大することになって しまうため、IC カード内のファイル構造を設計する際には注意する必要がある。 5.2 キャッシュされた PIN の共有化 CSP や PKCS #11 を使って IC カードにアクセスする場合、マルチアプリケーショ ン環境で動作させることが前提となる。CSP 開発留意点で述べたように、他のアプリ ケーションが IC カードの状態を変化させる可能性があるため、CSP や PKCS #11 で PIN をキャッシュしておき、必要に応じて IC カードに対して Verify コマンドを実行 しなければならない。 利用者の利便性のみを考えれば、IC カードに対して一度 PIN による本人確認が行 われたら、以後 IC カードが引き抜かれるまでは、どのアプリケーションで IC カード を利用しても PIN 入力を要求されないことが望ましい。 しかし、仮に CSP や PKCS #11 をアクセスするような不正なプログラムがインス トールされていたならば、キャッシュされた PIN を使われて、勝手にデジタル署名 が実行されるといったことも起こり得る。このようなことを防止するために、例えば キャッシュされた PIN にアクセス可能なアプリケーションを予め登録しておき、そ れ以外のアプリケーションからのアクセスは排除するなどの仕組みをあわせて実装 する必要があるだろう(図 5-1参照)。 また、このような構成とすると、一部 CSP と PKCS #11 で共通のモジュールを使 用することになるため、例えばコマンド伝送ロジックなど共通で利用可能な機能をこ のレイヤで実装すれば開発工数を短縮できるといったメリットがある。 27 図 5-1 PIN キャッシュ共有と不正プログラム排除 また、PIN をキャッシュする単位はアプリケーション毎にという考え方もある。こ れは IC カードを利用するアプリケーションに対して、最初の1回だけは PIN を入力 するというものである。この場合、ユーザは利用するアプリケーション毎に PIN を 入力する必要があるが、不正なアプリケーションが勝手にキャッシュされた PIN を 使用することはできなくなる。また、利用可能なアプリケーションなどを予め登録し ておく必要もない。この場合、PIN を CSP に送ってきたアプリケーション(つまり ユーザが PIN を入力したアプリケーション)の情報を PIN のキャッシュとともに記 憶しておけばいいだろう。 図 5-2 アプリケーション毎に PIN キャッシュ いずれの場合においても、キャッシュする PIN は平文のままメモリに展開してお くと、メモリダンプを行う不正プログラムによって容易に盗聴されてしまう可能性が 28 ある。PIN は暗号化して保管し、使用後はクリアするなどの対策が必要である。 5.3 データの差異の吸収 CSP 固有の概念として「コンテナ」と「鍵のスペック」がある。コンテナはプライ ベート鍵と証明書を格納するための論理的な器であり、鍵のスペックはその鍵の用途 に応じてつけられるフラグである。鍵のスペックには鍵交換用とデジタル署名用の 2 種類が用意されている。 コンテナ名は PKCS #11 を使ったアプリケーションからは指定されることはない ので、CSP を実装する上では指定されない場合の発生方法に注意する必要がある。鍵 のスペックも同様に、指定されないため CSP 自身で鍵交換用/デジタル署名用のい ずれかを決定する必要がある。 コンテナ名は基本的にはユニークであれば問題ないため、UUID などを生成して設 定しておけばいいだろう。鍵のスペックについては、証明書の Key Usage をチェッ クすることで、証明書の用途を判断するといったことも可能である。 5.4 属性証明書の扱い PKCS #11 には属性証明書として利用するための識別子が予め用意されている。よ って独自拡張することなく、属性証明書に対応した PKCS #11 を開発することが可能 となる。一方、CSP は暗号鍵と公開鍵証明書を扱うことに特化したライブラリであり、 属性証明書を扱うための仕組みは提供されていない。CSP では未定義のデータや汎用 データを扱うことや上記に挙げた固有の概念があるため、属性証明書に対応させるこ とは難しい。 29 6 PKCS #15 3∼5章では、IC カードと PKI アプリケーション間の互換を担うミドルウェアにつ いて説明した。本章では、IC カード内のファイル構造に関する標準化について、PKCS #15 を説明する。 6.1 PKCS #15 の背景・目的 PKCS #15 は「Cryptographic Token Information Format Standard」(トークン 情報のフォーマットの標準)といわれており、IC カード内のファイル構造の標準フ ォーマットを規定する。策定背景について以下に記す。 本人認証に利用されるデバイスとして IC カードが代表に挙げられ、カードベンダ ーは開発を進めている。しかし認証機能の向上に注力が注がれたため、互換性の面で 懸念事項が挙がっている。まず 1 点目として、証明書(credential)を格納するため の共通フォーマットの標準化がされていない。そのため、ベンダー独自の仕様で開発 を進める必要がある。2 点目として、証明書(credential)を多数のアプリケーショ ンに適用するメカニズム(共有化のメカニズム)がまだ固定されていない。そのため、 証明書を利用できるサービスが限定され、利用者にとっては不便な場合がある。 これらの懸念事項を背景に、証明書利用の観点から、ベンダーとエンドユーザ双方 の利益を考慮した上で、PKCS #15 では以下の項目を目標に挙げ、 「トークン上のセ キュリティ情報格納先のファイル/ディレクトリの標準フォーマット」を規定する。 1. 様々なプラットフォームで動作すること 2. 多くのベンダーが作成したアプリケーションで利用できること 3. 環境に応じてアプリケーションを作成し直さなくても良いこと 4. 関連する標準規格などに応じて整合性が取れるように整備できること 現在の最新バージョンは 1.1 である。そしてこのバージョンの PKCS #15 を元に国 際規格の ISO/IEC 7816-15「Cryptographic information application」が現在作成中 である。 本章では、バージョン 1.1 に基づき記述していく。 6.2 PKCS #15 の考え方 PKCS #15 の考え方を記すにあたり、IC カード内のファイル構造について簡単に 述べる。IC カード内では、IC カード内のファイルと、鍵や証明書といった概念との 関連付けが行われる。そこで PKCS #15 では、IC カード内のデータを「オブジェク ト」として、実際のファイルと関連付けている。具体的には、ASN.1 でファイル/デ ィレクトリを記述することを提案する。 30 また、様々なメディアに対応できるよう動的なファイル構造にする等の特徴のため、 PKCS #15 では「Directory File」を宣言する。「Directory File」とは、カード内の オブジェクトと実際のフォーマット(ファイルやディレクトリ)をつなぐレイヤであ る。「Directory File」も ASN.1 で記述される。 以下、オブジェクトとファイル構造のモデルの説明を行う。 6.2.1 オブジェクトについて (1) オブジェクトのクラス 一般的な 4 種類のクラス:鍵オブジェクト、証明書オブジェクト、認証用オブジ ェクト、データオブジェクトを定義する。そして、4 つのクラスはそれぞれサブク ラスを持つ。そのサブクラスの実体が、カード内のファイルに相当する。 (2) 属性のタイプ 全てのオブジェクトは多くの属性を持つまた、親のクラスから属性タイプを継承 する。 (3) アクセスの管理 オブジェクトの属性として、プライベートかパブリックを指定する。IC カード の場合、プライベートオブジェクトへのアクセス制限(読み書きなどの制限)は、 認証用オブジェクトによって判断される。認証用オブジェクトの具体例としては、 PIN やバイオメトリクスのユーザ情報が挙げられる。 31 6.2.2 ファイル構造のモデル 一般的なファイル構造として、MF と呼ばれる最上位のディレクトリが存在する。 PKCS #15 では、MF 下に「PKCS #15 Application Directory」と呼ばれる、 Directory File を格納するディレクトリを規定する(図 6-1、図 6-2を参照) 。 また、「EF(DIR)」と呼ばれる、アプリケーション情報を保持するファイルもオ プションとして規定できる。 図 6-1 カードのファイル構造 また前述したように、PKCS #15 Application Directory 下に Directory File を格 納する。 32 図 6-2 PKCS #15 Application Directory 33 6.3 PKCS #15 の機能 6.3.1 オブジェクトの管理について オブジェクトの追加や削除が実行された場合、Directory File にも影響が及ぶため、 留意が必要である。 また、オブジェクト追加・削除が可能か否か、PIN 認証が必要な場合に正しく実施 されているかなども留意が必要である。 6.3.2 オブジェクトの追加 オブジェクトが追加される場合の一例を図 6-3、図 6-4に示す。 1. 適切な EF(Unused Space)ファイルを探す。 図 6-3の証明書ファイルを格納するエリア「Elementary files」を指し示す EF(Unused Space)ファイル「Free space #1」である。 2. 探した EF(Unused Space)ファイルが指し示す場所に、追加するオブジェクト を書き込む。 図 6-3の「Free space #1」が指し示す「Empty area」に書き込む。 図 6-3 オブジェクト追加の例:STEP1 3. EF(Unused Space)ファイルの内容(ポインタ)を更新し、また該当する Directory File に、追加したオブジェクトのポインタを追加する。 34 図 6-4の「Free space #1」の指し示す場所を更新し、また「EF(CDF)」に「Cert2」 へのポインタを追加する。 図 6-4 オブジェクト追加の例:STEP2 35 6.3.3 オブジェクトの削除 オブジェクトが削除された場合は、Directory File 自体は削除されずに、更新され るだけである。つまり、’00’の値に置き換わるか、もしくは Directory File の全体を 更新することで実現する。図 6-5、図 6-6に例を示す。 図 6-5のようなファイル構成の時に、「Cert 2」が削除された場合、以下の操作が 必要である。また以下の操作は、更新のコマンドで実現できる。 1. 「Cert 2」を指し示す「Cert 2 Info」の値を’00’にする。 2. 「Cert 2」を指し示した場所を空のエリアと見なすため、そのエリアを指す 「EF(Unused Space)」を追加する。 図 6-5 オブジェクト削除の例:削除前 図 6-6 オブジェクト削除の例:削除後 36 7 GSC-IS (Government SmartCard Interoperability Specification) 7.1 成立した背景 IC カードとコンピュータを利用した一般的なシステムは、ISO/IEC7816-4、 ISO/IEC7816-8 で規定されているような APDU を用いて通信を行っている。クライ アントアプリケーションは低レベルなソフトウエアドライバを通して通信を行う。 IC カードはさまざまな APDU をもっており、そのクライアントアプリケーション は、利用する IC カードに特化した実装となることが多い。 それゆえクライアントアプリケーションがサポートしない IC カードでは、動作が 不定となったり、動作しなくなる。また、IC カードを利用したクライアントアプリ ケーションを実装するには、IC カード技術やカードがサポートする複雑な APDU を 熟知しなければならないと認識されている。 このような背景をもとに、IC カードを用いたシステムの相互互換のソリューショ ンとして、GSA(General Services Administration)、NIST(National Institute of Standards and Technology)によって、GSC-IS が策定されている。 本章では、2003 年 7 月に策定されたバージョン 2.1 に基づき記述していく。 7.2 GSC-IS の構成 GSC-IS はサービスコールレベルとカードコマンドレベルの 2 つのレベルで、互換 性を提供している。 1. ServiceCallLevel: このレベルはカードの持つ機能(暗号、認証、デジタル署名)を抽象化し、 BSI(BasicServicesInterface)とよばれる API を定義している。 クライアントアプリケーションに対してサービスを提供する下位のレイヤは、 まとめて SPM(ServiceProviderModule)と呼んでいる。 これらのサービスはユーティリティ、セキュアデータストレージ、暗号サー ビスの3つに論理的に分けられる。 SPM は IC カードと R/W のハードウェアとカードと通信するためのソフト ウ ェ ア で 成 り 立 つ 。 特 に SPM の ソ フ ト ウ ェ ア に あ た る 部 分 を SPS(ServiceProviderSoftware)と呼んでいる。 37 2. CardCommandLevel: このレベルは、カードへ送る APDU を定義している。GSC-IS ではこのレベ ルの互換性を保つために、VCEI (VirtualCardEdgeInterface)を定義してい る。 これはカードとは独立したスタンダードな APDU からなる。 図 7-1 IS アーキテクチャモデル BSI と VCEI によって提供される互換性を保つためには、GSC-IS では特定のデー タセットをカードに格納することになる。これらを DM(DataModel)と呼ぶ。 データセットはコンテナとよぶストレージに格納する。 GSC-IS ではコンテナ単位でデータを管理する。それらコンテナのうちの一つは、 カード情報を識別する CCC(CardCapabilityContainer)を格納するコンテナを存在さ せている。 この CCC を用いて、IC カード上の実装されているネイティブな APDU と GSC-IS で VCEI を定義するスタンダードな APDU の差異を吸収している。 CCC を格納することで GSC-IS 準拠の IC カードとなる。GSC-IS では、このよう 38 に BSI と VCEI により統一的なカードデータへのアクセスを実現している。 図 7-2に GSC-IS の動作の概要を示す。 図 7-2 GSC-IS の動作 このように、CCC 内部にあるネイティブ APDU セットと GSC−IS のスタンダー ド APDU セットを変換することで各ベンダーの IC カード間の互換性を保つようにな っている。さらに API や IC カードの機能の利用に対し、認証を設けることも可能で あるよう仕様が策定されている。認証については7.3 節で述べる。 なお、GSC-IS での仕様の範囲外として IC カードの初期化方法や、鍵管理、IC カ ードと R/W の間の通信、R/W とホストコンピュータの通信としている。 39 7.3 Access Control IC カードと SPM によって提供されるコンテナは ACR(Access Control Rules)の影 響をうける。GSC-IS 準拠の IC カードが初期化されるとき、ACR を各々のカードサ ービスとデフォルトコンテナに対して定義する。カードレベルのサービスプロバイダ ーはこれらの ACR を強制する責任があり、クライアントアプリケーションがアクセ スコントロール要求を満足するまではサービスを提供してはならない。GSC-IS はク ライアントアプリケーションに特定のサービスプロバイダーかコンテナに対する ACR を定義することを許可している。 PIN やその他の暗号を用いてクライアントアプリケーションと IC カード間の認証 データのシーケンスを SPS が処理する。セキュリティコンテキスト確立の際に、最 初に SPS がやるべきは、BSI のレベルでの認証の構造と VCEI レベルの APDU の置 換となる。 表 7-1に BSI で利用できる ACR の定義を記載する。 表 7-1 Access Control Rules 定義 ルール Always Never ExternalAuthenticate 制約事項なし 提供しない APDU の GET CHALLENGE と EXTERNAL AUTHENTICATE の確立が必要 PIN Protected カレントセッション中の PIN による認証 PIN Always PIN を常に要求する ExternalAuthenticate or PIN ExternalAuthenticate か PIN のどちらか一方利 用する ExternalAuthenticate then PIN PIN 認証後、ExternalAuthenticate を利用する ExternalAuthenticate and PIN PIN と ExternalAuthenticate の両方を利用する 順序は問わない PIN then ExternalAuthenticate ExternalAuthenticate の次に PIN 認証を行う Secure Channel(Global Platform) Global Platform 仕様の Secure Channel 利用 UpdateOnce オブジェクトの更新時のみ Secure Channel(ISO) ISO 仕様の SecureChannel 利用 これらのルールで、BSI で実装される API で利用することとなる。例えば、一般 的に利用されている PIN による CHV(CardHolderVerification:IC カード所有者認 証)の場合、クライアントアプリケーションは次の順序で IC カードとの通信にてセ 40 キュリティコンテキストを確立する。 1. gscBsiUtilConnect()を使って、論理的にカードとの接続を確立する。 2. gscBsiGcGetContainerProperties(), gscBsiGetCryptoProperties()のいずれか を使ってカードから ACR を受け取る。 3. gscBsiUtilAcquireContext()を使って確立する。その際、BSIAuthenticator 構 造体にスマートカードサービスの ACR に基づいた設定を行う。PIN の場合、 authValue に PIN 値を、accessMethodType に PIN 認証をセットする。 4. 実際の処理をおこなう。 5. gscBsiUtilReleaseContext()で解放する。 このように IC カードに設定されている ACR を読み出して接続を確立する。その 際、別の認証方法であれば、ルールを拡張する。例えば、バイオメトリクス認証が必 要であるなら、そのようなルールを定義することになる。ACR の認証方法の中には、 PIN による認証以外にも IC カードで一般的に行なわれている ExternalAuthenticate を用いた手法や、IC カードが Global Platform 準拠である場合に、Global Platform の SecureMessaging を使って、セキュアに接続する方法も規定されている。 7.4 BasicServiesInterface SPM は BSI を提供することとなっており、クライアントアプリケーションはこの インターフェイスを介して SPM と通信を行う。BSI は以下の 23 個の API でなりた ち、3つのカテゴリに分けられている。 表 7-2 BSI Application Interface API SmartCard Utility Provider Module gscBsiUtilAcquireContext() 説明 IC カード上のターゲットコンテナ とセッションを確立するその際、コ ンテナの ACR に従った認証を行う 必要がある R/W に挿入済みの IC カードとの接 続を確立する IC カードとの接続を終了する IC カードとの排他的なトランザク ションを開始する IC カードとの排他的なトランザク ションを終了する BSI のバージョンを返す CardCapabilityContainerID と IC カードの情報を取得する gscBsiUtilConnect() gscBsiUtilDisConnect() gscBsiUtilBeginTransaction() gscBsiUtilEndTransaction() gscBsiUtilGetVersion() gscBsiUtilGetCardProperties() 41 API gscBsiUtilGetCardStatus() gscBsiUtilGetExtendedErrorText() gscBsiUtilGetReaderList() gscBsiUtilPassthru() gscBsiUtilReleaseContext() 説明 接続中のカードの状態を返す 他の API のエラーの詳細を取得する 利用できる R/W を取得する 生の APDU を送信する ターゲットコンテナとのセッション を終了する SmartCard Generic Container Provider Module gscBsiGcDataCreate() 選択中のコンテナに新しいアイテム を生成する gscBsiGcDataDelete() あるコンテナのアイテムを削除する gscBsiGcGetContainerProperties() あるコンテナのプロパティを取得す る gscBsiGcReadTagList() 選択したコンテナのタグリストを取 得する gscBsiGcReadValue() あるタグの Value を取得する gscBsiGcUpdateValue() あるタグの Value を更新する SmartCard Cryptographic Provider Module gscBsiGetChallenge() IC カードが生成する乱数を取得す る gscBsiSkiInternalAuthenticate() challenge に基づいて、共通鍵暗号を 演算する gscBsiPkiCompute() ある AID に紐づくプライベート鍵を 用いた演算 gscBsiPkiGetCertificate() 証明書の読取 gscBsiGetCryptoProperties() PKI プロバイダーモジュールから ACR の受取 表 7-2の API はすべて実装することが GSC-IS では必須となっている。これ以外に API の拡張を認めており、それらは XSI(Extended Service Interface)と呼ばれている。 様々なベンダーが実装した様々な XSI は無論互換性はない。拡張した API の例とし て、バイオメトリクス認証を用いた API が検討されている。 42 7.5 Virtual Card Edge Interface VCEI は 2 つの APDU コマンドのセットを持っている。一つはファイルシステム カード用の ISO/IEC7816-4、ISO/IEC7816-8 準拠の GSC-IS セットで、もう一つは VM カード用の VM APDU である。また VCEI は GSC-IS 準拠カードに格納されて いる CCC と、GSC-IS APDU のマッピングを行う。 GSC-IS のスタンダード APDU は GSC-IS 準拠カード(GSC-IS 準拠ファイルシス テムカードと VM カード)であるなら直接に実装される。いくつかのファイルシステ ムカードは GSC-IS のスタンダード APDU とは異なるベンダー独自の APDU である だろう。この場合、SPS がカードベンダー独自の APDU に合致するように APDU を 修正しなければならない。これを VCEI 内部で APDU をマッピングすることで解決 する。 APDU マッピングは、CCC に格納されているネイティブ APDU の記述を利 用して行う。 GSC-IS のファイルシステムカード用の APDU は、表 7-3の通りとなる。この APDU は セ キ ュ ア メ ッ セ ー ジ を サ ポ ー ト し て い な い 。 セ キ ュ ア メ ッ セ ー ジ は gscBsiUtilPassthru()にて利用することができる。そのときのセキュアメッセージは Global Platform か ISO 準拠となるだろう。 表 7-3 ファイルシステム用 APDU コマンド Generic File Access APDUs GET RESPONSE READ BINARY SELECT DF SELECT EF UNDER SELECT DF SELECT FILE SELECT MASTER FILE(Root) UPDATE BINARY Access Control APDUs EXTERNAL AUTHENTICATE GET CHALLENGE INTERNAL AUTHENTICATE VERIFY 説明 直前に実行した APDU の結果の取得 選択済みの透過型ファイルの読取 選択中の DF の子 DF の選択 選択中の DF 内の EF の選択 ファイルの選択 ディレクトリ構造のルートか、MF ファイ ルの選択 選択済みの透過型ファイルの更新 GET CHALLENGE と組み合わせて使う クライアントアプリケーションをカード 内で認証する EXTERNAL AUTHENTICATE と組み 合わせて使う challenge を生成する クライアントアプリケーションがスマー トカードを認証する 認証データを比較する 43 Public Key Operations APDUs MANAGE SECURITY ENVIROMENT PERFORM SECURITY OPERATION セキュリティ環境の管理(設定) セキュリティ命令の実行 VM カードの場合、表 7-3の APDU ではなく表 7-4の APDU を実装することにな る。 表 7-4 VM カード APDU コマンド 説明 Common Intercase Methods VM APDUs SELECT APPLET AID をつかってアプレットを選択する SELECT OBJECT アプレットの管理するオブジェクトを選 択する GET PROPERTIES 選択済みのアプレットからプロパティの 取得 GET ACR ACR の取得 GET RESPONSE 直前に実行した APDU の結果の取得 VERIFY PIN globalPIN で認証する globalPIN は root レベルの鍵である Generic Container Provider VM APDUs READ BUFFER バッファを更新する UPDATE BUFFER バッファを読み取る Symmetric Key Provider VM APDUs GET CHALLENGE EXTERNAL AUTHENTICATE と組み 合わせて使う challenge を生成する EXTERNAL AUTHENTICATE GET CHALLENGE と組み合わせて使う クライアントアプリケーションをカード 内で認証する INTERNAL AUTHENTICATE challenge-response 認証を行う Public Key Procider VM APDUs PRIVATE SIGN/DECRYPT RSA 署名もしくはデータ暗号化を行う 44 7.6 Card Capabilities Container IC カードの APDU の差異を吸収するために、CCC は GSC-IS 準拠カードであれば 必ず存在しなければならないものとしている。CCC は IC カードで実装されたネイテ ィブ APDU と GSC-IS のスタンダード APDU との構文の違いを吸収できるようにな っており、これにより、BSI と IC カードの APDU の互換性を保つ。 CCC は国際的な AID を付番しておく。 VM カード上の CCC アプレットの CCC はデフォルトコンテナとなるよう規定され ており、ファイルシステムカードの場合は、バイナリーファイルとして CCC を実装 する。MF 直下の特定の FID をもった EF として配置する。 図 7-3 CCCEF 配置場所 CCC の探索手順についても、GSC-IS にて規定されている。ATR 直後に、VM カ ード向けの CCC 取得方法を試みて、失敗するとファイルシステムの CCC 取得方法 を試みる。CCC が取得できない場合、コンテナがないか、GSC-IS 準拠カードでない と判断する。 ファイルシステムカードでは Card Capability Container は EF でなければならな い。ファイルはエンコードなしの SIMPLE-TLV データオブジェクトで構成され、構 造化シンプル TLV を使用する例外(Application CardURL と Access Control Rule Table フィールド)がある。 45 VM カードの場合、Card Capability Container は CCC アプレットによって管理さ れるデフォルトコンテナ(バッファ)になっていなければならない。 表 7-5 CCC フィールド DataElement Card Identifier Capability Container version number Capability Grammar version number Applications CardURL PKCS #15 Registered Data Model number AccessControlRuleTable CARD APDUs Redirection Tag Capability Tuples(CTs) StatusTuples(STs) Next CCC Option Issuer Defined Objects Error Detection Code 46 7.7 DataModel コンテナのデータ要素は SIMPLE-TLV 形式で格納される。それぞれのデータオブ ジェクトはタグと、レングス(長さ)とバリュー(値)となる。VM カードの場合、 SIMPLE-TLV 形式は、T-Buffer と V-Buffer に分かれる。 図 7-4 T-Buffer、V-Buffer ファイルシステムカードの場合、単一のファイルで構成されたコンテナ内に SIMPLE-TLV で格納する。ただし先頭の TLV は表()に示すような構造で格納するこ とになっている。 表 7-6 firstTLV(ファイルシステムカード) firstTLV 0 Tag(0xEE) 1 Length(0x02) 2 LSB(コンテナサイズの 1 桁目) 3 MSB(コンテナサイズの 2 桁目) 4 次タグ 47 8 まとめ 本報告書では、ハードウェアトークン、特に IC カードと、IC カードを利用した標 準的な API である CryptoAPI および PKCS #11 について解説した。そして米国で標 準化の検討がなされている GSC-IS の概要について触れた。また、ハードウェアトー クン内で用いることもできるファイル構造の PKCS #15 について解説した。 各々の仕様には長所・短所があるが、それは利用されるシステムでの利便性を考え、 それぞれの仕様を実装したライブラリが選択されることになるだろう。PKCS #11 の 場合、IC カードというよりハードウェアトークン全般を包含することを狙った仕様 であり、CryptoAPI は、Windows 系 OS 上でいかに便利に利用できるかに焦点に当 てられている仕様である。例えば、Internet Explorer を利用すれば、CSP をラップ するようなアプリケーション(ライブラリ)なしに CSP を直接呼び出せるというメリ ットがある。対象 OS が限定されるならば、ラップするアプリケーションの開発は必 要ないため、CSP を IC カード用 API として導入したときのコストメリットが考えら れる。PKCS #11 の場合、既存システムがこの仕様で構築されているケースがままあ り、システム開発時の敷居が低い、という開発メリットが考えられる。証明書のハン ドリングだけでないなら、個別データ全般を扱える仕様になっている PKCS #11 ライ ブラリ用いたほうがよいと考えられる。電子政府等で広く利用されるのであれば、プ ラットフォームが限定されてしまうよりも、広範囲に仕様化されている PKCS #11 の ほうが得策であるかもしれない。 多くの場合、CSP および PKCS #11 ライブラリは、特定の IC カードおよびファイ ル構造にそったものでしか扱えず、IC カード間での互換性が図れていない。そのた め、このベンダーの IC カードを利用するなら、このライブラリ、逆にこのライブラ リならこの IC カードというような、紐付けがなされているのが現状である。 GSC-IS の場合、そのような現状にある各々のレイヤの互換性をすすめるために、 IC カードをあつかうミドルウエアおよび、IC カードまで踏み込んだ仕様化がなされ ている。レイヤの互換性の向上により、ミドルウエア開発ベンダーはビジネスチャン スを広げるために、工夫が必要となっていく。ミドルウエア開発ベンダーは GSC-IS で拡張が認められている拡張 API で特色を出すことや、GSC-IS の互換性認定だけで なく外部セキュリティ評価機関での認定を受けることで、差異を出すことになるだろ う。 GSC-IS や今回あげた他のセキュリティ API では、IC カードの初期化の方法は規 定していない。しかし GSC-IS や他のミドルウエアに関わらず、IC カードのような ハードウェアトークンを利用する上では初期化、いわゆるパーソナライズを事前に検 討しておくべきである。例えば、プライベート鍵を格納するならば、セキュアな環境 で格納することがあげられる。個人情報の書き込みは IC カードに書き込む時点のみ だけでなく、デリバリーまで含めたフローを検討しておく。そうすることで IC カー 48 ドを利用するシステム全体のセキュリティ性がさらに向上するだろう。 すでに、電子政府として各団体のシステム構築が進んでおり、運用も開始されてい る。IC カードやシステム構成のなかでサーバーやユーザインタフェイスは比較的着 目されがちであるが、さらに電子政府化を進めていくためには、各団体は今回あげた ようなセキュリティ API の利用や標準化の策定および互換性の向上などを促進して いくべきであるだろう。 49 9 参考文献 [PKCS #11] [PKCS #15] [PC/SC] [COOKBOOK] [GSC-IS] [ISO/IEC7816] [MSDN] [GP] PKCS #11 v2.11: Cryptographic Token Interface Standard, http://www.rsasecurity.com/rsalabs/pkcs/pkcs-11/index.html PKCS #15 v1.1 : Cryptographic Token Information Syntax Standard, http://www.rsasecurity.com/rsalabs/pkcs/pkcs-15/ PC/SC Workgroup Specification1.0 (Interoperability Specification for ICCs and Personal Computer Systems), http://www.pcscworkgroup.com/ The Smart Card Cryptographic Service Provider Cookbook, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnscard/ht ml/smartcardcspcook.asp Government Smart Card Interoperability Specification Version 2.1, http://csrc.nist.gov/publications/nistir/ ISO/IEC7816 Information technology – Identification cards – Integrated circuit(s) cards with contacts – http://msdn.microsoft.com Global Platform, http:// www.globalplatform.org 50 10 用語(参考) AID Application Identifier:IC カード内のアプリケーションを識別する識別子。 APDU Application Protocol Data Unit: IC カードと機器間でやりとりされるメッ セージの構造。 ATR Answer To Reset:接続装置から受けるリセットに対して IC カードが行う初 期応答。ISO/IEC7816 で規定されている。 Co-Processor 暗号などの処理を高速に行うための処理装置。 DF Dedicated File(専用ファイル):アプリケーションやサービス毎に EF をま とめるフォルダ。 Diffie-Hellman プライベート鍵を安全に送受信するための鍵交換の方法。 DPA Differential Power Analysis(電力差分解析) :演算時の消費電力変化に着目 して、鍵等の秘密情報を解析する方法。 EEPROM Electrically Erasable Programmable Read-Only Memory:書き換え可能な 不揮発性メモリ。 EF Elementary File(基礎ファイル):さまざまなデータを格納するファイル。 GSA General Services Administration:米国連邦総務庁。 MF Master File(主ファイル):IC カード内のファイル構造の根幹(ルート)ディ レクトリ。 NIST National Institute of Standards and Technology:米国商務省標準技術局。 R/W IC カードリーダー/ライター。 SSL Secure Socket Layer:ネットワーク上で送受信されるデータの暗号化に関す るプロトコル。通常の SSL は、サーバー側の正当性のみを認証するものである 51 が、SSL 相互認証は、サーバーの正当性と、クライアントの正当性をお互いに 認証する仕組み。 S/MIME Secure Multipurpose Internet Mail Extensions:電子メール等を暗号化し、 デジタル署名を添付するインターネット規格。 TLV Tag-Length-Value:タグ、データ長、値の順番で記述される符号化規則。 USIM Universal Subscriber Identity Module:主に携帯電話会社が発行する加入者 情報を格納した小型の IC カード。 VM Virtual Machine:ハードウェアに依存しない仮想プラットフォーム。 52
© Copyright 2024 ExpyDoc