公的個人認証サービス 利用者クライアントソフト API 仕様書 【Mac OS X C 言語 IF 編】 第 2.1 版 公的個人認証サービス 指定認証機関 地方公共団体情報システム機構 変更履歴 版数 変更日付 変更内容 1.0 版 平成 18 年 11 月 1 日 ・新規作成 1.1 版 平成 19 年 4 月 10 日 ・表 3-1 動作環境 を変更 1.2 版 平成 19 年 10 月 4 日 ・表 3-1 動作環境 プラットフォームに Mac OS X 10.4.10, Mac OS X 10.4.9 を追加 ・表 3-1 動作環境 プラットフォームに Mac OS X 1.3 版 平成 20 年 10 月 10 日 10.5.4, Mac OS X 10.5.3, Mac OS X 10.5.2, Mac OS X 10.5.1, Mac OS X 10.5, Mac OS X 10.4.11 を追加 ・第3章 動作環境 プラットフォームより Mac OS X 10.4.X, Mac OS X 10.5.X を削除、 Mac OS X 10.7.5, OS X 10.8.4 を追加 1.4 版 平成 25 年 12 月 1 日 ・第5章 第3節 9 ハッシュアルゴリズム SHA256 を追加 ・第5章 第3節 11 ハッシュアルゴリズム SHA256 を追加 ・全体 「地方公共団体情報システム機構」への事業承 継により、組織名称を変更する。 2.0 版 平成 26 年 4 月 1 日 ・全体 「公的個人認証サービス共通基盤事業運用会議」 への事業承継により、「公的個人認証サービス都道府県 協議会」の組織名称を変更する。 ・第3章 表 3-1 動作環境 プラットフォームの条件 で OS X 10.8.4 を OS X 10.8.5(64bit)に変更、OS X 10.9.4(64bit)を追加 ・第5章 2.1 版 平成 26 年 7 月 1 日 第1節 表 5-1 サポート API 一覧 No.25 の概要に SHA256 について追加、No.15 および No.26 の概 要を No.25 同様に(SHA1、SHA256)の記載を追加 ・第5章 第3節 5 CSSM_SignData に SHA256 につい ての記述を追加、またその注釈を追加 ・第5章 第3節 7 CSSM_SignData に SHA256 につい ての記述を追加、またその注釈を追加 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 - 目次 - 第1章 はじめに ......................................................... 1 第2章 ドキュメント体系 ................................................. 1 第3章 動作環境 ......................................................... 2 第4章 機能仕様 ......................................................... 3 第1節 ソフトウェア構成図 .............................................................................................. 3 第2節 実現可能な機能の一覧 .......................................................................................... 4 第5章 API 仕様 .......................................................... 5 第1節 サポート API 一覧................................................................................................. 5 第2節 サポート API 仕様詳細 ......................................................................................... 6 1 Keychain Services ................................................................................................... 6 2 CSSM ....................................................................................................................... 6 第3節 コーリングシーケンス .......................................................................................... 7 1 IC カードへの接続.................................................................................................... 7 2 IC カードへのログイン ............................................................................................ 7 3 IC カードから切断.................................................................................................... 8 4 証明書取得(利用者証明書、都道府県知事の自己署名証明書) ............................ 8 5 署名生成(署名対象データを渡すパターン) ......................................................... 9 6 繰り返し署名生成(署名対象データを渡すパターン)....................................... 12 7 署名生成(ハッシュ値を渡すパターン)............................................................. 12 8 繰り返し署名生成(ハッシュ値を渡すパターン) .............................................. 14 9 署名検証(検証対象データを渡すパターン) ..................................................... 14 10 繰り返し署名検証(検証対象データを渡すパターン) ................................... 17 11 署名検証(ハッシュ値を渡すパターン) ......................................................... 17 12 繰り返し署名検証(ハッシュ値を渡すパターン) .......................................... 19 i API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第1章 はじめに 公的個人認証サービス 利用者クライアントソフト(以下、JPKI 利用者ソフト)における、以 下の機能を実現するための Application Program Interface(以下、API)仕様について説明する。 証明書取得機能 電子署名生成機能 電子署名検証機能 第2章 ドキュメント体系 JPKI 利用者ソフトのドキュメント体系図を以下に示す。本書は以下の体系図の網掛け部分に 該当する。 利用者クライアントソフト 機能概要説明書 利用者クライアントソフトの機能概要について説明しています。 API 仕様書 カード AP ライブラリ CryptoAPI 編 カード AP ライブラリ(CryptoAPI)の API 仕様について説明しています。 API 仕様書 カード AP ライブラリ PKCS#11 編 カード AP ライブラリ(PKCS#11)の API 仕様について説明しています。 API 仕様書 カード AP ライブラリ Java インターフェース編 カード AP ライブラリ(Java インターフェース)の API 仕様について説明しています。 JavaDoc JPKICryptJNI カード AP ライブラリ(Java インターフェース)の JavaDoc です。 API 仕様書 個人認証サービス AP C 言語インターフェース編 個人認証サービス AP(C 言語インターフェース)の API 仕様について説明しています。 API 仕様書 個人認証サービス AP Java インターフェース編 個人認証サービス AP(Java インターフェース)の API 仕様について説明しています。 JavaDoc JPKIUserCertService 個人認証サービス AP(Java インターフェース)の JavaDoc です。 API 仕様書 Mac OS X C 言語インターフェース編 Mac OS X の C インターフェースの API 仕様について説明しています。 図 2-1 ドキュメント体系図 1 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第3章 動作環境 Mac OS X の C 言語インターフェースの動作環境は以下の通りとする。 表 3-1 動作環境 項目 条件 プ ラ ッ ト フ ォ ー ム OS X 10.7.5(64bit) (※1, ※2) OS X 10.8.5(64bit) OS X 10.9.4(64bit) IC カード 公的個人認証サービスカードアプリケーションを搭載し、公的個人認証 サービスの電子証明書が格納された IC カードとする。 IC カードリーダラ 以下の条件を満たす IC カードリーダライタとする。(「適合性検証済み イタ IC カードリーダライタ一覧」を参照のこと。) ・ IC カードのインターフェース(非接触型、接触非接触両対応型)に対 応していること ・ PC/SC 対応 IC カードリーダライタ(※2)であること ・ USB や RS-232C など、パソコンに接続するためのインターフェースを 有すること ・ IC カードリーダライタと通信するためのドライバソフトウェアが提 供されていること ・ IC カードの搬送方式が手動挿入/手動排出タイプまたは自動挿入/自 動排出タイプであること ・ IC カードを挿入するスロットの数は 1 つとし、1 度に挿入できる IC カードは 1 枚であること ※1 本仕様書で定めるバージョンの開発時点の環境。最新の動作環境の情報は、JPKI ポータル サイトに掲載するものとする。 ※2 プラットフォームが Mac OS の場合、動作前提条件として、Mac OS Forge が提供する「Smart Card Services Updatev2.0.1」をそれぞれの OS に合ったものをダウンロードし、インスト ールする必要がある。 Mac OS Forge の Smart Card Services Installers のページ: http://smartcardservices.macosforge.org/trac/wiki/installers ※3 最新の「適合性検証済み IC カードリーダライタ一覧」の情報は、JPKI ポータルサイトに掲 載するものとする。 ※4 Personal Computer/Smart Card の略。 2 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第4章 機能仕様 第1節 ソフトウェア構成図 本 仕様書で は、 JPKI 利用 者ソフト のうち、 下図 の太枠に 示す Keychain Services およ び CSSM(Common Security Services Manager)の仕様をまとめる。 上位アプリケーション PKCS#11 API JavaI/F JavaI/F JPKI利用者ソフト C言語I/F 個人認証サービスAP C言語I/F 個人認証サービスAP JavaI/F カードAPライブラリ カードAPライブラリ JavaI/F PKCS#11 カードAPライブラリ カードI/F Keychain Services API Keychain Services CSSM API 証明書 検証要求 オンライン窓口 処理要求 CSSM (Common Security Services Manager) Smart Card Services (PC/SC) PC/SCリーダライタドライバ カードコマンド PC/SCリーダライタ カードコマンド 公的個人認証サービスカードアプリケーション 官職証明書検証 オンライン窓口 サービス サービス 図 4-1 ソフトウェア構成図 3 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第2節 実現可能な機能の一覧 Keychain Services および CSSM で実現可能な機能の一覧を表 4-1に示す。 表 4-1 実現可能な機能の一覧 NO 機能 概要 1 利用者証明書取得 2 都道府県知事の自己署名証明書取 IC カードに格納された都道府県知事の自己署名証明 得 3 IC カードに格納された利用者証明書を取得する。 書を取得する。 署名生成(署名対象データを渡すパ 署名対象データからハッシュ値を計算し、IC カード ターン) に格納された利用者秘密鍵を使用して電子署名を生 成する。 4 繰り返し署名生成(署名対象データ NO3 の処理を繰り返し実行し、複数の署名対象データ を渡すパターン) 5 署名生成(ハッシュ値を渡すパター ハッシュ値に対して、IC カードに格納された利用者 ン) 6 値、電子署名、公開鍵を使用して電子署名を検証する。 繰り返し署名検証(検証対象データ NO7 の処理を繰り返し実行し、複数の電子署名を検証 を渡すパターン) 9 する電子署名を生成する。 署名検証(検証対象データを渡すパ 検証対象データからハッシュ値を計算し、ハッシュ ターン) 8 秘密鍵を使用して電子署名を生成する。 繰り返し署名生成(ハッシュ値を渡 NO5 の処理を繰り返し実行し、複数のハッシュ値に対 すパターン) 7 に対する電子署名を生成する。 する。 署名検証(ハッシュ値を渡すパター ハッシュ値、電子署名、公開鍵を使用して電子署名を ン) 検証する。 10 繰り返し署名検証(ハッシュ値を渡 NO9 の処理を繰り返し実行し、複数の電子署名を検証 すパターン) する。 4 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第5章 API 仕様 第1節 サポート API 一覧 Keychain Services および CSSM のサポート API の一覧を表 5-1に示す。 表 5-1 サポート API 一覧 NO 1 API 名 SecCertificateGetCLHandle 概要 キーチェーンアイテムから CL ハンドルを取得 する。 2 SecCertificateGetData キーチェーンアイテムから証明書データを取 得する。 3 SecKeychainCopyDomainSearchList IC カードに対応するキーチェーンのリストを 作成する。 4 SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 する。 5 SecKeychainGetStatus キーチェーンのステータスを取得する。 6 SecKeychainItemCopyAttributesAndData キーチェーンアイテムからアイテムクラスを 取得する。 7 SecKeychainLock キーチェーンをロックする。 8 SecKeychainSearchCopyNext サーチリストからキーチェーンアイテムを取 得する。 9 SecKeychainSearchCreateFromAttributes 証明書のサーチリストを生成する。 10 SecKeychainUnlock キーチェーンのロックを解除する。 11 SecKeyGetCredentials キーチェーンアイテムから秘密鍵を利用する 為の信用情報を取得する。 12 SecKeyGetCSSMKey キーチェーンから CSSM のキー(秘密鍵)を取得 する。 13 CSSM_CL_CertAbortQuery 証明書の検索を終了する。 14 CSSM_CL_CertGetFirstFieldValue 証明書から指定した OID に対応する属性を検 索する。 15 CSSM_CSP_CreateDigestContext CSSM で使用するダイジェストハンドル(SHA1、 SHA256)を取得する。 16 CSSM_CSP_CreateSignatureContext CSSM で使用する署名生成ハンドルを取得す る。 17 CSSM_DeleteContext CSSM のハンドルを破棄する。 18 CSSM_DigestDataFinal ダイジェストを取得・終了する。 19 CSSM_DigestDataInit ダイジェストの初期化する。 5 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 NO API 名 20 CSSM_DigestDataUpdate 概要 ダイジェスト値にデータをアップデートす る。 21 CSSM_GetSubserviceUIDFromHandle CSP ハンドルから対応するサービス UID を取得 する。 22 CSSM_Init CSSM を初期化する。 23 CSSM_ModuleAttach CSSM の CSP モジュールを CSSM にアタッチす る。 24 CSSM_ModuleLoad CSSM の CSP モジュールをロードする。 25 CSSM_SignData 署名を生成(SHA1、SHA256)する。 26 CSSM_VerifyData 署名を検証(SHA1、SHA256)する。 第2節 1 サポート API 仕様詳細 Keychain Services Keychain Services の詳細については、下記 URL 等の正式な資料を参照してください。 「http://developer.apple.com/documentation/Security/Reference/SecurityFrameworkR eference/index.html」 Copyright © 2012 Apple Inc. All Rights Reserved. 2 CSSM CSSM の詳細については、下記 URL の正式な資料を参照してください。 「http://www.opengroup.org/publications/catalog/c914.htm」 Copyright © May 2000. The Open Group. All Rights Reserved. 6 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 第3節 コーリングシーケンス 「第4章 第2節 実現可能な機能の一覧」を実現するためのコーリングシーケンスを以下に示 す。上位アプリケーションは、このコーリングシーケンスに沿って実装すること。 1 IC カードへの接続 IC カードへの接続のコーリングシーケンスを以下に示す(図 5-1) 。 SecKeychainCopyDomainSearchList IC カードに対応するキーチェーンのリストを作成 domain: kSecPreferencesDomainDynamic searchList: リスト格納領域ドレス ↓ SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 keychain: キーチェーン cspHandle: CSP ハンドル ↓ CSSM_GetSubserviceUIDFromHandle CSP ハンドルから対応するサービス UID を取得 ModuleHandle: CSP ハンドル SubserviceUID: サービス UID 図 5-1 IC カードへの接続 2 IC カードへのログイン IC カードへのログインのコーリングシーケンスを以下に示す(図 5-2) 。 SecKeychainGetStatus キーチェーンのステータスを取得 keychain: キーチェーン keychainStatus: キーチェーンステータス ↓ SecKeychainUnlock キーチェーンのロックを解除 keychain: キーチェーン passwordLength: パスワード長 password: パスワード usePassword: TRUE 図 5-2 IC カードへのログイン 7 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 3 IC カードから切断 IC カードから切断のコーリングシーケンスを以下に示す(図 5-3) 。 SecKeychainGetStatus キーチェーンのステータスを取得 keychain: キーチェーン keychainStatus: キーチェーンステータス ↓ SecKeychainLock キーチェーンをロック keychain: キーチェーン 図 5-3 IC カードから切断 4 証明書取得(利用者証明書、都道府県知事の自己署名証明書) 証明書取得のコーリングシーケンスを以下に示す(図 5-4) 。 IC カードへの接続(1 IC カードへの接続 を参照) ↓ IC カードへのログイン(2 IC カードへのログイン を参照) ↓ SecKeychainSearchCreateFromAttr 証明書のサーチリストを生成 ibutes keychainOrArray: キーチェーン itemClass: kSecCertificateItemClass attrList: NULL searchRef: サーチリスト格納領域アドレス ↓ ①ループ SecKeychainSearchCopyNext サーチリストから次のキーチェーンアイテムを取得 searchRef: サーチリスト itemRef: キーチェーンアイテム格納領域アドレス ↓ SecCertificateGetData キーチェーンアイテムから証明書データを取得 certificate: キーチェーンアイテム data: 証明書データ格納領域アドレス ↓ SecCertificateGetCLHandle キーチェーンアイテムから CL ハンドルを取得 certificate: キーチェーンアイテム clHandle: CL ハンドル ↓ 8 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_CL_CertGetFirstFieldValue 証明書から指定した OID に対応する属性を検索する。 CLHandle: CL ハンドル Cert: 証明書データ CertField: 証明書フィールド識別子 (CSSMOID_X509V1SubjectNameStd) ResultsHandle: CSSM ハンドル NumberOfMatchedFields:OID に一致したフィールド数 Value: Subject フィールド格納領域アドレス ↓ CSSM_CL_CertGetFirstFieldValue 証明書から指定した OID に対応する属性を検索する。 CLHandle: CL ハンドル Cert: 証明書データ CertField: 証明書フィールド識別子 (CSSMOID_X509V1IssuerNameStd) ResultsHandle: CSSM ハンドル NumberOfMatchedFields:OID に一致したフィールド数 Value: Issuer フィールド格納領域アドレス ↓ CSSM_CL_CertAbortQuery 証明書の検索を終了する。 CLHandle: CL ハンドル ResultsHandle: CSSM ハンドル ↓ Subject = Issuer の場合は都道府県知事の自己署名証明書 Subject ≠ Issuer の場合は利用者証明書 ↓ ≠ の場合 取得した証明書:求める証明書 ↓ → ①に戻る = の場合 IC カードから切断(3 IC カードから切断 を参照) 図 5-4 証明書取得 5 署名生成(署名対象データを渡すパターン) 署名生成(署名対象データを渡すパターン)のコーリングシーケンスを以下に示す(図 5-5) 。 IC カードへの接続(1 IC カードへの接続 を参照) 9 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 ↓ IC カードへのログイン(2 IC カードへのログイン を参照) ↓ SecKeychainSearchCreateFromAttr 証明書のサーチリストを生成 ibutes keychainOrArray: キーチェーン itemClass: CSSM_DL_DB_RECORD_ANY attrList: NULL searchRef: サーチリスト格納領域アドレス ↓ SecKeychainSearchCopyNext サーチリストから次のキーチェーンアイテムを取得 searchRef: サーチリスト itemRef: キーチェーンアイテム格納領域アドレス ↓ SecKeychainItemCopyAttributesAn キーチェーンアイテムからアイテムクラスを取得 dData ItemRef: キーチェーンアイテム Info: NULL ItemClass: アイテムクラス *attrList: NULL length: NULL outData: NULL ↓ SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 keychain,: キーチェーン cspHandle: CSP ハンドル ↓ SecKeyGetCSSMKey キーチェーンから CSSM のキー(秘密鍵)を取得 key: キーチェーンアイテム cssmKey: CSSM キー ↓ SecKeyGetCredentials キーチェーンアイテムから秘密鍵を利用する為の信用情 報を取得 keyRef: キーチェーンアイテム operation: CSSM_ACL_AUTHORIZATION_SIGN credentialType: kSecCredentialTypeDefault outCredentials: 信用情報 ↓ 10 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_CSP_CreateDigestContext CSSM で使用するダイジェストハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_SHA1, CSSM_ALGID_SHA256 より 署名生成に利用するダイジェストのアルゴリズム ID を指 定 NewContextHandle: ダイジェストハンドル ↓ CSSM_DigestDataInit ダイジェストの初期化 CCHandle: ダイジェストハンドル ↓ CSSM_DigestDataUpdate ダイジェスト値にデータをアップデート CCHandle: ダイジェストハンドル DataBufs: ハッシュ対象データ DataBufCount: 1 ↓ CSSM_DigestDataFinal ダイジェストの取得・終了処理 CCHandle: ダイジェストハンドル Digest: ダイジェスト格納領域アドレス ↓ CSSM_DeleteContext CSSM のハンドルを破棄 CCHandle: ダイジェストハンドル ↓ CSSM_CSP_CreateSignatureContext CSSM で使用する署名生成ハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_RSA AccessCred: 信用情報 Key: CSSM キー NewContextHandle: 署名生成ハンドル ↓ CSSM_SignData 署名生成(SHA1、SHA256) CCHandle: 署名生成ハンドル DataBufs: CSSM_DATA 型のハッシュ値(*) DataBufCount: 1 DigestAlgorithm: CSSM_ALGID_SHA1、CSSM_ALGID_NONE(*) より署名生成に利用するダイジェストアルゴリズムを指 定 Signature: 署名値 11 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 * SHA256 の場合は CSSM_ALGID_NONE を指定し、CSSM_DATA 型のハッシュ値の先頭に SHA256 の OID を指定する。 ↓ CSSM_DeleteContext 署名生成ハンドルを破棄 CCHandle: 署名生成ハンドル ↓ IC カードから切断(3 IC カードから切断 を参照) 図 5-5 署名生成(署名対象データを渡すパターン) 6 繰り返し署名生成(署名対象データを渡すパターン) 「5 署名生成(署名対象データを渡すパターン) 」の網掛け部分を署名対象データの個数 分だけ繰り返して呼び出す。 7 署名生成(ハッシュ値を渡すパターン) 署名生成 (ハッシュ値を渡すパターン)のコーリングシーケンスを以下に示す (図 5-6) 。 IC カードへの接続(1 IC カードへの接続 を参照) ↓ IC カードへのログイン(2 IC カードへのログイン を参照) ↓ SecKeychainSearchCreateFromAttr 証明書のサーチリストを生成 ibutes keychainOrArray: キーチェーン itemClass: CSSM_DL_DB_RECORD_ANY attrList: NULL searchRef: サーチリスト格納領域アドレス ↓ SecKeychainSearchCopyNext サーチリストから次のキーチェーンアイテムを取得 searchRef: サーチリスト itemRef: キーチェーンアイテム格納領域アドレス ↓ SecKeychainItemCopyAttributesAn キーチェーンアイテムからアイテムクラスを取得 dData ItemRef: キーチェーンアイテム Info: NULL ItemClass: アイテムクラス *attrList: NULL length: NULL 12 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 outData: NULL ↓ SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 keychain,: キーチェーン cspHandle: CSP ハンドル ↓ SecKeyGetCSSMKey キーチェーンから CSSM のキー(秘密鍵)を取得 key: キーチェーンアイテム cssmKey: CSSM キー ↓ SecKeyGetCredentials キーチェーンアイテムから秘密鍵を利用する為の信用情 報を取得 keyRef: キーチェーンアイテム operation: CSSM_ACL_AUTHORIZATION_SIGN credentialType: kSecCredentialTypeDefault outCredentials: 信用情報 ↓ CSSM_CSP_CreateSignatureContext CSSM で使用する署名生成ハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_RSA AccessCred: 信用情報 Key: CSSM キー NewContextHandle: 署名生成ハンドル ↓ CSSM_SignData 署名生成(SHA1、SHA256) CCHandle: 署名生成ハンドル DataBufs: CSSM_DATA 型のハッシュ値(*) DataBufCount: 1 DigestAlgorithm: CSSM_ALGID_SHA1、CSSM_ALGID_NONE(*) より署名生成に利用するダイジェストアルゴリズムを指 定 Signature: 署名値 * SHA256 の場合は CSSM_ALGID_NONE を指定し、CSSM_DATA 型のハッシュ値の先頭に SHA256 の OID を指定する。 ↓ CSSM_DeleteContext 署名生成ハンドルを破棄 CCHandle: 署名生成ハンドル ↓ 13 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 IC カードから切断(3 IC カードから切断 を参照) 図 5-6 署名生成(ハッシュ値を渡すパターン) 8 繰り返し署名生成(ハッシュ値を渡すパターン) 「7 署名生成(ハッシュ値を渡すパターン)」の網掛け部分を署名対象データの個数分だ け繰り返して呼び出す。 9 署名検証(検証対象データを渡すパターン) 署名検証(検証対象データを渡すパターン)のコーリングシーケンスを以下に示す(図 5-7) 。 IC カードへの接続(1 IC カードへの接続 を参照) ↓ IC カードへのログイン(2 IC カードへのログイン を参照) ↓ SecKeychainSearchCreateFromAttr 証明書のサーチリストを生成 ibutes keychainOrArray: キーチェーン itemClass: kSecCertificateItemClass attrList: NULL searchRef: サーチリスト格納領域アドレス ↓ SecKeychainSearchCopyNext サーチリストから次のキーチェーンアイテムを取得 searchRef: サーチリスト itemRef: キーチェーンアイテム格納領域アドレス ↓ SecCertificateGetData キーチェーンアイテムから証明書データを取得 certificate: キーチェーンアイテム data: 証明書データ格納領域アドレス ↓ SecCertificateGetCLHandle キーチェーンアイテムから CL ハンドルを取得 certificate: キーチェーンアイテム clHandle: CL ハンドル ↓ 14 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_CL_CertGetFirstFieldValue 証明書から指定した OID に対応する属性を検索する。 CLHandle: CL ハンドル Cert: 証明書データ CertField: 証明書フィールド識別子 ResultsHandle: CSSM ハンドル NumberOfMatchedFields: Value: OID 一致したフィールド数 ↓ CSSM_CL_CertAbortQuery 証明書の検索を終了する。 CLHandle: CL ハンドル ResultsHandle: CSSM ハンドル ↓ SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 keychain: キーチェーン cspHandle: CSP ハンドル ↓ CSSM_CSP_CreateDigestContext CSSM で使用するダイジェストハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_SHA1, CSSM_ALGID_SHA256 より 署名検証に利用するダイジェストのアルゴリズム ID を指 定 NewContextHandle: ダイジェストハンドル ↓ CSSM_DigestDataInit ダイジェストの初期化 CCHandle: ダイジェストハンドル ↓ CSSM_DigestDataUpdate ダイジェスト値にデータをアップデート CCHandle: ダイジェストハンドル DataBufs: ハッシュ対象データ DataBufCount: 1 ↓ CSSM_DigestDataFinal ダイジェストの取得・終了処理 CCHandle: ダイジェストハンドル Digest: ダイジェスト格納領域アドレス ↓ CSSM_DeleteContext CSSM のハンドルを破棄 CCHandle: ダイジェストハンドル ↓ 15 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_Init CSSM を初期化 Version: CSSM バージョン Scope: CSSM_PRIVILEGE_SCOPE_NONE CallerGuid: GID KeyHierarchy: CSSM_KEY_HIERARCHY_NONE PvcPolicy: CSSM_PVC_NONE Reserved: NULL ↓ CSSM_ModuleLoad CSSM の CSP モジュールをロード ModuleGuid: &gGuidAppleCSP KeyHierarchy: CSSM_KEY_HIERARCHY_NONE AppNotifyCallback: NULL AppNotifyCallbackCtx): NULL ↓ CSSM_ModuleAttach CSSM の CSP モジュールを CSSM にアタッチ ModuleGuid: &gGuidAppleCSP Version: CSSM バージョン MemoryFuncs: CSSM_API_MEMORY_FUNCS 構造体 SubserviceID: 0 SubServiceType: CSSM_SERVICE_CSP AttachFlags: 0 KeyHierarchy: CSSM_KEY_HIERARCHY_NONE FunctionTable: NULL NumFunctionTable: 0 Reserved: NULL NewModuleHandle: CSP ハンドル ↓ CSSM_CSP_CreateSignatureContext CSSM で使用する署名生成ハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_RSA AccessCred: NULL Key: CSSM キー NewContextHandle: 署名検証ハンドル ↓ 16 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_VerifyData 署名検証 CCHandle: 署名検証ハンドル DataBufs: ダイジェスト DataBufCount: 1 DigestAlgorithm: CSSM_ALGID_SHA1, CSSM_ALGID_SHA256 より署名検証に利用するダイジェストアルゴリズムを指 定 Signature: 署名値格納領域アドレス ↓ CSSM_DeleteContext CSSM のコンテキストを破棄 CCHandle: 署名検証ハンドル ↓ IC カードから切断(3 IC カードから切断 を参照) 図 5-7 署名検証(検証対象データを渡すパターン) 10 繰り返し署名検証(検証対象データを渡すパターン) 「9 署名検証(検証対象データを渡すパターン) 」の網掛け部分を検証対象データの個数 分だけ繰り返して呼び出す。 11 署名検証(ハッシュ値を渡すパターン) 署名検証 (ハッシュ値を渡すパターン)のコーリングシーケンスを以下に示す (図 5-8) 。 IC カードへの接続(1 IC カードへの接続 を参照) ↓ IC カードへのログイン(2 IC カードへのログイン を参照) ↓ SecKeychainSearchCreateFromAttr 証明書のサーチリストを生成 ibutes keychainOrArray: キーチェーン itemClass: kSecCertificateItemClass attrList: NULL searchRef: サーチリスト格納領域アドレス ↓ SecKeychainSearchCopyNext サーチリストから次のキーチェーンアイテムを取得 searchRef: サーチリスト itemRef: キーチェーンアイテム格納領域アドレス ↓ 17 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 SecCertificateGetData キーチェーンアイテムから証明書データを取得 certificate: キーチェーンアイテム data: 証明書データ格納領域アドレス ↓ SecCertificateGetCLHandle キーチェーンアイテムから CL ハンドルを取得 certificate: キーチェーンアイテム clHandle: CL ハンドル ↓ CSSM_CL_CertGetFirstFieldValue 証明書から指定した OID に対応する属性を検索する。 CLHandle: CL ハンドル Cert: 証明書データ CertField: 証明書フィールド識別子 ResultsHandle: CSSM ハンドル NumberOfMatchedFields: Value: OID 一致したフィールド数 ↓ CSSM_CL_CertAbortQuery 証明書の検索を終了する。 CLHandle: CL ハンドル ResultsHandle: CSSM ハンドル ↓ SecKeychainGetCSPHandle キーチェーンに対応する CSP ハンドルを取得 keychain: キーチェーン cspHandle: CSP ハンドル ↓ CSSM_Init CSSM を初期化 Version: CSSM バージョン Scope: CSSM_PRIVILEGE_SCOPE_NONE CallerGuid: GID KeyHierarchy: CSSM_KEY_HIERARCHY_NONE PvcPolicy: CSSM_PVC_NONE Reserved: NULL ↓ CSSM_ModuleLoad CSSM の CSP モジュールをロード ModuleGuid: &gGuidAppleCSP KeyHierarchy: CSSM_KEY_HIERARCHY_NONE AppNotifyCallback: NULL AppNotifyCallbackCtx): NULL ↓ 18 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 CSSM_ModuleAttach CSSM の CSP モジュールを CSSM にアタッチ ModuleGuid: &gGuidAppleCSP Version: CSSM バージョン MemoryFuncs: CSSM_API_MEMORY_FUNCS 構造体 SubserviceID: 0 SubServiceType: CSSM_SERVICE_CSP AttachFlags: 0 KeyHierarchy: CSSM_KEY_HIERARCHY_NONE FunctionTable: NULL NumFunctionTable: 0 Reserved: NULL NewModuleHandle: CSP ハンドル ↓ CSSM_CSP_CreateSignatureContext CSSM で使用する署名生成ハンドルを取得 CSPHandle: CSP ハンドル AlgorithmID: CSSM_ALGID_RSA AccessCred: NULL Key: CSSM キー NewContextHandle: 署名検証ハンドル ↓ CSSM_VerifyData 署名検証 CCHandle: 署名検証ハンドル DataBufs: ダイジェスト DataBufCount: 1 DigestAlgorithm: CSSM_ALGID_SHA1, CSSM_ALGID_SHA256 より署名検証に利用するダイジェストアルゴリズムを指 定 Signature: 署名値格納領域アドレス ↓ CSSM_DeleteContext CSSM のコンテキストを破棄 CCHandle: 署名検証ハンドル ↓ IC カードから切断(3 IC カードから切断 を参照) 図 5-8 署名検証(ハッシュ値を渡すパターン) 12 繰り返し署名検証(ハッシュ値を渡すパターン) 「11 署名検証(ハッシュ値を渡すパターン)」の網掛け部分を署名検証対象データの個 19 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 数分だけ繰り返して呼び出す(すべての電子署名が同一の秘密鍵で生成された場合)。 20 API 仕様書【Mac OS X C 言語 IF 編】第 2.1 版 禁・無断転載 公的個人認証サービス 利用者クライアントソフト API 仕様書 【Mac OS X C 言語 IF 編】 第 2.1 版 (注意事項) ※利用者クライアントソフトの著作権は、総務省、公的個人認証サービス共通基盤事業運用会議 が保有しており、国際著作権条約及び日本国の著作権関連法令によって保護されています。 ※JPKI 利用者ソフトの利用に当たっては、次に掲げる行為を禁止します。 (1) 利用者クライアントソフトを電子申請・届出等の行政手続等以外の目的で利用するこ と。 (2) 利用者クライアントソフトに対し、総務省、公的個人認証サービス共通基盤事業運用 会議に許可なく改造等を行うこと。 ※総務省、公的個人認証サービス共通基盤事業運用会議、地方公共団体情報システム機構は、利 用者が利用者クライアントソフトを利用したことにより発生した利用者の損害及び利用者が 第三者に与えた損害について、一切の責任を負いません。 ※商標については次の通りです。 (1) Microsoft Windows および Internet Explorer は、米国 Microsoft Corporation の米国 およびその他の国における登録商標または商標です。 (2) Macintosh、Mac、MacOS、OS X および Safari は、米国およびその他の国で登録されて いる Apple Inc.の登録商標です。 (3) その他、記載されている会社名、製品名等は、各社の登録商標または商標です。 21
© Copyright 2024