汎用受付等システムの構築・運用に関する共通事項
平成14年3月29日
基本問題専門部会了承
平成14年8月30日改定
平成15年3月17日改正
平成15年6月 6日改定
共通システム専門部会了承
汎用受付等システムの基本的な仕様(平成13年8月6日行政情報化推進各省庁連絡会議幹事会了承)を踏まえ、同システムの構築・運用に当たって、更に各行政機関間で整合性を図る事項については、以下のとおりとする。
1 申請データの設計に関する共通事項
(1)
申請者と各行政機関の汎用受付等システムとの間で受け渡しする申請データ
ア
各行政機関の汎用受付等システムに対して申請者が送信する申請データについては、以下の4つの情報から構成されるものとする。
1) 構成管理情報
:
申請データを構成する各要素(2)〜4))を識別し、管理するための情報
2) 申請書 :
各手続に定められた申請書様式に申請者の氏名、申請内容等が記載された情報
3) 添付書類 :
各手続に必要となる申請書以外の情報(国・地方公共団体等が発行する証明書、図面等)
4) 署名情報 :
申請者が行った電子署名に関する署名値、申請者証明書等の署名関連情報
イ
申請データの設計に当たっては、申請データの作成、管理等に当たっての申請者の利便性の確保を図る等の観点から、申請データの構成管理情報、申請書に共通する項目の属性、構造等に関する統一的な仕様を定めた『申請データ設計ガイドライン』(
別紙1)に準拠するものとする。
ウ
各手続において必要となる添付書類のデータ形式は個別手続ごとに異なるものであり、これを定める際には、申請者が一般的に利用可能なアプリケーションで作成できるものとして定める。
なお、各行政機関は、個別手続の添付書類についてデータ形式を定めた場合には、申請者における手続オンライン化への円滑な対応の観点から、オンライン化前のできる限り早期に公表する。
(2)
行政機関の間で受け渡しする申請データ(共管手続)
ア
共管手続において、申請者からの申請データを受け付けた行政機関(以下「受付機関」という。)と当該手続に関係する行政機関(以下「共管機関」という。)との間で交換する申請データについては、関係行政機関間のデータ交換の円滑化を図る観点から、申請データの構成管理情報、申請書に共通する項目の属性、構造等に関する統一的な仕様を定めた『申請データ設計ガイドライン』(
別紙1)に準拠するものとする。
イ
申請データに申請者の電子署名が付与されている場合の取扱いについては、原則として、受付機関において電子署名の検証を行うこととし、共管機関においては電子署名の検証を行わないものとする。
2 ICカード利用に関する共通事項
(1)
各行政機関の汎用受付等システムにおいて、ICカードを利用する場合のインタフェースとしては、次のア又はイを利用するものとする。
ア PKCS#11(Public- Key Cryptography Standards)
イ Crypto API(CSP)
(2)
PKCS#11を利用した場合における申請者側ICカードと汎用受付等システムのアプリケーション・インタフェースに関する仕様は、『PKCS#11を利用する場合のインタフェース仕様』(
別紙2)によるものとする。
3 システムの運用
(1)
利用規約の同意取得
申請者の汎用受付等システムの利用に際して、事前に申請者に同意を求める事項を利用規約として掲載する。
(2)
手数料等の電子納付に関する許諾事項等
申請者が汎用受付等システムを利用して行う申請等において、当該申請等に係る手数料等の電子納付を行う際の許諾事項等(歳入金電子納付システムを開発している財務省会計センターから別途示される事項)については、汎用受付等システムの利用規約に含めるものとする。
(3)
勤務時間外の対応
審査等事務担当者の通常勤務時間外(早朝夜間、閉庁日)に到達した申請等の取扱いについて、利用規約に掲載すること等により、事前に申請者に周知する。
(4)
汎用受付等システムにおける時間の基準
申請データの到達時刻等を定める際に用いる汎用受付等システムにおける時間の基準については、日本標準時(JST)とする。
(5)
サーバ証明書の発行
汎用受付等システムにおいては、電子証明書を利用し、SSL(Secure Socket Layer)によって安全な通信を行うものとする。なお、府省自らが運営する認証局からサーバ証明書を発行する場合は、次の措置を講じるものとする。
ア
サーバ証明書を発行するために生成した秘密鍵については、アクセス コントロール、バックアップを行うなど十分なセキュリティ措置を講じて適切に管理する。
イ
府省自ら運営する認証局の認証業務運営方針(CP/CPS)にサーバ証明書の内容等を掲載する。
(6)
自己署名証明書の配布及びフィンガープリントの掲載
府省自ら運営する認証局が発行したサーバ証明書等を使用する場合は、府省自ら運営する認証局の自己署名証明書が真正であることを申請者が確認可能とするため、各府省は、当該自己署名証明書のフィンガープリントを以下のア及びイの方法により提供するものとし、その他の方法についても、各府省の取組も踏まえ、引き続き検討する。
なお、当該自己署名証明書は、このフィンガープリントの提供を前提に配布するものとし、あわせてフィンガープリントを照合して確認することが必要である旨及び照合の方法について、わかりやすく提示する。
ア
官報に掲載するとともに次に掲げる方法の中から1つ以上を選択して実施する。
1) 電話による案内
2) FAXによる案内
3) 広報誌に掲載
4) 携帯電話の公式サイトによる案内
イ
各府省ホームページ等及び電子政府の総合窓口(e-Gov)に掲載する。
なお、自己署名証明書をオンラインで配布する場合は、次の措置を講ずるものとする。
1)
自己署名証明書配布サイトとフィンガープリントの掲載サイトは別にする。
2)
フィンガープリントの掲載サイトについては、自己署名証明書配布サイトから直接リンクによる案内はしない。
(7)
システム運用担当者間の情報共有
汎用受付等システムで利用されるソフトウェアの安全性に関する情報などシステムの運用に関わる各種技術情報等について各府省間で共有化を図るため、汎用受付等システムの運用担当者を登録した名簿を作成し、必要な情報交換を行い得るようにする。
4 その他
(1)
オンライン手続に関する申請者への案内・教示等
各行政機関は、申請者の利便性向上を図るため、各行政機関のホームページ上においてオンライン手続が可能な手続を明示するとともに、申請者がホームページ上に明示された手続を選択することにより行政手続の案内・教示等の画面を経由してオンライン手続を行えるようにするための措置を講ずるものとする。
(2)
代理申請
紙による手続で代理申請が行われている手続については、その実態に応じてオンラインによる申請が可能となるよう各行政機関において必要な措置を講ずる。
別紙1
申請データ設計ガイドライン
第
1 目的
本ガイドラインは、以下の目的により標準的な申請データを設計するための指針を示すものである。
○しろまる
汎用受付等システムの開発における申請データの設計を支援する。
○しろまる
申請データの設計において、使用するタグ等共通的に定めることが望ましい事項について整理し、申請者側の利便性の確保、行政機関側における横断的な業務処理や管理の促進、行政機関間のデータ交換の効率化等を図る。
第
2 用語の定義
(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"の一つであり、電子署名形式や暗号化形式等を規定し、署名対象となるデータ形式を選ばない。
第
4 共管手続における申請データの取扱い
共管手続については、関係する機関において申請データが円滑に取り扱えるようにするため、申請データに含まれる構成管理情報等に関して統一的な仕様を定める。
1
申請データの構成
共管手続における申請データについては、各手続に定められた申請書や添付書類、各申請書を表示するためのスタイルシート及び各文書を取りまとめるための情報等を管理する構成管理情報により構成する。
図2 共管手続における申請データの構成
(1)
構成管理情報
ア
構成管理情報は申請データに1個含むものとする。また、構造等を定義するスキーマ(DTD、XMLスキーマ等)については付与しない。
イ
構成管理情報については、行政機関間におけるデータ交換を円滑に行うため、データ形式には整形式で記述したXMLを採用し、共管手続における構成管理情報の構造等を定義するスキーマへの参照情報は記述しない。
ウ
構成管理情報のデータ項目は、大別して管理情報、申請書属性情報、添付書類属性情報の3情報を記述するものとする。
なお、各項目の詳細について
「共管手続における構成管理情報のデータ項目」(資料2)(PDF)に示す。
・管理情報(手続を特定する情報等)
・申請書属性情報(申請書の参照情報等)
・添付書類属性情報(添付書類の参照情報等)
(2)
申請書
ア
申請書は、申請データに1個以上含むものとする。また、申請書の構造等を定義するスキーマ(DTD、XMLスキーマ等)については原則として付与しない。
イ
共管手続における申請書のデータ形式については整形式で記述したXMLを採用する。
(3)
スタイルシート
ア
申請書を一般的なWebブラウザで表示するためのデータ交換に必要なファイルであり、申請データに含まれる各申請書に対して付与するものとする。
イ
スタイルシートの形式については、W3Cにて勧告済みのXSLTを採用する。
(4)
添付書類
ア
添付書類は申請データに0個以上含むものとする。
イ
添付書類のデータ形式については、各手続に応じて要件が異なるため、各行政機関間の取り決めによるデータ形式とする。
2
文字表記方式
共管手続における申請データに含まれる各文書においてXMLデータ形式を用いるものについては、使用する文字コードをUTF−8とする。
別紙2
PKCS#11を利用する
場合のインタフェース仕様
目次
第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カードへの基本的な格納パターンを以下に示す。
本仕様における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_GetSlotInfo
スロット情報の取得
C_GetTokenInfo
トークン情報の取得
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_Logout
トークンからのログアウト
C_CloseSessionもしくはC_CloseAllSessions
セッションの切断
―遷移7―
C_Finalize
PKCS#11ライブラリの終了処理
ロードした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_GetSlotInfo
スロット情報の取得
C_GetTokenInfo
トークン情報の取得
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_Logout
トークンからのログアウト
C_CloseSessionもしくはC_CloseAllSessions
セッションの切断
―遷移5―
C_Finalize
PKCS#11ライブラリの終了処理
ロードした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
(5)
注意事項
本関数は、プロセス内で複数回の呼び出しを可能とする。
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
(5)
注意事項
本関数は、プロセス内で複数回の呼び出しを可能とする。
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
(5)
注意事項
本関数は、プロセス内で複数回の呼び出しを可能とする。
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
(5)
注意事項
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
(5)
注意事項
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
(5)
注意事項
1)
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、C_FindObjectsInit関数でオブジェクトの検索操作の初期設定がされていない状態を除く。
2)
C_GetAttributeValue関数も含め、以下の順序で呼び出されても動作可能である必要がある。
i1
1件ずつの検索・取得処理
C_FindObjects関数のulMaxObjectCountに1を指定し、オブジェクトが見つからなくなる(pulObjectCountに0が通知される)まで関数呼び出しを繰り返す。繰り返し処理内ではC_GetAttributevalue関数を呼び出す。繰り返し処理を抜けた後、C_FindObjectsFinal関数を呼び出す。
ii2
何件か単位での検索・取得処理
C_FindObjects関数のulMaxObjectCountに2以上の値を指定し、オブジェクトが見つからなくなる(pulObjectCountに0が通知される)まで関数呼び出しを繰り返す。繰り返し処理内ではC_GetAttributevalue関数を複数回呼び出す。繰り返し処理を抜けた後、C_FindObjectsFinal関数を呼び出す。
iii3
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
(5)
注意事項
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、オブジェクトの検索操作の初期設定がされていない状態を除く。
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
(5)
注意事項
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、本関数で署名処理の初期化済のときを除く。
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
(5)
注意事項
1)
本関数は、プロセス内で複数回の呼び出しを可能とする。ただし、C_SignInit関数で署名処理の初期設定が行なわれていないときを除く。
2)
汎用受付等システムでは、一度の処理で、本関数を二度呼び出す。最初の呼び出しでは「署名領域長の取得」し、二度目の呼び出しでは「署名データの取得」を行う。
資料
行政の情報化の総合的・計画的推進に戻る 行政の情報化の総合的・計画的推進に戻る
総務省トップページに戻る 総務省トップページに戻る
行政管理局トップページに戻る 行政管理局トップページに戻る