第 |
1 目的
本ガイドラインは、以下の目的により標準的な申請データを設計するための指針を示すものである。
○ |
汎用受付等システムの開発における申請データの設計を支援する。 |
○ |
申請データの設計において、使用するタグ等共通的に定めることが望ましい事項について整理し、申請者側の利便性の確保、行政機関側における横断的な業務処理や管理の促進、行政機関間のデータ交換の効率化等を図る。
|
|
第 |
2 用語の定義
(1)用語の関係
本ガイドラインで使用する用語の関係は次のとおりである。
|
|
図1 用語の関係 |
|
|
(2)用語の説明
1) 申請データ | : |
申請手続を電子的に行う上で申請者と行政機関間、共管申請の場合には関係行政機関間で受け渡しする情報のすべてであって、2) 〜5) の情報を含む。 |
2) 構成管理情報 | : |
申請データに含まれる各要素を取りまとめるための管理情報等。 |
3) 申請書 | : |
各手続に定められた申請書様式に申請情報が入力されたもの。 |
4) 添付書類 | : |
各手続に定められた個別の添付書類。 |
5) 署名情報 | : |
申請者が署名した署名値や申請者証明書等の署名関連情報。 |
6) 申請書様式 | : |
各手続に定められた申請書の様式。 |
7) 申請情報 | : |
申請者により申請書様式に入力された情報。 |
|
第 |
3 申請データの構成要素
申請データの各要素の構成等、申請データ設計の際の基本的な事項は、以下のとおりである。
|
1 |
構成管理情報(XML形式)
(1 |
) 構成管理情報の要素
構成管理情報においては、以下に示す要素を基本的に含むものとする。
ただし、項目によっては行政機関側のデータベース等において管理することも可能とする。
・ |
手続を特定する情報(手続ID、手続名称等) |
・ |
申請書属性情報(申請書・申請書様式を特定する情報:申請書様式ID、申請書様式名称、申請書ファイル名称等) |
・ |
添付書類属性情報(添付書類を特定する情報:添付書類名称、添付書類ファイル名称等) |
・ |
申請者/連絡先に関する情報
- 氏名、フリガナ
- 役職
- 所属する法人団体名
- 郵便番号
- 住所、フリガナ
- 電話番号
- FAX番号
- 電子メールアドレス |
※ |
申請データに申請者の電子署名が付されている場合には、署名情報(電子署名に関する署名値等)を構成管理情報の一要素として含めることも可。
|
|
(2 |
) 構成管理情報の構成
構成管理情報は、各行政機関の取扱う手続の特性等に応じて申請者の利便性に配慮した最適な構成とする。
具体的には、以下の構成が考えられる。
(構成管理情報の構成の例)
1) 独立したXMLファイルとして構成する。
2) 申請書(XML形式)の一要素として構成管理情報を含める。
|
|
2 |
申請書(原則XML形式)
(1 |
) 申請書の要素
申請書の要素は各手続における根拠法令等により定められるが、基本的な要素として多くの申請書に共通する次の要素がある。
・年月日
・申請者等の情報
・手続を特定する情報(根拠条文等)
・申請書様式を特定する情報(様式番号等)
・文書名(「○○許可申請書」等)
・あて先(「○○大臣殿」等)
|
(2 |
) 申請書の構成
申請書の具体的な構成については、各手続を所管する行政機関において取り決めることとする。なお、申請書の構造等を定義するスキーマ(DTD、XMLスキーマ等)を含む構成とするかについては任意とする。
|
|
3 |
添付書類
|
各手続において必要となる添付書類のデータ形式については、申請者が一般的に利用可能なアプリケーションで作成できるものとして各手続ごとに定め、公表することとする。
|
|
4 |
署名情報
|
申請データに申請者の電子署名を付与する場合には、申請者証明書を添付する。
(署名方式の例) |
1) |
XML署名
2002年2月12日にW3CによってXML-Signature Syntax and Processingとして勧告されたもの。XML署名処理の方式及び文法を規定するもので、署名対象となるデータ形式を選ばず、XMLに対する署名格納位置の指定が可能。 |
2) |
PKCS#7
1998年3月にIETFによってRFC2315として標準情報に定められたもの。暗号化等のPKI利用方法を規定した"Public-Key Cryptography Standards"の一つであり、電子署名形式や暗号化形式等を規定し、署名対象となるデータ形式を選ばない。
|
|
|
5 |
共通的に利用可能な項目の構造、フォーマット
|
第 |
4 共管手続における申請データの取扱い
共管手続については、関係する機関において申請データが円滑に取り扱えるようにするため、申請データに含まれる構成管理情報等に関して統一的な仕様を定める。
|
1 |
申請データの構成
|
共管手続における申請データについては、各手続に定められた申請書や添付書類、各申請書を表示するためのスタイルシート及び各文書を取りまとめるための情報等を管理する構成管理情報により構成する。
|
|
|
図2 共管手続における申請データの構成 |
(1) |
構成管理情報
ア |
構成管理情報は申請データに1個含むものとする。また、構造等を定義するスキーマ(DTD、XMLスキーマ等)については付与しない。
|
イ |
構成管理情報については、行政機関間におけるデータ交換を円滑に行うため、データ形式には整形式で記述したXMLを採用し、共管手続における構成管理情報の構造等を定義するスキーマへの参照情報は記述しない。
|
ウ |
構成管理情報のデータ項目は、大別して管理情報、申請書属性情報、添付書類属性情報の3情報を記述するものとする。
なお、各項目の詳細について「共管手続における構成管理情報のデータ項目」(資料2)(PDF)に示す。
・管理情報(手続を特定する情報等)
・申請書属性情報(申請書の参照情報等)
・添付書類属性情報(添付書類の参照情報等)
|
エ |
構成管理情報のデータ項目における具体的なXMLタグ名、フォーマットについては、「共管手続における構成管理情報の実装規約(XMLタグ名、フォーマット等)」(資料3)(PDF)に示す。
|
|
(2) |
申請書
ア |
申請書は、申請データに1個以上含むものとする。また、申請書の構造等を定義するスキーマ(DTD、XMLスキーマ等)については原則として付与しない。
|
イ |
共管手続における申請書のデータ形式については整形式で記述したXMLを採用する。
|
|
(3) |
スタイルシート
ア |
申請書を一般的なWebブラウザで表示するためのデータ交換に必要なファイルであり、申請データに含まれる各申請書に対して付与するものとする。
|
イ |
スタイルシートの形式については、W3Cにて勧告済みのXSLTを採用する。
|
|
(4) |
添付書類
ア |
添付書類は申請データに0個以上含むものとする。
|
イ |
添付書類のデータ形式については、各手続に応じて要件が異なるため、各行政機関間の取り決めによるデータ形式とする。
|
|
|
2 |
文字表記方式
|
共管手続における申請データに含まれる各文書においてXMLデータ形式を用いるものについては、使用する文字コードをUTF−8とする。
|
|
第1 |
目的 |
|
本仕様は、汎用受付等システムが、カード・ドライバ・ライブラリとのインタフェースとしてPKCS#11を選択した場合の詳細なインタフェースを規定する。(「図1 本仕様の範囲」参照。)。
|
第2 |
用語の定義 |
|
1) |
申請者 |
: |
行政機関に対して申請・届出等を行う者(当該申請・届出等の責任者、提出者等の総称)。 |
2) |
申請者端末 |
: |
申請者がインターネットを介して、汎用受付等システムを利用できる端末。 |
3) |
申請書様式 |
: |
申請・届出等を行う場合に提出する申請書、届出書等の様式。 |
4) |
申請データ |
: |
電子的に作成された申請書及び添付書類。 |
5) |
申請者電子署名 |
: |
申請者の保有している秘密鍵を用いて申請データへ付与された電子署名。 |
6) |
認証局(CA) |
: |
申請者の登録、公開鍵証明書の発行、失効、鍵管理を行う機関。 |
7) |
申請者証明書 |
: |
申請者の電子署名を作成した申請者秘密鍵と対になる公開鍵について、申請書に記載された者がその公開鍵を保有することを証明する電子的な証明書。 |
8) |
自己署名証明書 |
: |
自認証局の公開鍵に対して、自認証局の秘密鍵で署名した公開鍵証明書。自認証局の公開鍵の正当性を保証する。 |
9) |
下位CA証明書 |
: |
階層型の認証局構成において下位に位置する認証局証明書 |
10) |
PIN |
: |
Personal Identification Numberの略。ICカードを利用するためのパスフレーズ。 |
11) |
単一署名 |
: |
一人の申請者が、1つの申請データに対して1回署名する。 |
12) |
一括署名 |
: |
一人の申請者が、複数の申請データに対して1回で署名する。 |
13) |
連続署名 |
: |
一人の申請者が、1つの鍵を利用して複数の申請データに対して1回ずつ署名する。 |
14) |
複数署名 |
: |
複数の申請者が、同一の申請データに対して署名する。 |
15) |
証明書表示 |
: |
ICカードやファイル等、媒体に格納されている証明書の内容を表示する。 |
16) |
署名検証 |
: |
申請データや電子公文書等の署名値および証明書の検証をする。 |
|
第3 |
本仕様の前提条件 |
|
1 |
ICカードの前提条件 |
|
1) |
ICカードに格納されている認証局の自己署名証明書を申請者のトラストアンカーとみなす。 |
2) |
ICカードは複数の証明書が格納できるものとする。 |
3) |
汎用受付等システムは、ICカードの利用に際して申請者端末でPIN入力を要求するものとする。 |
4) |
汎用受付等システムは、ICカードを利用するためICカードごとに対応するカード・ドライバ・ライブラリをロードするものとする。 |
5) |
申請者端末へ接続されているリーダライタが複数台、かつ複数台のリーダライタにICカードが挿入されている場合であっても、使用できるリーダライタ又はICカードは1つと限定する。 |
6) |
1枚のICカードには複数の鍵・証明書ペアを格納可能だが、それらを保護するPINは一つとする。 |
|
2 |
ICカードの利用を想定する処理 |
|
ICカードの利用を想定する処理は、「申請・届出等手続のオンライン化に関わる汎用受付等システムの基本的な仕様」(平成13年8月6日行政情報化推進各省庁連絡会議幹事会了承)の「標準的な処理手順」のうち、以下に示すものとする。
|
1) |
申請データへの署名機能 |
|
2) |
申請者証明書添付機能 |
|
3) |
行政機関側の署名・証明書の検証機能 |
|
3 |
ICカード内の証明書格納パターン |
|
ICカードには申請者証明書(EE)やCAの自己署名証明書(ルートCA証明書)、下位CA証明書が格納されているものとし、ICカードへの基本的な格納パターンを以下に示す。
1) |
申請者証明書
|
2) |
申請者証明書+自己署名証明書
|
3) |
申請者証明書+下位CA証明書+自己署名証明書
|
本仕様におけるICカードへの証明書の格納パターンは、1) 、2) 及び3) のパターン並びに各パターンの組み合わせを前提とする。
|
|
第4 |
PKCS#11利用インタフェース |
|
汎用受付等システムが、カード・ドライバ・ライブラリ(PKCS#11ライブラリ)を経由して、ICカードに格納される申請者の秘密鍵・申請者証明書を利用する操作フローとPKCS#11ライブラリ呼び出し手順を示す。
1 |
単一署名 |
|
(1) |
操作フロー
汎用受付等システムにおいて単一署名を行う場合の操作フローは、以下のとおりとする。 |
|
|
1) |
初期化処理
PKCS#11ライブラリをロードする。 |
|
2) |
署名対象となる申請データを選択
署名対象となる申請データを選択する。申請データを選択後に署名指示を行う、署名指示後に申請データを選択するパターンがある。 |
|
3) |
ICカードを挿入
利用する証明書が格納されているICカードをリーダライタに挿入する。 |
|
4) |
PINを入力
リーダライタに挿入したICカードに対するPINを入力する。ここで入力したPINを利用しアクセス認証を行う。 |
|
5) |
利用する証明書を選択
ICカード内に証明書が複数格納されている場合、ここで利用する証明書を選択する。 |
|
6) |
申請書に署名
選択された証明書を利用して申請データに対して署名を行う。 |
|
7) |
ICカードを取り出す
ICカードをリーダライタから取り出す。 |
|
8) |
終了処理
PKCS#11ライブラリの終了処理を行う。 |
|
|
|
|
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいて単一署名を行う場合のPKCS#11ライブラリ呼び出し手順は、以下のとおりとする。
|
|
凡例 |
− |
はPKCS#11ライブラリ以外の手順 |
− |
はPKCS#11ライブラリの手順 |
− |
はPKCS#11ライブラリの手順で選択肢として扱われるもの |
|
|
―遷移1― |
|
定義ファイルに設定されているPKCS#11ライブラリをロード |
C_GetFunctionList |
関数ポインタリストの取得 |
C_Initialize |
PKCS#11ライブラリの初期化 |
|
―遷移2― |
|
C_GetSlotList |
スロットリスト数の取得
pSlotList:NULL_PTR
tokenPresent:true |
C_GetSlotList |
スロットリストの取得
pSlotList:格納領域アドレス
tokenPresent:true |
C_OpenSession |
セッションの確立
pApplication:NULL_PTR
Notify:NULL_PTR |
|
―遷移3― |
|
C_Login |
トークンへのログイン
userType:CKU_USER |
|
―遷移4― |
|
C_FindObjectsInit |
証明書の検索操作の初期設定
CKA_TOKEN:true
CKA_CLASS:CKO_CERTIFICATE |
C_FindObjects |
証明書の検索
※必要とする証明書数分繰り返す |
C_GetAttributeValue |
証明書サイズの取得
CKA_VALUE:NULL_PTR |
C_GetAttributeValue |
証明書の取得
CKA_VALUE:格納領域アドレス |
C_FindObjectsFinal |
証明書の検索操作の終了処理 |
C_GetAttributeValue |
証明書サイズの取得
CKA_VALUE:NULL_PTR |
C_GetAttributeValue |
証明書の取得
CKA_VALUE:格納領域アドレス |
C_FindObjectsInit |
選択された証明書に対応する秘密鍵の検索操作の初期設定
CKA_TOKEN:true
CKA_CLASS:CKO_PRIVATE_KEY
CKA_MODULUS:modulus(n)
CKA_PUBLIC_EXPONENT:public exponent(e) |
C_FindObjects |
選択された証明書に対応する秘密鍵の検索 |
C_FindObjectsFinal |
秘密鍵の検索操作の終了処理 |
|
―遷移5― |
|
C_SignInit |
署名処理の初期設定
Mechanism.mechanism:
CKM_RSA_PKCS |
C_Sign |
署名値長取得
pData:DigestInfo(ハッシュアルゴリズムはSHA1)
ulDataLen:DigestInfo長(35バイト)
pSignature:NULL_PTR |
C_Sign |
署名
pData:DigestInfo(ハッシュアルゴリズムはSHA1)
ulDataLen:DigestInfo長(35バイト)
pSignature:格納領域アドレス |
|
―遷移6― |
|
C_CloseSessionもしくはC_CloseAllSessions |
セッションの切断 |
|
―遷移7― |
|
C_Finalize |
PKCS#11ライブラリの終了処理 |
|
|
|
(3) |
補足事項 |
|
1) |
呼出し手順
証明書データの取得(C_GetAttributeValue処理)は、証明書の検索操作の終了処理(C_FindObjectsFinal処理)の前後での呼び出しが可能である。 |
2) |
エラー処理
・ |
C_Login処理にて以下のエラーが発生した場合を除き、必要とする終了処理を実施後「遷移2」の処理から再開する。必要とする終了処理とは、C_OpenSession/C_Loginを行っていればC_CloseSession/C_Logout処理を行う事を意味する。 |
・ |
"CKR_PIN_INCORRECT"が返却された場合、C_Loginの処理から再開する。 |
・ |
"CKR_PIN_LOCKED"が返却された場合、「遷移7」を行い業務を終了する。 |
・ |
汎用受付等システムは、次のエラーコードを判別し処理する。 |
|
|
CKR_TOKEN_NOT_RECOGNIZED |
: |
不正なICカード |
|
CKR_TOKEN_NOT_PRESENT |
: |
ICカードが挿入されていない、又は抜かれた。 |
|
CKR_SESSION_HANDLE_INVALID |
: |
ICカードが挿入されていない、又は抜かれた。 |
|
CKR_DEVICE_REMOVED |
: |
処理中にICカードが抜かれた。 |
|
|
|
|
2 |
一括署名 |
|
(1) |
操作フロー
汎用受付等システムにおいて一括署名を行う場合の操作フローは、以下のとおりとする。 |
|
|
1) |
初期化処理
PKCS#11ライブラリをロードする。 |
|
2) |
署名対象となる申請データを選択
署名対象となる申請データを選択する。申請データを選択後に署名指示を行う、署名指示後に申請データを選択するパターンがある。 |
|
3) |
ICカードを挿入
利用する証明書が格納されているICカードをリーダライタに挿入する。 |
|
4) |
PINを入力する
リーダライタに挿入したICカードに対するPINを入力する。ここで入力したPINを利用しアクセス認証を行う。 |
|
5) |
利用する証明書を選択
ICカード内に証明書が複数格納されている場合、ここで利用する証明書を選択する。 |
|
6) |
申請データに署名
選択された証明書を利用して申請データに対して署名を行う。
選択されている申請データ数の署名を行う。 |
|
7) |
ICカードを取り出す。
ICカードをリーダライタから取り外す。 |
|
8) |
終了処理
PKCS#11ライブラリの終了処理を行う。 |
|
|
|
|
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいて一括署名を行う場合のPKCS#11ライブラリ呼び出し手順は、「1 単一署名」の場合と同じである。 |
|
3 |
連続署名 |
|
(1) |
操作フロー
汎用受付等システムにおいて連続署名を行う場合の操作フローは、以下のとおりとする。 |
|
|
1) |
初期化処理
PKCS#11ライブラリをロードする。 |
|
2) |
ICカードを挿入
利用する証明書が格納されているICカードをリーダライタに挿入する。 |
|
3) |
PINを入力
リーダライタに挿入したICカードに対するPINを入力する。ここで入力したPINを利用しアクセス認証を行う。 |
|
4) |
利用する証明書を選択
ICカード内に証明書が複数格納されている場合、ここで利用する証明書を選択する。 |
|
5) |
署名対象となる申請データを選択
署名対象とする申請データを選択する。ここで署名実行等を指示する。 |
|
6) |
申請データに署名
選択されている申請データに対して1回署名を行う。 |
|
7) |
ICカードを取り出す。
ICカードをリーダライタから取り外す。 |
|
8) |
終了処理
PKCS#11ライブラリの終了処理を行う。 |
|
|
|
|
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいて連続署名を行う場合のPKCS#11ライブラリ呼び出し手順は、「1 単一署名」の場合と同じである。 |
|
4 |
複数署名 |
|
(1) |
操作フロー
汎用受付等システムにおいて複数署名を行う場合の操作フローは、「1 単一署名」、「2 一括署名」及び「3 連続署名」を申請者数分繰り返すものとする。 |
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいて複数署名を行う場合のPKCS#11ライブラリ呼び出し手順は、「1 単一署名」、「2 一括署名」及び「3 連続署名」を申請者数分繰り返すものとする。
|
|
5 |
証明書表示 |
|
(1) |
操作フロー
汎用受付等システムにおいてICカードに格納されている証明書を表示する場合の操作フローは、以下のとおりとする。 |
|
|
1) |
初期化処理
PKCS#11ライブラリをロードする。 |
|
2) |
ICカードを挿入
利用する証明書が格納されているICカードをリーダライタに挿入する。 |
|
3) |
PINを入力
リーダライタに挿入したICカードに対するPINを入力する。ここで入力したPINを利用しアクセス認証を行う。 |
|
4) |
利用する証明書を選択
ICカード内に証明書が複数格納されている場合、ここで利用する証明書を選択する。 |
|
5) |
証明書情報取得・表示
選択された証明書の内容を取得し、表示する。 |
|
6) |
ICカードを取り出す。
ICカードをリーダライタから取り外す。 |
|
7) |
終了処理
PKCS#11ライブラリの終了処理を行う。 |
|
|
|
|
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいてICカードに格納されている証明書を表示する場合のPKCS#11ライブラリ呼び出し手順は、以下のとおりとする。
|
|
|
―遷移1― |
|
定義ファイルに設定されているPKCS#11ライブラリをロード |
C_GetFunctionList |
関数ポインタリストの取得 |
C_Initialize |
PKCS#11ライブラリの初期化 |
|
―遷移2― |
|
C_GetSlotList |
スロットリスト数の取得
pSlotList:NULL_PTR
tokenPresent:true |
C_GetSlotList |
スロットリストの取得
pSlotList:格納領域アドレス
tokenPresent:true |
C_OpenSession |
セッションの確立
pApplication:NULL_PTR
Notify:NULL_PTR |
|
―遷移3― |
|
C_Login |
トークンへのログイン
userType:CKU_USER |
C_FindObjectsInit |
証明書の検索操作の初期設定
CKA_TOKEN:true
CKA_CLASS:CKO_CERTIFICATE |
C_FindObjects |
証明書の検索
※必要とする証明書数分繰り返す |
C_GetAttributeValue |
証明書サイズの取得
CKA_VALUE:NULL_PTR |
C_GetAttributeValue |
証明書の取得
CKA_VALUE:格納領域アドレス |
C_FindObjectsFinal |
証明書の検索操作の終了処理 |
C_GetAttributeValue |
証明書サイズの取得
CKA_VALUE:NULL_PTR |
C_GetAttributeValue |
証明書の取得
CKA_VALUE:格納領域アドレス |
|
―遷移4― |
|
C_CloseSessionもしくはC_CloseAllSessions |
セッションの切断 |
|
―遷移5― |
|
C_Finalize |
PKCS#11ライブラリの終了処理 |
|
|
|
(3) |
補足事項 |
|
1) |
呼出し手順
証明書データの取得(C_GetAttributeValue処理)は、証明書の検索操作の終了処理(C_FindObjectsFinal処理)の前後での呼び出しが可能である。 |
2) |
エラー処理
・ |
C_Login処理にて以下のエラーが発生した場合の除き、必要とする終了処理を実施後「遷移2」の処理から再開する。必要とする終了処理とは、C_OpenSession/C_Loginを行っていればC_CloseSession/C_Logout処理を行う事を意味する。 |
・ |
"CKR_PIN_INCORRECT"が返却された場合、C_Loginの処理から再開する。 |
・ |
"CKR_PIN_LOCKED"が返却された場合、「遷移5」を行い業務を終了する。 |
・ |
汎用受付等システムは、次のエラーコードを判別し処理する。 |
|
|
CKR_TOKEN_NOT_RECOGNIZED |
: |
不正なICカード |
|
CKR_TOKEN_NOT_PRESENT |
: |
ICカードが挿入されていない、又は抜かれた。 |
|
CKR_SESSION_HANDLE_INVALID |
: |
ICカードが挿入されていない、又は抜かれた。 |
|
CKR_DEVICE_REMOVED |
: |
処理中にICカードが抜かれた。 |
|
|
|
|
6 |
署名検証 |
|
(1) |
操作フロー
汎用受付等システムにおいてICカードに格納された自己署名証明書を利用して申請データや電子公文書に付与された電子署名を検証する場合の操作フローは、以下のとおりとする。 |
|
1) |
初期化処理
PKCS#11ライブラリをロードする。 |
2) |
署名検証対象の申請データ等を選択
署名検証対象の電子署名が付与された申請データ等を選択する。 |
3) |
ICカードを挿入
利用する証明書が格納されているICカードをリーダライタに挿入する。 |
4) |
PINを入力
リーダライタに挿入したICカードに対するPINを入力する。ここで入力したPINを利用しアクセス認証を行う。 |
5) |
利用する証明書を選択
ICカード内に自己署名証明書が複数格納されている場合、ここで利用する自己署名証明書を選択する。 |
6) |
申請データ等の署名を検証
選択された証明書を利用し、申請書データ等の電子署名を検証し、検証結果を出力する。 |
7) |
ICカードを取り出す。
ICカードをリーダライタから取り出す。 |
8) |
終了処理
PKCS#11ライブラリの終了処理を行う。 |
|
|
|
|
(2) |
PKCS#11ライブラリ呼び出し手順
汎用受付等システムにおいてICカードに格納された自己署名証明書を利用して申請データや電子公文書に付与された電子署名を検証する場合のPKCS#11ライブラリ呼び出し手順は、「5 証明書表示」の場合と同じである。
|
|
|
第5 |
ライブラリのロード方法 |
|
汎用受付等システムでは、ロードすべきPKCS#11ライブラリのパス名を記述した固定のファイル(ロード定義情報ファイル)からパス名を取得し、ロードする方式とする。
1 |
PKCS#11ライブラリのパス名取得方法
汎用受付等システムは、デフォルトのロード情報定義ファイルからパス名情報を取得し、ライブラリをロードする。
|
|
ロード情報定義ファイルの格納ディレクトリは以下である。 |
|
C:\Program Files\Common Files\e-gov_app\load_path\ |
|
デフォルトのロード情報定義ファイルは、以下のファイル名である。 |
|
C:\ProgramFiles\CommonFiles\e-gov_app\load_path\default.dat |
|
ロード情報定義ファイル内のフォーマットは以下のようになっている。 |
|
|
|
・ |
項目と指定内容とは「=」でつなぎ、不要な空白等は含まれない。 |
・ |
各項目について、内容は1行に記述され、「=」以降、改行文字までが有効な指定内容である。 |
・ |
ファイル内に不要な行が含まれる場合には、その行は無視する。 |
項目として設定されている情報を以下の表に示す。
項目 |
指定内容 |
name |
「会社名-識別情報」の形式で設定されている。 |
path |
PKCS#11ライブラリの格納先の絶対パス名が設定されている。 |
例)ロード情報定義ファイルの例
name=abc_Limited-01
path=C:\program files\abc\lib\pkcs11.dll |
デフォルトのロード情報定義ファイルが上記の内容であった場合、汎用受付等システムは「C:\programfiles\abc\lib \pkcs11.dll」をロードし、利用することになる。 |
|
2 |
複数PKCS#11ライブラリの使い分け方法
処理ごとに複数種類のカードを使い分けて対応するPKCS#11ライブラリを使用する必要がある場合、デフォルトのロード情報定義ファイルを置き換えることによって実現することとし、汎用受付等システムではPKCS#11ライブラリの選択は意識しないものとする。
デフォルトのロード情報定義ファイルを置き換える際には、汎用受付等システムが処理中でないことを確認の上、使用したいカードのロード情報定義ファイルをdefault.datにコピーすることで実現するものとする。
|
|
第6 |
PKCS#11関数の実装要件
汎用受付等システムで使用されるPKCS#11関数の仕様については、PKCS#11V2.01の規約に準じ、以下のとおりとする。
汎用受付等システムで使用されるPKCS#11関数の一覧
No |
関数名 |
機能 |
1 |
C_GetFunctionList |
PKCS#11ライブラリの関数ポインタリストの取得 |
2 |
C_Initilaize |
PKCS#11ライブラリの初期化 |
3 |
C_Finalize |
PKCS#11ライブラリの終了処理 |
4 |
C_GetSlotList |
スロットリストの取得 |
5 |
C_GetSlotInfo |
スロット情報の取得 |
6 |
C_GetTokenInfo |
トークン情報の取得 |
7 |
C_OpenSession |
セッションの確立 |
8 |
C_CloseSession |
セッションの切断 |
9 |
C_CloseAllSessions |
すべてのセッションの切断 |
10 |
C_Login |
ログイン |
11 |
C_Logout |
ログアウト |
12 |
C_GetAttributeValue |
オブジェクト属性値の取得 |
13 |
C_FindObjectsInit |
オブジェクトの検索操作の初期設定 |
14 |
C_FindObjects |
オブジェクトの検索 |
15 |
C_FindObjectsFinal |
オブジェクトの検索操作の終了処理 |
16 |
C_SignInit |
署名処理の初期化 |
17 |
C_Sign |
署名 |
|
|
1 |
C_GetFunctionList関数
|
|
(1) |
形式
CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
|
(2) |
機能
PKCS#11ライブラリの関数のポインタリストを取得する。
|
(3) |
引数
期待する処理 |
引数名 |
ppFunctionList |
PKCS#11ライブラリのポインタリスト取得 |
ポインタリストを格納する領域 |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
1) |
汎用受付等システムでは、PKCS#11の関数を本関数で通知されたポインタで呼び出す。本関数は、サポートするすべてのPKCS#11関数のポインタを通知する必要がある。 |
|
2) |
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
2 |
C_Initialize関数 |
|
(1) |
形式
CK_RV C_Initialize(CK_VOID_PTR pReserved);
|
(2) |
機能
PKCS#11ライブラリの初期化を行う。
|
(3) |
引数
期待する処理 |
引数名 |
pReserved |
PKCS#11ライブラリの初期化 |
NULL_PTR |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、本関数でPKCS#11ライブラリが初期化済の状態のときを除く。
|
|
3 |
C_Finalize関数 |
|
(1) |
形式
CK_RV C_Finalize(CK_VOID_PTR pReserved);
|
(2) |
機能
PKCS#11ライブラリの終了処理を行う。
|
(3) |
引数
期待する処理 |
引数名 |
pReserved |
PKCS#11ライブラリの終了処理 |
NULL_PTR |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、PKCS#11ライブラリが未初期化(C_Initialize関数が呼び出されていない)状態のときを除く。 |
|
4 |
C_GetSlotList関数 |
|
(1) |
形式
CK_RV C_GetSlotList( |
CK_BBOOL |
|
tokenPresent, |
|
CK_SLOT_ID_PTR |
|
pSlotList, |
|
CK_ULONG_PTR |
|
pulCount); |
|
(2) |
機能
スロットを識別するIDのリスト、またはスロットの数を取得する。
|
(3) |
引数
期待する処理 |
引数名 |
tokenPresent |
pSlotList |
pulCount |
スロット数を取得 |
TRUE |
NULL_PTR |
スロット数を取得する領域 |
スロットIDのリスト取得 |
TRUE |
スロットIDのリストを取得する領域 |
格納可能なスロットID数 |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
1) |
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
2) |
汎用受付等システムでは、一度の処理で、本関数を二度呼び出す。最初の呼び出しでは「スロット数を取得」し、二度目の呼び出しでは「スロットIDのリストを取得」する。 |
|
5 |
C_GetSlotInfo関数 |
|
(1) |
形式
CK_RV C_GetSlotInfo( |
CK_SLOT_ID |
|
slotID, |
|
CK_SLOT_INFO_PTR |
|
pInfo); |
|
(2) |
機能
スロットの情報を取得する。
|
(3) |
引数
期待する処理 |
引数名 |
slotID |
pInfo |
スロット情報の取得 |
C_GetSlotList関数で取得したスロットID |
スロット情報領域 |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
6 |
C_GetTokenInfo関数 |
|
(1) |
形式
CK_RV C_GetTokenInfo( |
CK_SLOT_ID |
|
slotID, |
|
CK_TOKEN_INFO_PTR |
|
pInfo); |
|
(2) |
機能
指定したスロットに対応するトークンの情報を取得する。
|
(3) |
引数
期待する処理 |
引数名 |
slotID |
pInfo |
トークン情報の取得 |
C_GetSlotList関数で取得したスロットID |
トークン情報領域 |
|
(4) |
復帰値 |
|
1) |
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_TOKEN_NOT_PRESENT
|
|
2) |
本関数内でカードリーダに不正なICカードが挿入されていることを検出した場合は、以下の復帰値を通知する必要がある。
CKR_TOKEN_NOT_RECOGNIZED
|
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
7 |
C_OpenSession関数 |
|
(1) |
形式
CK_RV C_OpenSession( |
CK_SLOT_ID |
|
slotID, |
|
CK_FLAGS |
|
flags, |
|
CK_VOID_PTR |
|
pApplication, |
|
CK_NOTIFY |
|
Notify, |
|
CK_SESSION_HANDLE_PTR |
|
phSession); |
|
(2) |
機能
|
|
プロセスとトークンの間でセッションを確立し、確立したセッションを識別するためのセッションハンドルを取得する。
|
(3) |
引数
期待する処理 |
引数名 |
slotID |
flags |
pApplication |
Notify |
phSession |
Readセッションで確立 |
C_GetSlotList関数で取得したスロットID |
CKF_SERIAL _SESSION |
NULL_PTR |
NULL_PTR |
セッションハンドル取得領域 |
|
(4) |
復帰値 |
|
1) |
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_TOKEN_NOT_PRESENT
|
|
2) |
本関数内でカードリーダに不正なICカードが挿入されていることを検出した場合は、以下の復帰値を通知する必要がある。
CKR_TOKEN_NOT_RECOGNIZED
|
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
8 |
C_CloseSession関数 |
|
(1) |
形式
CK_RV C_CloseSession(CK_SESSION_HANDLE hSession);
|
(2) |
機能
トークンとプロセス間のセッションを切断する。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
セッションの切断処理 |
C_OpenSession関数で取得したセッションハンドル |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
9 |
C_CloseAllSessions関数 |
|
(1) |
形式
CK_RV C_CloseAllSessions(CK_SLOT_ID slotID);
|
(2) |
機能
指定したスロットに対する、トークンとプロセス間のすべてのセッションを切断する。
|
(3) |
引数
期待する処理 |
引数名 |
slotID |
すべてのセッションの切断処理 |
C_OpenSession関数でセッションを確立しているスロットのID |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
10 |
C_Login関数 |
|
(1) |
形式
CK_RV C_Login( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_USER_TYPE |
|
userType, |
|
CK_CHAR_PTR |
|
pPin, |
|
CK_ULONG |
|
ulPinLen); |
|
(2) |
機能
トークンへログインする。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
userType |
pPin |
ulPinLen |
トークンへのログイン |
C_OpenSession関数で取得したセッションハンドル |
CKU_USER |
汎用受付等システム利用者が入力したPIN |
PIN長 |
|
(4) |
復帰値 |
|
1) |
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
2) |
本関数内でPINの指定誤りを検出した場合は、以下の復帰値を通知する必要がある。
CKR_PIN_INCORRECT
|
|
3) |
本関数内でPINがロックされたことを検出した場合は、以下の復帰値を通知する必要がある。
CKR_PIN_LOCKED
|
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
11 |
C_Logout関数 |
|
(1) |
形式
CK_RV C_Logout(CK_SESSION_HANDLE hSession);
|
(2) |
機能
トークンからログアウトする。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
トークンからログアウト |
C_OpenSession関数で取得したログイン済のセッションハンドル |
|
(4) |
復帰値
省略。
|
(5) |
注意事項 |
|
本関数は、プロセス内で複数回の呼び出しを可能とする。 |
|
12 |
C_GetAttributeValue関数 |
|
(1) |
形式
CK_RV C_GetAttributeValue( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_OBJECT_HANDLE |
|
hObject, |
|
CK_ATTRIBUTE_PTR |
|
pTemplate, |
|
CK_ULONG |
|
ulCount); |
|
(2) |
機能
オブジェクトの属性値、または、属性値の長さを取得する。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
hObject |
pTemplate |
ulCount |
type |
pValue |
ulValueLen |
証明書の属性値の長さを取得 |
C_OpenSession関数で取得したセッションハンドル |
C_FindObjects関数で取得したオブジェクトハンドル |
CKA_VALUE |
NULL_PTR |
0 |
1 |
証明書の属性値を取得 |
CKA_VALUE |
属性値取得領域のアドレス |
本処理1回目で取得した属性値の長さ |
1 |
|
(4) |
復帰値 |
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
1) |
本関数は、プロセス内で複数回の呼び出しを可能とする。
|
|
2) |
汎用受付等システムでは、一度の処理で、本関数を二度呼び出す。最初の呼び出しでは「証明書の属性値の長さを取得」し、二度目の呼び出しでは「証明書の属性値を取得」する。 |
|
13 |
C_FindObjectsInit関数 |
|
(1) |
形式
CK_RV C_FindObjectsInit( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_ATTRIBUTE_PTR |
|
pTemplate, |
|
CK_ULONG |
|
ulCount); |
|
(2) |
機能
テンプレートで指定した属性と一致するオブジェクトを検索するための環境を初期化する。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
pTemplate |
ulCount |
type |
pValue |
ulValueLen |
証明書検索 |
C_OpenSession関数で取得したセッションハンドル |
CKA_CLASS |
CKO_CERTIFICATE |
sizeof(CK _OBJECT_CLASS) |
2 |
CKA_TOKEN |
TRUE |
sizeof(CK_BBOOL) |
秘密鍵検索 |
C_OpenSession関数で取得したセッションハンドル |
CKA_CLASS |
CKO_PRIVATE_KEY |
sizeof(CK _OBJECT_CLASS) |
4 |
CKA_PUBLIC _EXPONENT |
証明書より取得して指定 |
証明書より取得して指定 |
CKA_MODULUS |
証明書より取得して指定 |
証明書より取得して指定 |
CKA_TOKEN |
TRUE |
sizeof(CK_BBOOL) |
|
(4) |
復帰値 |
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
1) |
検索結果は、テンプレートの指定順序に依存しない。 |
|
2) |
CKA_PUBLIC_EXPONENTおよびCKA_MODULUSに指定する値は、汎用受付等システムが証明書から取得する。 |
|
3) |
本関数は、CKA_PUBLIC_EXPONENTに指定されたpValueの値が一致すれば、ulValueLenの長さが一致しなくともオブジェクトを検索できること。 |
|
4) |
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、本関数でオブジェクトの検索操作の初期設定がされている状態のときを除く。 |
|
14 |
C_FindObjects関数 |
|
(1) |
形式
CK_RV C_FindObjects( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_OBJECT_HANDLE_PTR |
|
phObject, |
|
CK_ULONG |
|
ulMaxObjectCount, |
|
CK_ULONG_PTR |
|
pulObjectCount); |
|
(2) |
機能 |
|
C_FindObjectsInit関数で設定した検索条件と一致するオブジェクトを検索する。検索条件と一致するオブジェクトが存在しない場合、本関数は、pulObjectCountで指定された領域に0を設定する。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
phObject |
ulMaxObjectCount |
pulObjectCount |
C_FindObjectsInit関数で指定した条件に一致するオブジェクトの取得 |
C_FindObjectsInit関数で指定したセッションハンドル |
オブジェクトハンドルを格納する領域へのポインタ |
一度に通知してほしいオブジェクトハンドルの最大数 |
通知されるオブジェクトハンドルの個数を格納する領域 |
|
(4) |
復帰値 |
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
1) |
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、C_FindObjectsInit関数でオブジェクトの検索操作の初期設定がされていない状態を除く。 |
|
2) |
C_GetAttributeValue関数も含め、以下の順序で呼び出されても動作可能である必要がある。
i |
1件ずつの検索・取得処理
C_FindObjects関数のulMaxObjectCountに1を指定し、オブジェクトが見つからなくなる(pulObjectCountに0が通知される)まで関数呼び出しを繰り返す。繰り返し処理内ではC_GetAttributevalue関数を呼び出す。繰り返し処理を抜けた後、C_FindObjectsFinal関数を呼び出す。
|
ii |
何件か単位での検索・取得処理
C_FindObjects関数のulMaxObjectCountに2以上の値を指定し、オブジェクトが見つからなくなる(pulObjectCountに0が通知される)まで関数呼び出しを繰り返す。繰り返し処理内ではC_GetAttributevalue関数を複数回呼び出す。繰り返し処理を抜けた後、C_FindObjectsFinal関数を呼び出す。
|
iii |
1回での検索・取得処理
C_FindObjects関数のulMaxObjectCountに、格納されているオブジェクトの件数より大きな値を指定し、全てのオブジェクトを一度で検索する。その後、C_FindObjectsFinal関数を呼び出し、C_GetAttributeValue関数を複数回呼び出す。あるいは、C_GetAttributeValue関数を複数回呼び出し、C_FindObjectsFinal関数を呼び出す。 |
|
|
15 |
C_FindObjectsFinal関数 |
|
(1) |
形式
CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession);
|
(2) |
機能
オブジェクトの検索を終了する。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
オブジェクト検索の終了 |
C_OpenSession関数で指定したセッションハンドル |
|
(4) |
復帰値
|
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、オブジェクトの検索操作の初期設定がされていない状態を除く。 |
|
16 |
C_SignInit関数 |
|
(1) |
形式
CK_RV C_SignInit( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_MECHANISM_PTR |
|
pMechanism, |
|
CK_OBJECT_HANDLE |
|
hKey); |
|
(2) |
機能
署名処理の初期化を行う。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
pMechanism |
hKey |
mechanism |
pParameter |
ulParameterLen |
署名処理の初期化 |
C_OpenSession関数で取得したセッションハンドル |
CKM_RSA_PKCS |
NULL_PTR |
0 |
C_FindObjects関数で取得した署名鍵のオブジェクトハンドル |
|
(4) |
復帰値 |
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、本関数で署名処理の初期化済のときを除く。 |
|
17 |
C_Sign関数 |
|
(1) |
形式
CK_RV C_Sign( |
CK_SESSION_HANDLE |
|
hSession, |
|
CK_BYTE_PTR |
|
pData, |
|
CK_ULONG |
|
ulDataLen, |
|
CK_BYTE_PTR |
|
pSignature, |
|
CK_ULONG_PTR |
|
pulSignatureLen); |
|
(2) |
機能
署名処理を行う。
|
(3) |
引数
期待する処理 |
引数名 |
hSession |
pData |
ulDataLen |
pSignature |
pulSignatureLen |
署名領域長の取得 |
C_SignInit関数で指定したセッションハンドル |
DigestInfoデータ領域 |
DigestInfoデータ長 |
NULL_PTR |
署名の長さを受け取る領域 |
署名データの取得 |
署名を受け取る領域 |
|
(4) |
復帰値 |
|
本関数内でカードリーダにICカードが挿入されていない、または抜かれたことを検出した場合は、以下の復帰値の何れかを通知する必要がある。
CKR_DEVICE_REMOVED
CKR_SESSION_HANDLE_INVALID
|
|
1) |
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、C_SignInit関数で署名処理の初期設定が行なわれていないときを除く。 |
|
2) |
汎用受付等システムでは、一度の処理で、本関数を二度呼び出す。最初の呼び出しでは「署名領域長の取得」し、二度目の呼び出しでは「署名データの取得」を行う。 |
|
|