ＪＡＨＩＳ標準 ２４－００２

ＪＡＨＩＳ
HPKI 対応 IC カードガイド
ライン Ver. 3.1

２０２４年４月
一般社団法人 保健医療福祉情報システム工業会
医療システム部会 セキュリティ委員会
セキュアトークン WG

ＪＡＨＩＳ

HPKI 対応 IC カードガイドライン Ver.3.1
ま

え

が

き

本ガイドラインは保健医療福祉分野における電子署名及び電子認証を行うに際して利用される
PKI の機能を搭載した IC カード及び IC カードの利用環境に対する要求事項を定めたものである。
保健医療福祉分野においては、平成 17 年 3 月に厚生労働省により「医療情報システムの安全管理に関するガイドライン」（以下、「安全管理のガイドライン」と言う）が策定され、継続的に改定が行われている。
「安全管理のガイドライン」C 項最低限のガイドラインとして、6.11 章において相手先の識別と認証において PKI を利用出来ること、6.12 章において保健医療福祉分野 PKI
認証局又は認定特定認証事業者等の発行する電子証明書を用いて電子署名を施すことが記載されている。また、平成 17 年 4 月には、同省にて「保健医療福祉分野 PKI 認証局 証明書ポリシ」が策定され、国際標準に準拠した保健医療福祉分野向けの PKI（HPKI）証明書の発行ルールが確定した。さらに平成 21 年度には厚生労働省の医療情報ネットワーク基盤検討会において「保健医療福祉分野 PKI 認証局認証用（人）証明書ポリシ」の策定が行われた。これにより、署名用に続き、認証用についても HPKI 証明書の発行が行えることとなった。
JAHIS は、産業界の業界団体としてこれら国の施策に協力するとともに普及促進を図るための相互運用性の確保を図ることが重要な役割であることから、2008 年 6 月に電子署名用の IC カー
ドに関する第 1 版を発行し、2010 年 6 月に第 2 版として電子認証用の IC カードに関する記載を追加した。本 Ver.3.1 はタイトルのバージョン表記を他の JAHIS 標準に合わせた上で、第 1 版、第 2 版を統合し、最新の動向を踏まえて追加改定を行ったものである。また本ガイドラインは、制定された「JAHIS へルスケア PKI を利用した医療文書に対する電子署名規格 Ver.2.0」及び「JAHIS HPKI 電子認証ガイドライン V1.1」とともに利用されることを前提としており、同規格の下で利用される IC カードの相互運用性の仕様も定めている。これらのことから、本ガイドラ
インの主な対象読者は IC カード及び PKI のライブラリ開発を担当するエンジニアとなっている。
本ガイドラインは、JAHIS 会員各社の意見を集約し、「JAHIS 標準」の一つとして発行したものである。したがって、会員各社がシステムの開発・更新に当たって、本ガイドラインに基づいた開発・改良を行い、本ガイドラインに準拠していることをその製品のカタログ・仕様書等に示し、さらにその製品の使用においてユーザが理解すべき内容を説明する場合などに使われることを期待している。
なお、本ガイドラインで扱う電子署名およびシステムの要件は、参照規格や技術動向にあわせて変化する可能性がある。JAHIS としても継続的に本ガイドラインのメンテナンスを重ねてゆく所存であるが、本ガイドラインの利用者はこのことにも留意されたい。
本ガイドラインが、HPKI の普及・推進に多少とも貢献できれば幸いである。
２０２４年４月
一般社団法人 保健医療福祉情報システム工業会
医療システム部会 セキュリティ委員会 セキュアトークン WG© JAHIS 2024
i

＜＜

告知事項

＞＞

本ガイドラインは関連団体の所属の有無に関わらず、ガイドラインの引用を明示することで自由に使用することができるものとします。ただし一部の改変を伴う場合は個々の責任において行い、本ガイドラインに準拠する旨を表現することは厳禁するものとします。
本ガイドラインならびに本ガイドラインに基づいたシステムの導入・運用についてのあらゆる障害や損害について、本ガイドライン作成者は何らの責任を負わないものとします。ただし、関連団体所属の正規の資格者は本ガイドラインについての疑義を作成者に申し入れることができ、作成者はこれに誠意をもって協議するものとします。

© JAHIS 2024
ii

目

次

1.

適用範囲 .................................................................................................................................... 12.

引用規格・引用文献 ................................................................................................................ 1

3.

用語の定義 ................................................................................................................................ 2

4.

HPKI 用 IC カードの機能 ........................................................................................................ 3
4.1.
4.2.
4.3.
4.4.

5.

IC カードの種類 ................................................................................................................ 3
IC カードアプリケーションの構成 ................................................................................... 3
HPKI 用 IC カードに要求される機能 ............................................................................... 4
IC カードのセキュリティ機能........................................................................................... 5相互運用性確保のための仕様 ................................................................................................... 7
5.1.
5.2.
5.3.
5.4.

相互運用性確保 .................................................................................................................. 7
アプリケーションプログラムとのインタフェース ..........................................................11
PKI アプリケーションの構造.......................................................................................... 36
PKI アプリケーションのコマンド仕様 ........................................................................... 38

附属書Ａ（参考）PKI カードアプリケーション利用のシーケンス ............................................. 40
A.1
A.2
A.3
A.4
A.5
A.6

概要.................................................................................................................................... 40
利用シーケンスに関する前提条件及び概要...................................................................... 40
IC カードの利用のシーケンス .......................................................................................... 42
PKCS #11 利用のシーケンス ............................................................................................ 48
CAPI 利用のシーケンス.................................................................................................... 54
CNG 利用のシーケンス .................................................................................................... 57

附属書 B（参考）PKI アプリケーションの構造例 ....................................................................... 60
B.1
B.2
B.3
B.4

概要.................................................................................................................................... 60
ファイル構造 ..................................................................................................................... 60
PKI アプリケーションの識別（AID） ............................................................................. 61
各 EF の内容 ..................................................................................................................... 61

附属書 C（参考）PKI アプリケーション利用のコマンド ............................................................ 64
C.1
C.2
C.3
C.4
C.5
C.6

コマンド一覧 ..................................................................................................................... 64
SELECT ............................................................................................................................ 65
VERIFY............................................................................................................................. 66
READ BINARY ................................................................................................................ 67
MANAGE SECURITY ENVIRONMENT ...................................................................... 69
PERFORM SECURITY OPERATION............................................................................ 69

附属書 D（参考）IC カードリーダライタとのインタフェース.................................................... 71
付録―１．参考文献 ........................................................................................................................ 73
付録―２．作成者名簿 .................................................................................................................... 74© JAHIS 2024iii

1. 適用範囲
本ガイドラインでは、電子署名および電子認証を目的とした HPKI で使用される IC カード、及び IC カードの利用環境に対する要求事項を定める。
－ IC カード機能・仕様－ IC カードのセキュリティ要件－ IC カードを利用する端末の機能－ IC カードを利用する端末のセキュリティ要件－ 相互運用性を確保するための IC カード内の PKI アプリケーションの仕様－ 相互運用性を確保するための IC カードを利用する際のインタフェースの仕様
なお、IC カードの発行及び私有鍵（秘密鍵）又は証明書の IC カードへの登録については本ガイドラインのスコープ外とする。

2. 引用規格・引用文献
厚生労働省・保健医療福祉分野 PKI 認証局 署名用証明書ポリシ 1.91 版（令和 5 年 12 月）
https://www.mhlw.go.jp/content/10808000/001221669.pdf
厚生労働省・保健医療福祉分野 PKI 認証局認証用（人）証明書ポリシ 1.81 版（令和 5 年 12 月）
https://www.mhlw.go.jp/content/10808000/001221670.pdf
厚生労働省・保健医療福祉分野 PKI 認証局認証用（組織）証明書ポリシ 1.1 版（平成 22 年 3 月）
https://www.mhlw.go.jp/content/000466966.pdf
JIS X 19790:2015 セキュリティ技術 – 暗号モジュールのセキュリティ要求事項
ISO/IEC 7816-4:2020 Identification cards — Integrated circuit cards — Part 4: Organization, security
and commands for interchange
ISO/IEC 7816-8:2021 Identification cards — Integrated circuit cards — Part 8: Commands andmechanisms for security operations
ISO/IEC 7816-15:2016 Identification cards — Integrated circuit cards — Part 15: Cryptographic
information application
PKCS#11 V2.20 1
Crypto API
https://learn.microsoft.com/ja-jp/windows/win32/seccrypto/cryptography-portal
Cryptography API: Next Generation (CNG)
https://learn.microsoft.com/ja-jp/windows/win32/api/ncrypt/
1 文書は JAHIS 内本ガイドラインのページから入手可能である。

© JAHIS 2024
1

3. 用語の定義
DF (dedicated file)
ファイル制御情報と任意選択として割付け利用可能なメモリとを含んでいる構造。
EF (elementary file)
同一ファイル識別子を共有するデータオブジェクト、レコード、又はデータ単位の集合。
HPKI (Healthcare Public Key Infrastructure)
保健医療福祉分野のために構築された公開鍵認証基盤で、医療従事者の資格等の属性を証明する機能を有する。
IC カード
１つ以上の IC チップを搭載したカード。形状は ISO/IEC 7810 によって規定される。
IEF (internal elementary file)
カードが解釈し実行するテータを格納する EF。
PIN (Personal Identification Number)
一般には特定の機能を使用する際に認証を得るためにエンティティを確認するために入力される
数字の文字列を指すが、本ガイドラインではパスワードと同じく数字以外の文字をも含んだ文字列を指す。
PKI (Public Key Infrastructure)
エンティティの信頼性に関して、信頼できる第三者が公開鍵に対して電子署名を付与した公開鍵証明書によって保証する非対称暗号技術を応用した認証基盤。
WEF（working elementary file）
カードが内容を解釈しない外部データを格納する EF。
オフセット
データ単位を提供する EF でデータ単位の相対位置を示す数値。
公開鍵
エンティティの非対称鍵対のうち、公にされて使用される鍵。
私有鍵
エンティティの非対称鍵対のうち、そのエンティティにだけによって使用されるべき鍵。
証明書
人等のエンティティとその関連する公開鍵を関連付けるデジタル署名によって保護された文書。
認証局
公開鍵認証基盤で、エンティティに対して公開鍵証明書を発行することによってエンティティの存在を保証する組織体。
ハッシュ値
あるデータが与えられた場合に、ハッシュ関数（暗号的に安全性の確立された一方向性関数）によって得られたそのデータを代表する数値。
ファイル識別子 (file identifier)
ファイルを指定するために使用される 2 バイトのデータ要素。

© JAHIS 2024
2

4. HPKI 用 IC カードの機能
4.1. IC カードの種類
4.1.1. ネイティブ型 IC カード
ネイティブ OS を搭載する IC カードをネイティブ型 IC カードと呼ぶ。ネイティブ OS とは、IC カー
ド内のすべてのソフトウェアが IC チップに依存するプログラムコードで構成される OS をいう。また、ネ
イティブ OS は、外部ノードから IC カードに送られるすべてのコマンドを、OS レベルで解釈実行することを特徴とする。また、そのため実行処理速度が速いことが特徴である。通常、固定メモリのネイティブ型
IC カードはカードが発行された後は、アプリケーション機能の追加、変更および削除が困難であるが、メモリをセクタ管理するものには可能なものが存在する。しかし、このタイプは次に述べるプラットフォーム型
IC カードの範疇に含まれるものとする。

4.1.2. プラットフォーム型 IC カード
プラットフォームを搭載する IC カードを、プラットフォーム型 IC カードと呼ぶ。プラットフォームとは、カードアプリケーション（外部ノードから IC カードに送られるコマンドを解釈・実行するアプリケー
ションソフトウェア）をダウンロードすることが可能な IC カードに搭載される OS を含むソフトウェアをいう。また、プラットフォームは、IC カード内にダウンロードされたカードアプリケーションを SELECTFILE コマンドによって選択、起動し、以降外部ノードから IC カードに送られるコマンドを、他のカード
アプリケーションを選択する場合を除き当該カードアプリケーションで処理することを特徴とする。
代表的なプラットフォームとして、JavaCard、MULTOS がある。JavaCard、MULTOS のようにカー
ドアプリケーションが IC カード内の IC チップに依存しないプログラムコードによって構成される場合もある。このような場合、プラットフォームは、IC チップに依存しないプログラムコードを、IC チップに依存するプログラムコードに変換する仮想マシン（VM）を有する。さらに広義には、IC カード内のすべてのソフトウェアが IC チップに依存するプログラムコードで構成される場合であっても、カードアプリケーシ
ョンをダウンロード可能であり、SELECT FILE コマンドでカードアプリケーションを選択、起動し、以降外部ノードからのコマンドをカードアプリケーションが処理することを特徴とする機能を実現するソフトウ
ェアの場合、プラットフォームと呼ぶ。
プラットフォーム型 IC カードは カードが発行された後でも、アプリケーション機能がプログラムのダウンロードによって追加、変更が可能であり、不必要になれば削除が可能である。

4.2. IC カードアプリケーションの構成
4.2.1. シングルアプリケーションカード
一つの IC カードの CPU 上で１種類のサービスしか行わないカードをシングルアプリケーションカード
という。初期の交通系の IC カード等がこれに該当する。現在の金融系の IC カードは、IC キャッシュカー
ド、デビッドカード、静脈認証など複数のアプリケーションが搭載されているので、この範疇には属さない。

4.2.2. マルチアプリケーションカード
マルチアプリケーションカードは 1 枚のカード上で複数のサービスを提供することが可能なカードのことを意味し、発行後にアプリケーションの追加、削除が可能なモデルも存在する。そのため、複数のサービス
提供者によって独自のアプリケーションを追加、削除する利用シーケンスで特に活用される。

© JAHIS 20243

4.3. HPKI 用 IC カードに要求される機能
4.3.1. 私有鍵保存機能
私有鍵（Private Key）は公開鍵と対になる鍵である。私有鍵は、その加入者によって秘密保持すべき情報であり、公開せず、他人に漏れないように鍵の所有者だけが管理する。認証局は、いかなる場合でもこれらの鍵へのアクセス手段を提供しない。
（HPKI 署名用証明書ポリシ、HPKI 認証用（人）証明書ポリシ、HPKI
認証用（組織）証明書ポリシ 9.3.1）
署名のために使用される私有鍵は、加入者本人が選択した場合、または、法律によって必要とされる場合を除き、預託されないものとする。署名目的の私有鍵の回復は行わない。
（HPKI 署名用証明書ポリシ 4.12）
電子認証のために使用される私有鍵は、特に法律によって必要とされる場合を除き、預託及び回復を行わない。
（HPKI 認証用（人）証明書ポリシ、HPKI 認証用（組織）証明書ポリシ 4.12）
加入者の私有鍵が認証局で生成される場合は、セキュリティが確保された環境で IC カードへの書き込みを行う、又は IETF RFC 6712 及び RFC 4210「証明書管理プロトコル」に従ってオンライントランザクシ
ョンで、又は同様に安全な方法によって、加入者に引き渡されるものとする。認証局はオリジナルの私有鍵を引き渡した後は私有鍵のコピーを所有していないことの証明ができるものとする。
（HPKI 署名用証明書
ポリシ、HPKI 認証用（人）証明書ポリシ、HPKI 認証用（組織）証明書ポリシ 6.1.2）この場合、生成された私有鍵は、内部基礎ファイル（IEF）に格納される。
加入者の私有鍵が IC カード内で生成される場合は、GENERATE ASYMMETRIC KEY PAIR コマンドによりカード内で生成し、内部基礎ファイル（IEF）に格納する。 (ISO/IEC 7816-8)
私有鍵はハッシュ値を入力とした署名演算に使用される。

4.3.2. 公開鍵証明書保存機能
加入者の私有鍵が認証局で生成される場合及びIC カード内で生成される場合共に必要となる機能である。
公開鍵証明書は WEF に格納され、公開鍵の検証時には IC カードから読み出される。

4.3.3. 私有鍵生成及び公開鍵エクスポート機能（オプション）
GENERATE ASYMMETRIC KEY PAIR コマンドにより， IC カード内で鍵ペアを生成し、私有鍵は内部基礎ファイル（IEF）に格納される。また、公開鍵証明書を CA 局へ要求するために GENERATEASYMMETRIC KEY PAIR コマンドにより、既に IC カード内で生成された公開鍵にアクセスする。
(ISO/IEC 7816-8)。認証局の要件により加入者の私有鍵が IC カード内での生成を求められる場合は、必須の機能となる。

4.3.4. 私有鍵インポート機能（オプション）
IC カード内で鍵の生成が望ましいが必須ではない。外部で鍵ペアを生成した場合は私有鍵を IEF へ、公開鍵証明書を WEF へインポートする。認証局の要件により加入者の私有鍵が認証局で生成される場合は、必須の機能となる。

4.3.5. 公開鍵証明書エクスポート機能
IC カード内に保存された公開鍵証明書は公開鍵の検証のために署名に付属させる場合等に WEF を指定して読み出す。

4.3.6. 署名機能
PERFORM SECURITY OPERATION コマンドの COMPUTE DIGITAL SIGNATURE 処理により，デジタル署名の計算を行う。
署名計算の中で使用する私有鍵を指定し，ハッシュ値が IC カードに入力される。

© JAHIS 2024
4

4.3.7. 認証機能
PERFORM SECURITY OPERATION コマンドの COMPUTE DIGITAL SIGNATURE 処理により，デジタル署名の計算を行う。
署名計算の中で使用する私有鍵を指定し，チャレンジ値が IC カードに入力される。

4.3.8. 私有鍵活性化機能
私有鍵を署名などの運用に使用することができる状態にすることを活性化（Activate）という。私有鍵の活性化データが認証局で生成される場合は、活性化データが加入者に伝えられた後は、認証局においては完全に破棄し、保管しないものとする。また、伝えられた活性化データは、認証局で定められた規定に従い、加入者により安全に保護するものとする。私有鍵の活性化データを加入者が生成する場合は、認証局で定められた規定に従い、加入者により安全に保護するものとする。
（HPKI 証明書ポリシより）
私有鍵の活性化の手段としては、加入者による利用者認証、生体認証、端末が使用する IC カードがドメインで認められたものかを IC カードが認証する端末認証などがあるが、本ガイドラインでは、PIN 照合による利用者認証のみを規定している。
加入者確認の本人確認の為の認証鍵と署名鍵を同じものを用いた場合、署名時のハッシュ値を認証時にチャレンジコードとして IC カードに送り込むとレスポンスコードとして署名された値が自動的に送付されてしまう。そのため、認証鍵と署名鍵は分けなくてはならない。署名は本来、署名する内容に対して確認し意識して署名をするもので、そのために署名に対しては必ず、加入者の意思確認のための確認として私有鍵の活性化ステップを入れなくてはならない。

4.4. IC カードのセキュリティ機能
4.4.1. 概要
IC カード及び IC カードに搭載されたアプリケーションの安全性を 4.4.2 で説明し、IC カード及びアプリ
ケーションを安全に利用するために持つセキュリティ機能を 4.4.3 で説明する。

4.4.2. アプリケーションの安全性
１) 偽造・複製が困難
耐タンパ性によってカードに内蔵された IC チップ上の情報を保護している。具体的には、以下のような複製を行うための情報取得が困難な技術的な対策によって保護している。
・樹脂を封入してカードからチップを取り出しするのを難しくする
・IC チップを多層化することによって顕微鏡での観察を困難にする
・異常に利用されたことを検出するセンサーを組み込み、異常を検知するとデータを消去するなど電気的な解析を困難にする・情報を記録するメモリをランダムに配置することで、再現を困難にする・消費電力や電圧の変化からのデータ解析を防ぐため、消費電力や計算時間等を均一あるいはランダムにする２) 不正使用が困難
暗証番号・パスワードあるいは暗号鍵の確認によって、正当性を IC カードが確認したアクセスだけが許可される仕組みを持っている。アクセス制御は、アプリケーション単位、ファイル単位に設定することが可
能で、読出し・書込み・書換えなどの操作ごとに異なるアクセス権を設定することが可能となっている。
暗証番号・パスワードおよび暗号鍵は、値を設定できるが読み出すことのできない情報として IC カード
内で管理されるので、カード製造者や管理者であっても不正な利用によってその値を取得することはできな© JAHIS 20245

い。暗証番号・パスワードあるいは暗号鍵の確認は、あらかじめ設定された回数の照合や認証に失敗すると鍵の利用を自動的に停止（閉塞）することが可能なので、不正な利用を多数回繰り返すことも難しい仕組みを持っている。
３) アプリケーションの独立性
複数のアプリケーションが 1 枚の IC カード上に存在する場合、各々のアプリケーション内のファイルや鍵、セキュリティ属性は独立である。そのため、あるアプリケーション内のデータへの操作が別のアプリケーションのデータに影響を与えることはない。また、あるアプリケーション内の認証結果によるセキュリテ
ィ状態が、別のアプリケーションに引き継がれることはない。そのため、あるアプリケーションへの操作が別のアプリケーションに影響を与えることはなく、それぞれのアプリケーションがあたかも独立な IC カー
ドであるように安全性を保ったまま動作させることが可能である。

4.4.3. カードアプリケーションに要求されるセキュリティ機能
１) 端末認証（外部認証機能）利用される端末の正当性を外部認証の機能によって確認する機能。 端末が鍵を知っていることによる端末 の 正 当 性 を 確 認 す る 。 例 え ば 、 GET CHALLENGE コ マ ン ド と 、 そ れ に 続 く EXTERNALAUTHENTICATE コマンドを使用する。オンライン接続の端末認証に応用した場合、接続先のサーバ認証にも利用できる。
（注）２) 利用者認証
A） PIN の照合により PIN を知っていることによる利用者の確認。例えば VERIFY コマンドを使用する。
B） 鍵を知っている（持っている）ことによる利用者の確認。例えば、GET CHALLENGE コマンドと、それに続く EXTERNAL AUTHENTICATE コマンドを使用する。
（注）３) セキュアメッセージング
コマンド及びその応答に対してその一部又は全体を暗号によって保護するための方法。コマンド実行のとき通信されるデータを暗号によって保護する。
データの隠蔽機能と完全性チェック機能を持つことが出来る。
端末と IC カード間での通信の安全性が保証されない場合に用いられる通信の安全性確保の機能である。
（注）４) 内部認証
カード（アプリケーション）の正当性を端末が認証するための機能である。接続端末装置から送られるチャレンジを、INTERNAL AUTHENTICATE コマンドにより IC カード内に格納されている内部認証鍵と計算しその結果出力を端末が判断し、IC カードの正当性を確認する。オンライン接続の端末認証に応用した場
合、サーバが IC カードの正当性を認証する為に利用できる。
（注）
注：今回の署名及び認証機能の相互運用性確保の範囲では、利用シーケンスに含まない。利用した場合には、相互運用の妨げになる可能性があることに留意する必要がある。

© JAHIS 2024
6

5. 相互運用性確保のための仕様
5.1. 相互運用性確保
5.1.1. 相互運用性を確保する範囲
本ガイドラインが目標とする相互運用性の確保は、異なるHPKI 認証局が発行したIC カードを用いても、クライアントの電子署名アプリケーションが電子署名あるいは電子認証を実行可能とすることにある。図１にその概念を示す。

医療情報アプリケーション

HPKI アプリケーション

カードリーダ

事業者 A

事業者Ｂ

PKI カード

PKI カード

図１ 相互運用の範囲
このような相互運用性を検討する場合、図２に示す通りクライアント側のソフトウェアを以下の層に分けて検討する必要がある。
1) HPKI アプリケーション層
2) PKI 機能を提供する汎用ミドルウェア層
3) IC カードの入出力を提供する汎用 IC カードリーダインターフェース層© JAHIS 2024
7

医療アプリケーション
HPKI アプリケーション層（第１層：電子署名モジュール等）
PKI ミドルウェア層（第２層：PKCS#11, Crypto API 等）
カードリーダインタフェース層（第３層：PC/SC 等）

ク
ラ
イ
ア
ン
ト
側
ソ
フ
ト
ウ
ェ
ア

伝送 （USB 等）
カードリーダ
伝送（接触/非接触）
7816-3、7816-12、14443 等
PKI カードアプリケーション（7816-15 のデータモデル）（7816-4 及び 7816-8 コマンド）
IC カード

図２ PKI カードアプリケーションの基本構造
第 1 層は HPKI を利用する署名などの機能を提供する層で、本ガイドラインの対象外となる。HPKI サー
ビスを提供することになる。
第 2 層は、HPKI に特化しない汎用的な PKI の機能を提供する層で、PKCS #11 あるいは Crypto API（CAPI）など、暗号機能を提供するモジュールが相当する。具体的には、IC カード内の PKI カードアプリ
ケーションのデータモデルに従い、要求された PKI 機能を実現するカードコマンドに変換することによってIC カード内の PKI カードアプリケーションの機能を利用するための機能を提供する。PKI カードアプリケ
ーションのデータモデルに関連する標準が ISO/IEC 7816-15 であり、カードコマンドに関連する標準がISO/IEC 7816-4 及び ISO/IEC 7816-8 となる。第 2 層に相当するモジュールの機能とインタフェースを規定することによって、異なる HPKI 認証局が発行した IC カードであっても電子署名及び電子認証の機能を実行することが可能となり、相互運用性を確保したことになる。特に各 HPKI 認証局が提供する PKI カー
ドアプリケーションの相互運用性を高めるためには、PKI カードアプリケーションのデータモデル、それを利用するためのカードコマンドの相互運用性を高める必要がある。これまでの多くの PKI 環境では、発行者、仕様の異なる IC カードによって同じ機能を提供する必要性がなかったため、この部分の相互運用性が考慮されておらず、問題を生じることがあった。

© JAHIS 2024
8

第 3 層は、汎用的な IC カードリーダとの入出力を実現する層で、第 2 層から受けた IC カードに対する命令（コマンド）を、IC カードリーダを通じて IC カードに伝える機能を提供する。プロトコルのハンドリン
グ、IC カード及びカードリーダの制御などが含まれる。Windows では、PC/SC と呼ばれるモジュールがこの層に相当する。第 3 層のモジュールの機能とインタフェースの規定によって、対象となる IC カードとカードリーダの物理的な違い(例えば、接点付きと非接触など)によらない、汎用的な IC カード入出力を実現することができる。これによって、異なるインタフェースの IC カードや異なるカードリーダを利用した場合
でも、IC カードと IC カード内の PKI カードアプリケーションに対して同じ入出力を実現することができる。
本ガイドラインでは、第 2 層のインタフェースを 5.2 に記述する。また、第 2 層で利用する IC カード内の
PKI カードアプリケーションのデータモデルを 5.3 に、カードコマンドを 5.4 で説明する。

5.1.2. 相互運用性を確保するための条件
本ガイドラインでは、異なる HPKI 認証局が発行した IC カードの PKI カードアプリケーションでの相互運用性確保のための仕様を以下の条件で示すものとする。
１） 相互運用の範囲
IC カードは、発行、個人向け初期化、利用、変更、廃棄などのライフサイクルのいずれかの状態に属する。
本ガイドラインの相互運用性は、利用の部分、特に電子署名および電子認証を行う部分のみの相互運用を範囲とする。
IC カードには、電子署名用及び電子認証用の PKI カードアプリケーションが搭載されるものとする。
２） 証明書の適用範囲
HPKI 認証局が発行した証明書で、証明書の適用範囲は認証局の証明書ポリシ（CP）に従ったものとする。
適用範囲外での利用（例：スマートカードログオン）に関しては、動作を保証しない。
３） 複数の証明書保持
電子署名用 PKI カードアプリケーション及び電子認証用 PKI カードアプリケーションには、それぞれのエンドエンティティの証明書だけではなく、HPKI 認証局の証明書（複数の場合がある）、厚労省の HPKI ルート認証局の自己署名証明書を含めた証明書が格納できる。
４） 複数の資格への対応
複数の資格を持つ医療従事者は、業務によって証明書を使い分ける必要がある。本ガイドラインでは、１枚の証明書には１つの hcRole（保健医療福祉分野での役割、資格）が格納されているものとする。複数の資格を使い分ける際には、複数の PKI カードアプリケーションによって、解決するものとする。当面は、１枚の IC カードには１資格に対応した PKI カードアプリケーションが搭載されると想定する。将来は複数の
hcRole を記述した証明書が発行される可能性、あるいは複数の資格を持つエンドエンティティに対してそれ
ぞれの hcRole を記述した複数の証明書を１枚の IC カードに格納する可能性はあるが、本ガイドラインの相互運用性の範囲には含まないものとする。
５） ミドルウェアの HPKI 対応
HPKI の証明書には hcRole が記述されているが、ミドルウェア層では hcRole を用いた HPKI 独自の処理は行わない。必要な場合には、HPKI アプリケーション層あるいは医療アプリケーションで行うものとする。
６） IC カードの利用環境
カードの利用環境は、「医療情報システムの安全管理に関するガイドライン」などに沿って管理された医療機関が管理する端末を想定する。悪意をもったソフトウェアなどが存在せず、安全に稼動するよう管理されているものとする。そのため、IC カードと利用する端末の間の認証、通信の安全性を確保するセキュアメッ
セージングなどは本ガイドラインの範囲外とする。
７） 対象とする IC カード
利用されるカードは、4.1 で示す IC カードの種類があるが、特に限定しない。発行時の構成を変えない IC© JAHIS 20249

カード、発行後にアプリケーションを追加可能な IC カード、接点付き IC カード、非接触 IC カード等、いずれもが含まれるものとする。
８） 標準準拠
長期に渡る相互運用性を確保するため、既存の JIS あるいは ISO に準拠した仕様とする。
９） 私有鍵と証明書のアクセス権
電子認証の際には、初回の PIN 入力によりカード保有者認証を行うものとする。電子署名の際には、毎回PIN 入力によるカード保有者認証を行うものとする。PIN の変更は、相互運用性を確保する範疇には含めないものとする。証明書の読み出しは、アクセス制御を行わないものとする。
１０） パスワード（PIN）の入力
アプリケーションの性質により、電子署名アプリケーション側で PIN を保持し、連続した署名実施の際にユーザ側の PIN 入力を省略することは許容する。

5.1.3. 電子署名カードアプリケーションと電子認証カードアプリケーションの共存
１つの認証事業者が電子署名用及び電子認証用の両方の証明書を発行する場合、1 枚の IC カードに２つのアプリケーションを搭載することが可能となる。その場合の基本的な構造を図３に示す。

医療情報アプリケーション

HPKI アプリケーション
電子署名用ドライバ

電子認証用ドライバ

カードリーダ

電子署名用

電子認証用

PKI カードアプ

PKI カードア

リケーション

プリケーション

図３ 電子署名用アプリケーションと電子認証用アプリケーションの共存
電子署名用の PKI アプリケーションは、電子署名用のドライバを通じて利用され、電子認証用の PKI ア
プリケーションは、電子認証用のドライバを通じて利用されるものとする。

© JAHIS 202410

5.2. アプリケーションプログラムとのインタフェース
5.2.1. 概要
本ガイドラインでは、PKCS #11 インタフェース、Crypto API インタフェース、及び Cryptography
API: Next Generation の 3 種類のインタフェースを想定する。これらのインタフェースを実装する場合に、それぞれが満たさなければならない最小限の機能を 5.2.2、5.2.3、及び 5.2.4 で説明する。
共通の条件は、以下の通りとする。
・ マルチスレッドから 1 枚のカードへの同時アクセスは想定しない。複数のスレッドからアクセスする必要がある場合には、実行条件に注意する必要がある。
・ 署名の際には、インタフェースレベルでは毎回 PIN を設定することを推奨する。但し、アプリケーシ
ョン側で PIN を保持して利用することは妨げないので、アプリケーションの性質によって決定する必要がある。
・ PIN に設定されるパスワードの文字セットは、ASCII とする（CryptoAPI の制限による）。

5.2.2. PKCS #11 インタフェース
PKCS #11 のライブラリ識別名の一覧を表１に示す。

No
1
2

種類
電子署名用
電子認証用

表１ PKCS #11 のライブラリ識別名
ライブラリ識別名
HpkiSigP11 （例：HpkiSigP11_abc.dll）
HpkiAuthP11 （例：HpkiAuthP11_aab.dll）

相互運用を実現するために必要となる、PKCS #11 のサポートすべき機能の一覧を表２に示す。
表２ PKCS #11 の関数一覧© JAHIS 2024
11

No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

API 名
C_GetFunctionList
C_Initialize
C_Finalize
C_GetInfo
C_GetSlotList
C_GetSlotInfo
C_GetTokenInfo
C_GetMechanismList
C_GetMechanismInfo
C_OpenSession
C_CloseSession
C_CloseAllSessions
C_GetSessionInfo
C_Login
C_Logout
C_FindObjectsInit
C_FindObjects
C_FindObjectsFinal
C_GetAttributeValue
C_SignInit
C_Sign概要
関数ポインタリストを取得する。
PKCS #11 ライブラリを初期化する。
PKCS #11 ライブラリを終了する。
ライブラリ情報を取得する。
スロットリストを取得する。
スロット情報を取得する。
トークン情報を取得する。
サポートメカニズム（アルゴリズム）を取得する。
メカニズム（アルゴリズム)情報を返す。
セッションを確立する。
セッションを切断する。
すべてのセッションを切断する。
セッション状態を取得する。
トークンをログイン状態にする。
トークンをログアウト状態にする。
オブジェクトの検索を開始する。
オブジェクトの検索を行う。
オブジェクトの検索を終了する。
オブジェクトの属性値を取得する。
署名処理を初期化する。
データに署名を行う。

サポートすべき API の仕様は以下の通りとなる。なお、戻り値および構造体に関しては、PKCS #11 を参照のこと。
(1) C_GetFunctionList
API 名
C_GetFunctionList
概要
関数ポインタリストを取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetFunctionList) (フェース
CK_FUNCTION_LIST_PTR_PTR ppFunctionList);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
CK_FUNCTION_LIST_PTR_PTR OUT 関数アドレスリストポインタ(2) C_Initialize
API 名
C_Initialize
概要
PKCS #11 ライブラリを初期化する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_Initialize) (フェース
CK_VOID_PTR pInitArgs);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
NULL ポインタを指定
CK_VOID_PTR
IN© JAHIS 202412

(3) C_Finalize
API 名
C_Finalize
概要
PKCS #11 ライブラリを終了する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_Finalize) (フェース
CK_VOID_PTR pReserved);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
NULL
ポインタを指定CK_VOID_PTRIN(4) C_GetInfo
API 名
C_GetInfo
概要
ライブラリ情報を取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetInfo) (フェース
CK_INFO_PTR pInfo);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
CK_INFO_PTR
IN/OUT ライブラリ情報ポインタ
備考
取得可能なライブラリ情報は以下の通り。
CK_INFO::cryptokiVersion:
PKCS #11 規格バージョン: 2.20
CK_INFO::manufacturerID:
ライブラリ製造者名:
CK_INFO::flags:
ビットフラグ: 0
CK_INFO::libraryDescription:
ライブラリ記述文:「HPKI 3.0」注CK_INFO::libraryVersion:
ライブラリバージョン
注：旧版に対応したライブラリからは「HPKI2.0」が返されるが、後方互換性のためエラーとしないこと。
(5) C_GetSlotList
API 名
C_GetSlotList
概要
スロットリストを取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetSlotList) (フェース
CK_BBOOL
tokenPresent,
CK_SLOT_ID_PTR
pSlotList,
CK_ULONG_PTR
pulCount);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)型
I/O© JAHIS 2024
13

内容

引数

CK_BBOOLIN

CK_SLOT_ID_PTR
CK_ULONG_PTR

IN/OUT
IN/OUT

TRUE: カード有りのスロットリス
トを返す
FALSE: 接続されているすべてのスロットリストを返す
スロット ID リストポインタ
スロット ID リスト件数(6) C_GetSlotInfo
API 名
C_GetSlotInfo
概要
スロット情報を取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetSlotInfo) (フェース
CK_SLOT_ID
slotID,
CK_SLOT_INFO_PTR pInfo);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
スロット ID
CK_SLOT_ID
IN
CK_SLOT_INFO_PTR
IN/OUT スロット情報ポインタ
備考
取得可能なスロット情報は以下の通り。
CK_SLOT_INFO::slotDescription:
スロット記述文: PC/SC リーダ名称
CK_SLOT_INFO::manufacturerID:
スロット製造者名: なし(32 バイトの空白文字列)
CK_SLOT_INFO::flags:
ビットフラグ: カード有無(カードがあれば CKF_TOKEN_PRESENT)CK_SLOT_INFO::hardwareVersion:
スロットハードウェアバージョン: 0.0
CK_SLOT_INFO::firmwareVersion:
スロットファームウェアバージョン: 0.0(7) C_GetTokenInfo
API 名
C_GetTokenInfo
概要
トークン情報を取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetTokenInfo) (フェース
CK_SLOT_ID
slotID,
CK_TOKEN_INFO_PTR
pInfo
);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
スロット ID
CK_SLOT_ID
IN
トークン情報ポインタ
CK_TOKEN_INFO_PTR
OUT© JAHIS 202414

備考

取得可能なトークン情報は以下の通り。
CK_TOKEN_INFO::label : ラベル名 :「HPKI Application」: カードにラベル有りの場合なし(32 バイトの空白文字列) : カードにラベル無しの場合
CK_TOKEN_INFO::model : デバイスモデル名 :「ISO 7816-15:2016」注CK_TOKEN_INFO::flags : ビットフラグ :乱数生成器有(CKF_RNG) |ユーザログイン要(CKF_LOGIN_REQUIRED) |ユーザ PIN の初期化有(CKF_USER_PIN_INITIALIZED)CK_TOKEN_INFO::ulMaxPinLen : PIN の最大長 :16
CK_TOKEN_INFO::ulMinPinLen : PIN の最小長 :4
値は、附属書Ｂの構造例を用いた場合の例である。
注：旧版に対応したライブラリからは「JIS X 6320-15:2006」、「ISO 7816-15:2004」が返されるが、後方互換性のためエラーとしないこと。
(8) C_GetMechanismList
API 名
C_GetMechanismList
概要
サポートメカニズム(アルゴリズム)を取得する。
関数イン CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList) (タフェー
CK_SLOT_ID
slotID,ス
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR
pulCount);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
スロット ID
CK_SLOT_ID
IN
メカニズムタイプポインタ
CK_MECHANISM_TYPE_PTR
OUT
CK_ULONG_PTR
IN/OUT メカニズムタイプ件数
備考
取得可能なサポートメカニズムは以下の通り。
Sign 用: CKM_RSA_PKCS(9) C_GetMechanismInfo
API 名
C_GetMechanismInfo
概要
メカニズム(アルゴリズム)情報を返す。
関数イン CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo) (タフェー
CK_SLOT_ID
slotID,ス
CK_MECHANISM_TYPE
type,
CK_MECHANISM_INFO_PTR pInfo);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
スロット ID
CK_SLOT_ID
IN
メカニズムタイプ
CK_MECHANISM_TYPE
IN© JAHIS 2024
15

備考

CK_MECHANISM_INFO_PTR
IN/OUT メカニズム情報ポインタ
設定する情報は以下の通り。
type = CKM_RSA_PKCS の場合
CK_MECHANISM_INFO::ulMinKeySize : 最小鍵長: 2048
CK_MECHANISM_INFO::ulMaxKeySize : 最大鍵長: 2048
CK_MECHANISM_INFO::flags : ビットフラグ :C_SignInit 利用可能(CKF_SIGN)
値は、附属書Ｂの構造例を用いた場合の例である。
（鍵長：4096 も可）(10) C_OpenSession
API 名
C_OpenSession
概要
セッションを確立する。
関数イン CK_DEFINE_FUNCTION(CK_RV, C_OpenSession) (タフェー
CK_SLOT_ID
slotID,ス
CK_FLAGS
flags,
CK_VOID_PTR
pApplication,
CK_NOTIFY
Notify,CK_SESSION_HANDLE_PTR
phSession);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
スロット ID
CK_SLOT_IDIN
CKF_SERIAL_SESSION を指CK_FLAGSIN
定NULL ポインタを指定
CK_VOID_PTR
IN
NULL ポインタを指定
CK_NOTIFYIN
CK_SESSION_HANDLE_PTR
IN/OUT セッションハンドルポインタ(11) C_CloseSession
API 名
C_CloseSession
概要
セッションを切断する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_CloseSession) (フェース
CK_SESSION_HANDLE
hSession);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLE
IN(12) C_CloseAllSessions
API 名
C_CloseAllSessions
概要
すべてのセッションを切断する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_CloseAllSessions) (フェース
CK_SLOT_ID slotID);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)© JAHIS 2024
16

引数

型
CK_SLOT_ID

I/O
IN

内容
スロット ID(13) C_GetSessionInfo
API 名
C_GetSessionInfo
概要
セッション状態を取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetSessionInfo) (フェース
CK_SESSION_HANDLE
hSession,
CK_SESSION_INFO_PTR
pInfo
);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLE
IN
セッション状態ポインタ
CK_SESSION_INFO_PTR
OUT
備考
以下の状態を返す。
ログインしていないとき: CKS_RO_PUBLIC_SESSION(CKS_RW_PUBLIC_SESSION でも可)
ログインしているとき: CKS_RO_USER_FUNCTIONS(CKS_RW_USER_FUNCTIONS でも可)(14) C_Login
API 名
概要
関数インタ
フェース

戻り値
引数

C_Login
トークンをログイン状態にする。
CK_DEFINE_FUNCTION(CK_RV, C_Login) (CK_SESSION_HANDLE
hSession,
CK_USER_TYPE
userType,
CK_UTF8CHAR_PTR
pPin,
CK_ULONG
ulPinLen);
CK_RV (CKR_OK: 成功 その他: 失敗)型
内容
I/O
セッションハンドル
CK_SESSION_HANDLEIN
CKU_USER を指定
CK_USER_TYPE
IN
パスワード文字列ポインタ。文字列は、
CK_UTF8CHAR_PTR
IN
ASCII とする。
パスワード文字列長CK_ULONG
IN(15) C_Logout
API 名
C_Logout
概要
トークンをログアウト状態にする。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_Logout) (フェース
CK_SESSION_HANDLE
hSession);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)© JAHIS 2024
17

引数

型
CK_SESSION_HANDLE

I/O
IN

内容
セッションハンドル(16) C_FindObjectsInit
API 名
C_FindObjectsInit
概要
オブジェクトの検索を開始する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_FindObjectsInit) (フェース
CK_SESSION_HANDLE
hSession,
CK_ATTRIBUTE_PTR
pTemplate,
CK_ULONG
ulCount);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLEIN
属性テーブルポインタ
CK_ATTRIBUTE_PTR
IN
属性テーブル数
CK_ULONG
IN
備考
以下の属性による検索を行う。
CKA_CLASS CKO_CERTIFICATE または CKO_PRIVATE_KEY
CKA_TOKEN
True
CKA_LABEL
証明書の名前 または 私有鍵の名前
CKA_ID
証明書の番号 または 私有鍵の番号
CKA_CERTIFICATE_TYPE
CKC_X_509
CKA_VALUE
証明書の値
CKA_KEY_TYPE
CKK_RSACKA_MODULUS
公開鍵の N
CKA_PUBLIC_EXPONENT
公開鍵の E(17) C_FindObjects
API 名
C_FindObjects
概要
オブジェクトの検索を行う。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_FindObjects) (フェース
CK_SESSION_HANDLE
hSession,
CK_OBJECT_HANDLE_PTR
phObject,
CK_ULONG
ulMaxObjectCount,
CK_ULONG_PTR
pulObjectCount);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLEIN
CK_OBJECT_HANDLE_PTR
IN/OUT オブジェクトハンドルポインタ
最大オブジェクト数CK_ULONGIN
CK_ULONG_PTR
IN/OUT オブジェクト数ポインタ(18) C_FindObjectsFinal
API 名
C_FindObjectsFinal
概要
オブジェクトの検索を終了する。
© JAHIS 202418

関数インタフェース
戻り値
引数

CK_DEFINE_FUNCTION(CK_RV, C_FindObjectsFinal) (CK_SESSION_HANDLE
hSession);
CK_RV (CKR_OK: 成功 その他: 失敗)型
内容
I/O
セッションハンドル
CK_SESSION_HANDLE
IN(19) C_GetAttributeValue
API 名
C_GetAttributeValue
概要
オブジェクトの属性値を取得する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue) (フェース
CK_SESSION_HANDLE
hSession,
CK_OBJECT_HANDLE
hObject,
CK_ATTRIBUTE_PTR
pTemplate,
CK_ULONG
ulCount);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLEIN
オブジェクトハンドル
CK_OBJECT_HANDLEIN
属性テーブルポインタ
CK_ATTRIBUTE_PTR
OUT
属性テーブル数
CK_ULONG
IN
備考
以下の属性に対する値が取得可能である。
CKA_CLASS CKO_CERTIFICATE または CKO_PRIVATE_KEY
CKA_TOKEN
True
CKA_PRIVATE
表 3 オブジェクト属性一覧参照。
CKA_LABEL
表 3 オブジェクト属性一覧参照。
CKA_ID
表 3 オブジェクト属性一覧参照。
CKA_CERTIFICATE_TYPE
CKC_X_509
CKA_VALUE
表 3 オブジェクト属性一覧参照。
CKA_ISSUER
表 3 オブジェクト属性一覧参照。
CKA_SERIAL_NUMBER
表 3 オブジェクト属性一覧参照。
CKA_SUBJECT
表 3 オブジェクト属性一覧参照。
CKA_KEY_TYPE
CKK_RSACKA_SIGN
True
CKA_EXTRACTABLE
False
CKA_ALWAYS_AUTHENTICATE
表 3 オブジェクト属性一覧参照。
CKA_MODULUS
表 3 オブジェクト属性一覧参照。
CKA_PUBLIC_EXPONENT
表 3 オブジェクト属性一覧参照。
値は、附属書Ｂの構造例を用いた場合の例である。

# オブジェクト
1 私有鍵

表３ オブジェクト属性一覧
属性名
属性値
CKA_PRIVATETrue
CKA_LABEL
Private key of HPKI

© JAHIS 202419

2 エンドエンテ
ィティの証明書

3 厚労省の CA
証明書

4 各事業者のCA 証明書CKA_ID17H
CKA_ALWAYS_AUTHENTICATE EF.PrKD 内のCommonObjectAttributes.userConsent の値が設定されている時 True、userConsent 省略時 False
エンドエンティティの証明書から取得した値
CKA_MODULUS
エンドエンティティの証明書から取得した値
CKA_PUBLIC_EXPONENTCKA_PRIVATEFalse
CKA_LABEL
HPKI END ENTITY CERTIFICATE
CKA_ID
17H
エンドエンティティの証明書の値
CKA_VALUE
EF.CD 内 の エ ン ド エ ン テ ィ テ ィ の 証 明 書 のCKA_ISSUER
X509CertificateAttributes.issuer の値、issuer 省略
時は NULL ポインタ
EF.CD 内 の エ ン ド エ ン テ ィ テ ィ の 証 明 書 のCKA_SERIAL_NUMBER
X509CertificateAttributes. serialNumber の値、serialNumber 省略時は NULL ポインタ
EF.CD 内 の エ ン ド エ ン テ ィ テ ィ の 証 明 書 のCKA_SUBJECT
X509CertificateAttributes.subject の値、subject 省
略時は NULL ポインタ
CKA_PRIVATEFalse
CKA_LABELMHLW CA CERTIFICATE
CKA_ID19H
厚労省の CA 証明書の値
CKA_VALUE
EF.CD 内の厚労省の CA 証明書のCKA_ISSUER
X509CertificateAttributes.issuer の値、issuer 省
略時は NULL ポインタ
EF.CD 内の厚労省の CA 証明書のCKA_SERIAL_NUMBER
X509CertificateAttributes. serialNumber の値、serialNumber 省略時は NULL ポインタ
EF.CD 内の厚労省の CA 証明書のCKA_SUBJECT
X509CertificateAttributes.subject の値、subject
省略時は NULL ポインタ
CKA_PRIVATEFalse
CKA_LABEL
HPKI ROOT CA CERTIFICATE
CKA_ID
1AH
各事業者の CA 証明書の値
CKA_VALUE
EF.CD 内の各事業者の CA 証明書のCKA_ISSUER
X509CertificateAttributes.issuer の値、issuer 省
略時は NULL ポインタ
EF.CD 内の各事業者の CA 証明書のCKA_SERIAL_NUMBER
X509CertificateAttributes. serialNumber の値、serialNumber 省略時は NULL ポインタ
EF.CD 内の各事業者の CA 証明書のCKA_SUBJECT
X509CertificateAttributes.subject の値、subject
省略時は NULL ポインタ

© JAHIS 2024
20

5 各事業者の中 CKA_PRIVATE
間 CA 証明書 CKA_LABELCKA_ID
CKA_VALUE
CKA_ISSUER

False
HPKI CA CERTIFICATE
1BH
各事業者の中間 CA 証明書の値
EF.CD 内の各事業者の中間 CA 証明書のX509CertificateAttributes.issuer の値、issuer 省
略時は NULL ポインタ
EF.CD 内の各事業者の中間 CA 証明書のX509CertificateAttributes. serialNumber の値、serialNumber 省略時は NULL ポインタ
EF.CD 内の各事業者の中間 CA 証明書のX509CertificateAttributes.subject の値、subject
省略時は NULL ポインタ

CKA_SERIAL_NUMBER

CKA_SUBJECT

注： 値は、附属書Ｂの構造例を用いた場合の例である。

(20) C_SignInit
API 名
C_SignInit
概要
署名処理を初期化する。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_SignInit) (フェース
CK_SESSION_HANDLE
hSession,
CK_MECHANISM_PTR
pMechanism,
CK_OBJECT_HANDLE
hKey
);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLE
IN
メカニズム情報ポインタ
CK_MECHANISM_PTR
INmechanism:
CKM_RSA_PKCS のみ指定可
オブジェクトハンドル
CK_OBJECT_HANDLE
IN(21) C_Sign
API 名
C_Sign概要
データに署名を行う。
関数インタ CK_DEFINE_FUNCTION(CK_RV, C_Sign) (フェース
CK_SESSION_HANDLEhSession,
CK_BYTE_PTR
pData,CK_ULONG
ulDataLen,
CK_BYTE_PTR
pSignature,
CK_ULONG_PTR
pulSignatureLen);
戻り値
CK_RV (CKR_OK: 成功 その他: 失敗)
型
内容
I/O
引数
セッションハンドル
CK_SESSION_HANDLE
IN© JAHIS 2024
21

CK_BYTE_PTR
CK_ULONGCK_BYTE_PTR
CK_ULONG_PTRIN
IN
IN/OUT
IN/OUT

データポインタ
データ長
署名データポインタ
署名データ長ポインタ

表４ PKCS #11 の型一覧
NO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

型名
CK_INFOCK_INFO_PTR
CK_SLOT_ID
CK_SLOT_ID_PTR
CK_SLOT_INFO
CK_SLOT_INFO_PTR
CK_TOKEN_INFO
CK_TOKEN_INFO_PTR
CK_SESSION_HANDLE
CK_SESSION_HANDLE_PTR
CK_USER_TYPE
CK_SESSION_INFO
CK_SESSION_INFO_PTR
CK_OBJECT_HANDLE
CK_OBJECT_HANDLE_PTR
CK_ATTRIBUTE
CK_ATTRIBUTE_PTR
CK_MECHANISM_TYPE
CK_MECHANISM_TYPE_PTR
CK_MECHANISMCK_MECHANISM_PTR
CK_MECHANISM_INFO
CK_MECHANISM_INFO_PTR
CK_RV
CK_NOTIFYCK_FUNCTION_LIST
CK_FUNCTION_LIST_PTR
CK_FUNCTION_LIST_PTR_PTR

概要
PKCS #11 ライブラリ情報
スロット ID
スロット情報トークン情報セッションハンドル
ユーザタイプセッション情報オブジェクトハンドル
属性タイプ、値、長さを含む構造体
メカニズムタイプ
メカニズムタイプを含む、メカニズムを示す構
造体メカニズム情報
ライブラリの戻り値
コールバック情報
PKCS #11 ライブラリのバージョン、関数ポインタを含む構造体

5.2.3. Crypto API インタフェース
本ガイドラインでは、Crypto API のサポートすべき機能の一覧を表 5 に示す。
表 5 Crypto API© JAHIS 2024
22

No
1
2
3
4
5
6
7
8
9
10
11

API 名
CryptAcquireContext
CryptReleaseContext
CryptGetProvParam
CryptSetProvParam
CryptDestroyKey
CryptGetKeyParam
CryptGetUserKey
CryptCreateHash
CryptDestroyHash
CryptSetHashParam
CryptSignHash

概要
鍵コンテナのハンドルを生成する
鍵コンテナのハンドルを解放する。
CSP のパラメータの値を取得する。
CSP のパラメータの値を設定する。
鍵の破棄を行う。
鍵のパラメータの値を取得する。
鍵コンテナ内の鍵ハンドルを取得する。
ハッシュオブジェクトの生成を行う。
ハッシュオブジェクトの破棄を行う。
ハッシュオブジェクトのパラメータを設定する。
ハッシュ値に署名を行う。

サポートすべき API の仕様は以下の通りとなる。なお、戻り値、構造体は、CryptoAPI の仕様を参照のこと。

(1) CryptAcquireContext
API 名
CryptAcquireContext
概要
鍵コンテナのハンドルを生成する
関数イン CryptAcquireContext(
タフェー
HCRYPTPROV* phProv,
ス
LPCTSTRpszContainer,
LPCTSTRpszProvider,
DWORD
dwProvType,
DWORD
dwFlags);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
ハンドル格納場所のポインタ
HCRYPTPROV*OUTNULL 文字で終了するコンテナ名称
LPCTSTRIN
NULL を設定すること。
NULL 文字で終了する CSP 名称であっ
LPCTSTRINて、電子署名用 CSP ならば"HPKI
Crypto Service Provider for Non
Repudiation"、電子認証用 CSP ならば"HPKI Crypto Service Provider for
Authentication" で始まる文字列を設定する。22 CSP の名称は、"HPKI Crypto Service Provider for Non Repudiation ABC"等プロバイダーが提供するものである。現状で唯一の名称にする制度はないので、配慮が必要である。
© JAHIS 202423

プロバイダタイプ PROV_RSA_AES、
PROV_RSA_FULL あるいは
PROV_RSA_SIG を設定すること。
動作に関するパラメータ 0: 利用者証明
DWORD
IN書、利用者私有鍵使用時に設定する。
dwFlags に 0 を指定した場合、パスワード入力画面が表示される。
CRYPT_SILENT を設定した場合ユーザインタフェースは表示されないので、CryptSetProvParam で PP_SIGNATURE_PIN を指定して PIN の情報を渡す必要がある。
DWORD

備考

IN

(2) CryptReleaseContext
API 名
CryptReleaseContext
概要
鍵コンテナのハンドルを解放する
関数イン CryptReleaseContext(
タフェー
HCRYPTPROV phProv,
ス
DWORD
dwFlags);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
CryptAcquireContext で取得したハンド
HCRYPTPROV
IN
ル
動作に関するパラメータ 0を設定するこ
DWORD
IN
と。
(3) CryptGetProvParamAPI 名
CryptGetProvParam
概要
CSP のパラメータの値を取得する。
関数イン CryptGetProvParam(
タフェー
HCRYPTPROV hProv,
ス
DWORD
dwParam,
BYTE*
pbData,
DWORD*
pdwDataLen,
DWORD
dwFlags);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
CryptAcquireContextで取得したハンHCRYPTPROV
IN
ドル
値を取得するためのパラメータ。サポー
DWORD
IN
トする値を表 6 に示す値を格納するバッファのポインタ
BYTE *OUT
NULL を指定した場合は値の読み込みは行われず、
pdwDataLen に値の格納に必要な長さが設定される。

© JAHIS 2024
24

DWORD*

IN/OUT

DWORD

IN

値の長さを保持するバッファへのポイ
ンタ 関数呼び出し時には、pbData バッ
ファに割り当てられたメモリサイズを設定する。関数終了時には、値の格納に必要な長さが設定される。
動作に関するパラメータ 0 を設定すること。

表 6 CryptGetProvParam の dwParam でサポートする値＃ 値
内容
１ PP_IMPTYPECSP の実装形を DWORD 型で返す。
２ PP_NAMECSP 名称を CHAR 型の NULL ターミネート文字列で返す。
電子署名用 CSP ならば"HPKI Crypto Service Provider for Non
Repudiation"、電子認証用 CSP ならば"HPKI Crypto Service Provider
for Authentication"を返す。
３ PP_VERSIONCSP のバージョンを DWORD 型で返す。
４ PP_PROVTYPECSP のプロバイダタイプを DWORD 型で返す。
５ PP_CERTCHAINCSP に含まれる CA の証明書（チェイン）を取得する。
注：CA の証明書のチェインの順番は特に規定しない
CA のフォーマットは、ASN.1 でエンコードされた

SET OF Certificate ; -- X.509 certificatesに従うものとする。
(4) CryptSetProvParam
API 名 CryptSetProvParam
概要
CSP のパラメータの値を設定する。
関数イ CryptGetProvParam(
ンタフ
HCRYPTPROV hProv,
ェース
DWORD
dwParam,const BYTE*
pbData,DWORD
dwFlags);
戻り値 BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
I/O
引数
HCRYPTPROV
IN
DWORD

IN

const BYTE *

IN

DWORD

IN

内容
CryptAcquireContext で取得したハンドル値を取得するためのパラメータ
サポートする値を表 7 に示す値を格納するバッファのポイン
タ。呼ぶ前に値を設定する。
動作に関するパラメータ 0 を設定すること。

表 7 CryptSetProvParam の dwParam でサポートする値© JAHIS 2024
25

＃
１

値
PP_SIGNATUER_PIN

内容
CSP を署名で利用するための PIN を設定する。pbData には、
NULL で終わる ASCII 文字列を渡す。
CryptAquireContext で CRYPT_SILENT を設定した場合、PP_SIGNATURE_PIN を指定して PIN の情報を渡す必要がある。指定しない場合には、CSP 内のユーザインタフェースによって PIN の入力が促される。
(5) CryptDestroyKey
API 名
CryptDestroyKey
概要
鍵の破棄を行う。
関数イン CryptDestroyKey(
タフェー
HCRYPTKEY hKeyス);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
破棄する鍵のハンドル
HCRYPTKEYIN(6) CryptGetKeyParamAPI 名
CryptGetKeyParam
概要
鍵のパラメータの値を取得する。 (IC カードに格納された利用者証明書(DER 形式)を返す。)
関数イン CryptGetKeyParam(
タフェー
HCRYPTKEY hKey,ス
DWORD
dwParam,
BYTE*
pbData,
DWORD*
pdwDataLen,
DWORD
dwFlags);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
値を取得する鍵のハンドル
HCRYPTKEY
IN
値 を 取 得 す る パ ラ メ ー タ
DWORD
IN
KP_CERTIFICATE: IC カードに格納された利用者証明書を返す。
値を格納するバッファのポインタ
BYTE*
OUT
NULL を指定した場合は値の読み込みは行われず、
pdwDataLen に値の格納に必要な長さが設定される。

© JAHIS 2024
26

DWORD*

IN/OUT

DWORD

IN

値の長さを保持するバッファへのポイ
ンタ 関数呼び出し時には、pbData バッ
ファに割り当てられたメモリサイズを設定する。関数終了時には、値の格納に必要な長さが設定される。
動作に関するパラメータ 0 を設定すること。

(7) CryptGetUserKey
API 名
CryptGetUserKey
概要
鍵コンテナ内の鍵ハンドルを取得する
関数イン CryptGetUserKey(
タフェー
HCRYPTPROV hProv,
ス
DWORD
dwKeySpec,HCRYPTKEY* phUserKey);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
CryptAcquireContext で取得したハンド
HCRYPTPROV
IN
ル
鍵の種類 AT_SIGNATURE: 署名用鍵
DWORD
INを設定すること。
鍵ハンドルをコピーするバッファのアド
HCRYPTKEY*
OUTレス(8) CryptCreateHash
API 名
CryptCreateHash
概要
ハッシュオブジェクトの生成を行う。
関数イン CryptCreateHash(
タフェー
HCRYPTPROV hProv,
ス
ALG_ID
Algid,HCRYPTKEY hKey,
DWORD
dwFlags,
HCRYPTHASH* phHash);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
CryptAcquireContext で取得したハンド
HCRYPTPROVINル© JAHIS 2024
27

CALG_SHA1: SHA-1 アルゴリズム注
CALG_SHA_256: SHA-256 アルゴリズム
CALG_SHA_384: SHA-384 アルゴリズム
CALG_SHA_512: SHA-512 アルゴリズ
ム
キードハッシュの場合の鍵ハンドル 0を
HCRYPTKEY
IN
設定すること。(本 CSP ではキードハッ
シュはサポートしない
動作に関するパラメータ 0を設定するこ
DWORD
IN
と。
生成したハッシュオブジェクトのハンド
HCRYPTHASH*
OUT
ルをコピーするバッファのポインタ
注： SHA-1 アルゴリズムは「電子政府における調達のために参照すべき暗号のリスト（CRYPTREC 暗号
リスト）」では運用監視暗号リストに掲載されているので、互換性維持以外の目的での利用は推奨されていない点に留意する必要がある。
ALG_IDIN(9) CryptDestroyHash
API 名
CryptDestroyHash
概要
ハッシュオブジェクトの破棄を行う。
関数イン CryptDestroyHash(
タフェー
HCRYPTHASH hHash
ス);
戻り値
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
引数
破棄するハッシュオブジェクトのハンド
HCRYPTHASH
IN
ル

(10)
API 名
概要
関数イン
タフェー
ス

戻り値

引数

CryptSetHashParam
CryptSetHashParam
ハッシュオブジェクトのパラメータを設定する。
CryptSetHashParam(
HCRYPTHASH hHash,
DWORD
dwParam,const BYTE*
pbData,DWORD
dwFlags);
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容
I/O
パラメータを設定するハッシュオブジェHCRYPTHASHIN
クトのハンドル© JAHIS 2024
28

DWORDIN

const BYTE*
DWORD

IN
IN

設定するパラメータ HP_HASHVAL:
pbData バッファに格納された値をハッシュ値としてハッシュオブジェクトに設定する。
パラメータに設定するデータのポインタ動作に関するパラメータ 0を設定すること。

(11)CryptSignHash

API 名
概要
関数イン
タフェー
ス

戻り値

引数

CryptSignHash
ハッシュ値に署名を行う。
CryptSignHash(
HCRYPTHASH hHash,
DWORD
dwKeySpec,
LPCTSTRsDescription,
DWORD
dwFlags,
BYTE*
pbSignature,
DWORD*
pdwSigLen);
BOOL（TRUE:成功 FALSE:失敗）
GetLastError にてエラー情報が取得できる。
型
内容I/O
署名を行うハッシュオブジェクトのハン
HCRYPTHASH
IN
ドル
鍵の種類 署名用鍵 AT_SIGNATURE
DWORD
INを設定すること。
ハッシュの概要についての NULL ター
LPCTSTRIN
ミネート文字列 NULL を設定すること
署名時のフラグ 0 を設定すること。
DWORD
IN
署名データを格納するバッファのポイン
BYTE*
OUT
タ NULL を指定した場合は値の書き込みは行われず、pdwSigLen に値の格納に必要な長さが設定される。
署名データの長さを保持するバッファへ
DWORD*IN/OUTのポインタ 関数呼び出し時には、
pbSignature バッファに割り当てられた
メモリサイズを設定する。関数終了時には、署名データの格納に必要な長さが設定される。

5.2.4. Cryptography API: Next Generation インタフェース
本ガイドラインでは、Cryptography API: Next Generation (以下 CNG) のサポートすべき機能の一覧を
表 8 に示す。

© JAHIS 202429

表 8 CNG
No
1
2
3
4
5
6

API 名
NCryptOpenStorageProvider
NCryptOpenKey
NCryptGetProperty
NCryptSetProperty
NCryptFreeObject
NCryptFreeBuffer

7
8
9
10

NCryptIsAlgSupported
NCryptEnumAlgorithms
NCryptExportKey
NCryptSignHash

概要
KSP をロードし初期化する。
KSP に存在する鍵のハンドルを取得する。
KSP のプロパティの値を取得する。
KSP のプロパティの値を設定する。
KSP のオブジェクトを解放する。
NCryptEnumAlgorithms から取得したメモリを解放する。
アルゴリズムのサポート状況を取得する。
サポートするアルゴリズムの一覧を取得する。
鍵をエクスポートする。
ハッシュ値に署名を行う。

サポートすべき API の仕様は以下の通りとなる。なお、戻り値、構造体は、CNG の仕様を参照のこと。
(1) NCryptOpenStorageProvider
API 名
NCryptOpenStorageProvider
概要
KSP をロードし初期化する。
関数イン NCryptOpenStorageProvider(
タフェー
NCRYPT_PROV_HANDLE*phProvider,ス
LPCWSTRpszProviderName,
DWORD
dwFlags);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
プロバイダハンドル格納場所のポインタ
NCRYPT_PROV_HAN
OUT
DLE *
NULL 文字で終了する Unicode 文字列
LPCWSTRINのプロバイダ名称であって、電子署名用
プロバイダならば“HPKI Key Storage
Provider for Non Repudiation”、電子認証 用 プ ロ バ イ ダ な ら ば “HPKI Key
Storage Provider for Authentication”で始まる文字列を設定する。注 3
動作に関するパラメータ 0 を設定する。
DWORD
IN(2) NCryptOpenKey
API 名
NCryptOpenKey
概要
KSP に存在する鍵のハンドルを取得する。

プロバイダの名称は、“HPKI Key Storage Provider for Non Repudiation ABC”等プロバイダが提供するものである。現状で唯一の名称にする制度はないので、配慮が必要である。
© JAHIS 2024
注3

30

関数イン
タフェー
ス

戻り値
引数

NCryptOpenKey(
NCRYPT_PROV_HANDLE
hProvider,
NCRYPT_KEY_HANDLE*phKey,
LPCWSTR
pszKeyName,
DWORD
dwLegacyKeySpec,
DWORD
dwFlags);
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)型
内容I/O
NCryptOpenStorageProvider で取得し
NCRYPT_PROV_HAN
IN
たハンドル
DLE
鍵ハンドル格納場所のポインタ
NCRYPT_KEY_HANDOUTLE *NULL 文字で終了する Unicode 文字列
LPCWSTR
INの鍵の名称“Private key of HPKI”を設定する。
CSPとの互換性のために使用する鍵の種
DWORD
IN
類
AT_SIGNATURE または 0 を設定する。
動作に関するパラメータ
DWORD
IN
0: 必要に応じてユーザインタフェース
を表示
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない(3) NCryptGetProperty
API 名
NCryptGetProperty
概要
KSP のプロパティの値を取得する。
関数イン NCryptGetProperty(
タフェー
NCRYPT_HANDLE
hObject,ス
LPCWSTRpszProperty,
PBYTE
pbOutput,
DWORD
cbOutput,
DWORD*pcbResult,
DWORD
dwFlags);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
プロバイダまたは鍵のハンドル
NCRYPT_HANDLEIN
NULL 文字で終了する Unicode 文字列
LPCWSTRINのプロパティの名称。サポートする値を
表 9 に示す。
プロパティの値の格納場所のポインタ。
PBYTE
OUT
格納に必要なサイズを計算する場合には
NULL を設定する。
pbOutput のサイズ
DWORD
IN

© JAHIS 2024
31

DWORD *
DWORD

#
1
2
3
4
5
6
7
8

OUT
IN

プロパティの値のサイズ
動作に関するパラメータ0: 必要に応じてユーザインタフェース
を表示
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない

表 9 NCryptGetProperty の pszProperty でサポートする値
値
内容
プロバイダまたは鍵の名称を返す。
NCRYPT_NAME_PROPERTY
プロバイダのバージョンを返す。
NCRYPT_VERSION_PROPERTYNCRYPT_ALGORITHM_GROUP_PROPERTY NCRYPT_RSA_ALGORITHM_GROUP を 返す。
NCRYPT_RSA_ALGORITHM を返す。
NCRYPT_ALGORITHM_PROPERTY
鍵に関連付く証明書を取得する。
NCRYPT_CERTIFICATE_PROPERTY
鍵の bit 数を取得する。
NCRYPT_LENGTH_PROPERTYNCRYPT_PROVIDER_HANDLE_PROPERTY 指定された鍵ハンドルのプロバイダハンドルを取得する。
NCryptSetProperty で設定された Window ハン
NCRYPT_WINDOW_HANDLE_PROPERTY
ドルを取得する。

(4) NCryptSetProperty
API 名
NCryptSetProperty
概要
KSP のプロパティの値を設定する。
関数イン NCryptSetProperty(
タフェー
NCRYPT_HANDLE
hObject,ス
LPCWSTRpszProperty,
PBYTE
pbInput,
DWORD
cbInput,
DWORD
dwFlags);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
プロバイダまたは鍵のハンドル
NCRYPT_HANDLEIN
NULL 文字で終了する Unicode 文字列
LPCWSTRINのプロパティの名称。サポートする値を
表 10 に示す。
設定するプロパティの値
PBYTE
IN
pbInput のサイズ (バイト)
DWORD
IN
動作に関するパラメータ(複数指定可)
DWORD
IN
NCRYPT_PERSIST_ONLY_FLAG: ユーザに保持されるプロパティのみを設定する。
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない© JAHIS 2024
32

#
1
2

表 10 NCryptGetProperty の pszProperty でサポートする値
値
内容
ダイアログを表示する際の親 Window のハ
NCRYPT_WINDOW_HANDLE_PROPERTY
ンドルを設定する。
鍵を使用するための PIN を設定する。
NCRYPT_PIN_PROPERTY
dwFlags に NCRYPT_SILENT_FLAGSが設定された関数において PIN を必要とする場合、本プロパティが設定されていないとエラーになり、戻り値として
NTE_SILENT_CONTEXT が返る。

(5) NCryptFreeObject
API 名
NCryptFreeObject
概要
KSP のオブジェクトを解放する。
関数イン NCryptFreeObject(
タフェー
NCRYPT_HANDLE hObject
ス);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
プロバイダまたは鍵のハンドル
NCRYPT_HANDLEIN(6) NCryptFreeBuffer
API 名
NCryptFreeBuffer
概要
NCryptEnumAlgorithms から取得したメモリを解放する。
関数イン NCryptFreeBuffer(
タフェー
PVOID pvInputス);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
解放するメモリのアドレス
PVOID
IN(7) NCryptIsAlgSupported
API 名
NCryptIsAlgSupported
概要
アルゴリズムのサポート状況を取得する。
関数イン NCryptIsAlgSupported(
タフェー
NCRYPT_PROV_HANDLE
hProvider,ス
LPCWSTRpszAlgId,
DWORD
dwFlags);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
NCryptOpenStorageProvider で取得し
NCRYPT_PROV_HAN
IN
たハンドル
DLE

© JAHIS 2024
33

LPCWSTR

IN

DWORD

IN

NULL 文字で終了する Unicode 文字列のアルゴリズム識別子の名称
NCRYPT_RSA_ALGORITHM が有効な識別子
動作に関するパラメータ0: 必要に応じてユーザインタフェース
を表示
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない(8) NCryptEnumAlgorithms
API 名
NCryptEnumAlgorithms
概要
サポートするアルゴリズムの一覧を取得する。
関数イン NCryptEnumAlgorithms(
タフェー
NCRYPT_PROV_HANDLE
hProvider,ス
DWORD
dwAlgOperations,
DWORD*pdwAlgCount,NCryptAlgorithmName**ppAlgList,
DWORD
dwFlags);
戻り値
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)
型
内容
I/O
引数
NCryptOpenStorageProvider で取得し
NCRYPT_PROV_HAN
IN
たハンドル
DLE
一覧を取得するアルゴリズムの種別
DWORD
IN
アルゴリズムの数の格納場所のポインタ
DWORD *
OUT
アルゴリズムの一覧が格納される構造体
NCryptAlgorithmNam
OUTのポインタのアドレス
e **アルゴリズムの一覧が格納されたメモリ
は NCryptFreeBuffer を使用して解放する。
動作に関するパラメータ
DWORD
IN
0: 必要に応じてユーザインタフェース
を表示
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない(9) NCryptExportKey
API 名
NCryptExportKey
概要
鍵をエクスポートする© JAHIS 2024
34

関数イン
タフェー
ス

戻り値
引数

NCryptExportKey(
NCRYPT_KEY_HANDLE hKey,
NCRYPT_KEY_HANDLE hExportKey,
LPCWSTRpszBlobType,
NCryptBufferDesc*pParameterList,
PBYTE
pbOutput,
DWORD
cbOutput,
DWORD*pcbResult,
DWORD
dwFlags);
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)型
内容
I/O
エクスポートする鍵ハンドル
NCRYPT_KEY_HAND
IN
LE
エクスポートする鍵を暗号化するための
NCRYPT_KEY_HAND
IN
鍵ハンドル
LE
NULL を設定する。
NULL 文字で終了する Unicode 文字列
LPCWSTRINのエクスポートする BLOB タイプ
BCRYPT_PUBLIC_KEY_BLOB:BCRYPT_RSAKEY_BLOB 構造体として公開鍵をエクスポートする。
BCRYPT_RSAPUBLIC_BLOB:BCRYPT_RSAKEY_BLOB 構造体として RSA の公開鍵をエクスポートする。
LEGACY_RSAPUBLIC_BLOB:
CryptoAPI でインポート可能な形式のRSA 公開鍵をエクスポートする。
鍵のパラメータ情報
NCryptBufferDesc *IN
NULL を設定する。
エクスポートする鍵の格納場所のポイン
PBYTE
OUT
タ
エクスポートする鍵のサイズを計算する
場合には NULL を設定する。
pbOutput のサイズ
DWORD
IN
エクスポートする鍵のサイズ
DWORD *
OUT
動作に関するパラメータ
DWORD
IN
0: 必要に応じてユーザインタフェース
を表示
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない(10) NCryptSignHash
API 名
NCryptSignHash
概要
ハッシュ値に署名を行う© JAHIS 2024
35

関数イン
タフェー
ス

戻り値
引数

備考

NCryptSignHash(
NCRYPT_KEY_HANDLE hKey,
VOID*pPaddingInfo,
PBYTE
pbHashValue,
DWORD
cbHashValue,
PBYTE
pbSignature,
DWORD
cbSignature,
DWORD*pcbResult,
DWORD
dwFlags);
SECURITY_STATUS (ERROR_SUCCESS:成功 その他:失敗)型
内容I/O
NCryptOpenKey で取得したハンドル
NCRYPT_KEY_HAND
IN
LE
パディング情報の構造体のポインタ
VOID *
IN
dwFlags に指定したパディング情報に応じた構造体を設定する。
署名対象のハッシュ値
PBYTE
IN
署名対象のハッシュ値のサイズ(バイト)
DWORD
IN
署名値格納場所のポインタ
PBYTE
OUT
署名値のサイズを計算する場合には
NULL を設定する。
pbSignature のサイズ
DWORD
IN
署名値のサイズDWORD *
OUT
動作に関するパラメータ
DWORD
IN
BCRYPT_PAD_PKCS1: PKCS #1 パデ
ィングを使用する。pPaddingInfo には
BCRYPT_PKCS1_PADDING_INFO を設定する。
BCRYPT_PAD_PSS: PSS パディングを使 用 す る 。 pPaddingInfo に は
BCRYPT_PSS_PADDING_INFO を設定する。
NCRYPT_SILENT_FLAG: ユーザイン
タフェースを表示させない
pPaddingInfo に設定するパディング情報の構造体のメンバ pszAlgId には以下のいずれかのアルゴリズムを設定する。
BCRYPT_SHA256_ALGORITHM: SHA-256
BCRYPT_SHA384_ALGORITHM: SHA-384
BCRYPT_SHA512_ALGORITHM: SHA-512

5.3. PKI アプリケーションの構造
5.3.1. 基本構造
PKIカードアプリケーションのデータ構造は、
ISO/IEC 7816-15で規定されている。
本ガイドラインでは、© JAHIS 2024
36

この仕様を採用することとし、その概要を説明する。具体的なアプリケーションの構造の例を、附属書 B に示す。
ISO/IEC 7816-15 は、IC カードの中に暗号演算を行うための鍵や、証明書を格納する際の仕様を定めている。RSA セキュリティ社が暗号機能の標準として検討した PKCS #15 をベースとしており、どのような暗号情報オブジェクトが、カード内のどこにあり、どのようなアクセス条件になっているのかを記述できる仕様となっている。基本的な構造を図４に示す。

アプリケーションor DF
暗号オブジェクト全体のディレクトリ情報
EF.CIAInfo
EF.OD(’11’)
IEF

私有鍵のディレクトリ情報

EF.PrKD
公開鍵のディレクトリ情報

IEF

EF.PuKD

WEF

EF.CD

公開鍵証明書のディレクトリ情報

EF.AOD

認証情報のディレクトリ情報

IEF

図４ ISO/IEC 7816-15 の基本構成
暗号情報のディレクトリ情報を記述したファイル EF.OD は、各暗号情報オブジェクトのディレクトリ情報へのリンク（参照情報）を保持している。その情報から取得した各暗号情報オブジェクトのディレクトリ
情報を取得し、最終的な暗号情報オブジェクトの所在、利用条件（セキュリティ属性）などを取得し、暗号
情報オブジェクトを利用することになる。

5.3.2. 電子署名用 PKI カードアプリケーションと電子認証用 PKI カードアプリ
ケーションの共存
電子署名用アプリケーションと電子認証用アプリケーションは、異なる AID によって識別される DF（カードアプリケーション）に格納される。それぞれ独立の EF.CIAInfo を持つ、独立な構造として存在する。
HPKI で用いられるカードには、電子署名用 PKI アプリケーションあるいは電子認証用 PKI アプリケーシ
ョンのいずれか１つ、あるいは両方の PKI アプリケーションが搭載される可能性がある。両 PKI アプリケーションがカードに搭載された場合の構造例を図５に示す。

© JAHIS 202437

署名用カードアプリケーションor DF

IEF

認証用カードアプリケーションor DF

EF.CIAInfo

EF.CIAInfo

EF.OD(’11’)

EF.OD(’11’)
IEF

EF.PrKD

EF.PrKD

IEF

EF.PuKD

IEF

EF.PuKD

WEF

EF.CD

WEF

EF.CD

IEF

EF.AODIEF

EF.AOD

図 5 署名用アプリケーションと認証用アプリケーションを独立にした場合の構造例

5.3.3. アプリケーションが共存する場合の留意事項
実装される IC カードにより、機能の差が生じる可能性がある。特に論理チャネルの取り扱いは、カードによって基本論理チャネルしかサポートしていない場合が存在する。そのため、カードを利用する HPKI ア
プリケーションは、署名用カードアプリケーションと認証用カードアプリケーションが同じカード上に共存する場合には、電子署名演算が完了するまで排他制御を行うなど、利用シーケンスに混乱が生じないよう配慮する必要がある。

5.4. PKI アプリケーションのコマンド仕様
5.4.1. 概要
5.3.1 で説明した ISO/IEC 7816-15 に基づくデータモデル内の各暗号情報オブジェクト（鍵、証明書等）
を利用するためのカードコマンドは、ISO/IEC 7816-4、ISO/IEC 7816-8 によって規定される。本節では、そのコマンドの概要について説明する。

5.4.2. 対象とするコマンド
電子署名に必要となる演算の実行に関連する IC カードに対するコマンドは、ISO/IEC 7816-4 及びISO/IEC 7816-8 によって規定されている。表 11 に必要となるコマンドの一覧を示す。各コマンドの詳細については、附属書 C に記述する。
表 11 相互運用性確保に必要となるコマンド
コマンド規定される標準
SELECT
ISO/IEC 7816-4
VERIFY
ISO/IEC 7816-4
READ BINARY
ISO/IEC 7816-4
MANAGE SECURITY ENVIRONMENT
ISO/IEC 7816-4
PERFORM SECURITY OPERATION
ISO/IEC 7816-8© JAHIS 2024
38

5.4.3. コマンドに対する制限
このガイドラインの適用範囲内の相互運用性を確保するために必要となる各コマンド共通の制限として以下を挙げる・セキュアメッセージングは使用しない© JAHIS 2024
39

附属書Ａ（参考）PKI カードアプリケーション利用のシーケンス
A.1 概要署名のシーケンスは、ISO/IEC 7816-8 の附属書 A のシーケンスに従うものとする。本附属書では、A.2 で利用シーケンスに関する前提条件を示し、A.3 にカードレベルでの利用シーケンス例を、A.4 に PKCS #11
インタフェースの利用シーケンス例を、A.5 に CryptoAPI の利用シーケンス例を、A.6 に CNG の利用シー
ケンス例を示す。本附属書で示すシーケンス及び値は、あくまで一例であり、実際の認証事業者が発行するカードの利用の際のシーケンス及び値に一致することを保証するものではない。実際のカード及びカードに搭載されたアプリケーションの利用に当たっては、各事業者のカード及びアプリケーション仕様、提供されるソフトウェアモジュールの仕様に従って動作を確認する必要がある。

A.2 利用シーケンスに関する前提条件及び概要
A.2.1 前提条件
カードレベルでの利用シーケンス、PKCS#11、CAPI および CNG の利用は単一ではなく、複数想定することができる。A.3、A.4、A.5、及び A.6 では、次の条件を前提としている。
１） 端末の構成
端末 1 台に IC カードリーダ 1 台が接続され、IC カード 1 枚が挿入される。
２） カード上の HPKI カードアプリケーション
1 枚のカード上には、１つの電子署名用 HPKI カードアプリケーションまたは１つの電子認証用 HPKI カ
ードアプリケーション、あるいは 1 枚のカード上に両カードアプリケーションが１つずつ搭載されているものとする。複数の電子署名用 HPKI カードアプリケーション及び複数の電子認証用 HPKI アプリケーションが搭載されている場合は想定しない。
３） 鍵ペア
１つの PKI アプリケーションには、１つの私有鍵と、それに対応した１枚の利用者証明書が格納されているものとする。私有鍵を活性化する PIN は１つ存在するものとする。１つの PKI アプリケーションに複数の私有鍵、複数の利用者証明書、複数の PIN がある場合は想定しない。
４） 上位証明書の格納
上位証明書については、PKI アプリケーション１つにルート CA 及び中間 CA を含む 1 組の上位証明書が格納されているものとする。1 つの PKI アプリケーションに複数組の上位証明書が格納されている場合は想定しない。
５） 上位証明書の区別
利 用 す る PKI カ ー ド アプ リ ケ ー シ ョ ン 内 に 上位 証 明 書 が 格 納 さ れ てい る 場 合 、 証 明 書 のBasicConstraints.cA などによって利用者証明書との区別が可能になっているものとする。
６） ディレクトリ情報及び公開鍵証明書のアクセス制御
ISO/IEC 7816-15 に従ったディレクトリ情報及び公開鍵証明書の読み出しは、認証しなくとも可能である
ものとする。ディレクトリ情報及び公開鍵証明書の取得に認証が必要な場合は想定しない。
A.2.2 および A.2.3 に代表的な２つのカード利用のシーケンスの概略を示す。A.3、A.4、A.5 及び A.6 では、A.2.2 のシーケンスをとった場合の詳細シーケンスを示す。
A.2.2 ISO/IEC 7816-15 に従った利用シーケンスの概要
本ガイドラインに従った PKI カードアプリケーションは、ISO/IEC 7816-15 に従っている。そのため、利用にあたって、カード内の ISO/IEC 7816-15 に従ったカードアプリケーションを検索するシーケンスに従った利用を想定することができる。その場合、以下の条件の下でカード PKI アプリケーションを検索するこ© JAHIS 202440

ととなる。
① PKI カードアプリケーションは、ISO/IEC 7816 に従った AID が付与されている。すなわち、ISO/IEC
7816-15 で規定される RID“E8 28 BD 08 0F”で始まる最長 16 バイトの AID となる。
② カードには、複数の ISO/IEC 7816-15 に準拠したカードアプリケーション（電子署名用カードアプリケーションと電子認証用カードアプリケーション等）が搭載されている可能性がある。
③ HPKI に対応した PKI カードアプリケーションであるか否かは、最終的には証明書を取得して確認する。
以上の条件に従うと、図 A.1 に従った利用シーケンスに従って利用することとなる。

“E8 28 BD 08 0F ”をパーシャル指定した DF の選択

ファイルは
存在する？

N
エラー処理

Y
公開鍵証明書の取得

N

該当する
証明書か？
Y
暗号演算

図 A.1

ISO/IEC 7816-15 に従った PKI カードアプリケーションの検索と利用

A.2.3 対象とするカードアプリケーションの AID を用いた利用シーケンスの概要
カード上アプリケーションを検索するよりも直接 AID を指定して選択したほうが効率が良い。条件は以下の通りとなる。
① PKI カードアプリケーションは、ISO/IEC 7816-15 に従った AID が付与されている。また、HPKI 電
子署名用及び電子認証用カードアプリケーションは、厚労省が指定した AID を持つ。
② カードには、複数の ISO/IEC 7816-15 のカードアプリケーション（電子署名用アプリケーションと電子認証用アプリケーション等）が搭載されている可能性がある。
③ HPKI に対応した PKI アプリケーションであるか否かは、最終的には HPKI アプリケーションあるいは医療情報アプリケーションが証明書を取得して確認する。
以上の条件に従うと、図 A.2 に従った利用シーケンスに従って利用することとなる。

© JAHIS 2024
41

“E8 28 BD 08 0F ”で始まる PKI アプリ
ケーションの AID を指定した DF の選択

公開鍵証明書の取得

N

該当する
証明書か？
Y

エラー処理

暗号演算

図 A.2 AID を直接指定した PKI アプリケーションの選択と利用

A.3 IC カードの利用のシーケンス
IC カードに対するコマンドレベルでの手順は、以下のシーケンスに従う。
A.3.1 アプリケーション選択
１）アプリケーション/DF の選択
SELECT FILE・
“E8 28 BD 08 0F”から始まる AID を DF 名として指定して選択する。
・（１）コマンド
CLA
“00“
INS
“A4“ = SELECT“04“ = DF 名選択
P1“00“ = 最初または唯一のファイル選択P2“XX“ = データフィールドの長さ
Lc
データ “E8 28 BD 08 0FXX XX XX XX XX XX XX XX XX XX XX XX“（注）“00“ = FCI を受け取る
Le
注： PKI アプリケーションによって指定された値を設定する。
（２）レスポンス
長さ意味
データ 5～20
FCI(TAG=“84“)“6F” L1“84“ L2 xx xx xx xx xx xx xx (xx は最長 16 バイト)
SW1
1
SW2
1

© JAHIS 2024
42

A.3.2 証明書の読み出し
注：IC カード内の特定の HPKI アプリケーションの証明書を取得する。
１）アプリケーション/DF の選択
SELECT FILE
・事前にアプリケーションを確認しており、選択する DF は事前にわかっているものとする。
（１）コマンド
CLA
“00“
INS
“A4“ = SELECT“04“ = DF 名選択
P1“00“ = DF 選択
P2“XX“ = データフィールドの長さ(最長 16 バイト)Lc
データ “E8 28 BD 08 0F XX XX XX XX““00“ = FCI を受け取る
Le（２）レスポンス
長さ意味
データ 5～20
FCI (TAG=“84“)テンプレート
SW1
1
SW2
1
２）EF.CIAInfo の読み出し
READ BINARY (EF 識別子=“12“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“92“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ意味
データ 1～256 データ
SW1
1
SW2
1
３）EF.OD の読み出し
READ BINARY (EF 識別子=“11“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“91“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ意味
データ 1～256 データ© JAHIS 2024
43

SW1
SW2

1
1

４）EF.CD 読み出し
READ BINARY (EF 識別子=“15“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“95“ =短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ意味
データ 1～256 データ
SW1
1
SW2
1
５) 証明書読み出し
READ BINARY (EF 識別子=“18“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“98“ = 短縮 EF 指定
P1“00“ = オフセット
P2“00 00 00“ = 読み出しバイト数(65536 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ意味
データ 1～65536 データ
SW1
1
SW2
1
拡張 Lc/Le をサポートしていない IC カード等で、ファイルの終わりまで読み出していない場合には、
READ BINARY のコマンドを続けて発行し、ファイルの終わりまで読み出す。
（３）コマンド
CLA
INS
P1
P2
Le
（４）レスポンス“00““B0“ = READ BINARY“01“ = カレント EF 指定、オフセット（15 ビットの上位）“00“ = オフセット（15 ビットの下位 8 ビット）“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)

長さ
意味
データ 1～256 データ
SW1
1
SW2
1
（以降ファイルの終わりに達するまで、オフセットを変えながら READ BINARY コマンドを続け© JAHIS 202444

て発行する）READ BINARY (EF 識別子=“19“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“99“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00 00 00“ = 読み出しバイト数(65536 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ
意味
データ 1
～ データ
65536
SW1
1
SW2
1
READ BINARY (EF 識別子=“1A“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“9A“ =短縮 EF 識別子指定
P1“00“ = オフセット
P2“00 00 00“ = 読み出しバイト数(65536 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ
意味
データ 1
～ データ
65536
SW1
1
SW2
1
(READ BINARY (EF 識別子=“1B“))（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“9B“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00 00 00“ = 読み出しバイト数(65536 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ
意味
データ 1
～ データ
65536
SW1
1
SW2
1

© JAHIS 2024
45

A.3.3 署名計算
注：IC カード内の特定の HPKI アプリケーションの私有鍵によって署名演算する。事前に証明書が確認されて、DF が既知であることが必要。
１）アプリケーション/DF の選択
SELECT FILE
・選択する DF は事前にわかっているものとする。
（証明書を確認して対象となる DF は既知である）。
（１）コマンド
CLA
INS
P1
P2
Lc
データ
Le
（２）レスポンス
データ
SW1
SW2

“00“
“A4“ = SELECT“04“ = DF 名選択“00“ = DF 選択“XX“ = データフィールドの長さ(最長 16 バイト)“E8 28 BD 08 0F XX XX XX XX XX XX““00“ = FCI を受け取る
長さ
5～20
1
1

意味
FCI(TAG=’84’)テンプレート

２）EF.CIAInfo の読み出し
READ BINARY(EF 識別子=“12“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“92“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le（２）レスポンス
長さ意味
データ 1～256 データ
SW1
1
SW2
1
３）EF.OD の読み出し
READ BINARY (EF 識別子=“11“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“91“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le
２）レスポンス
長さ意味© JAHIS 2024
46

データ
SW1
SW2

1～256
1
1

データ

４）EF.AOD の読み出し
READ BINARY (EF 識別子=“13“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“93“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le
２）レスポンス
長さ
意味
データ 1～256 データ
SW1
1
SW2
1
５）EF.PrKD 読み出し
READ BINARY (EF 識別子=“14“)（１）コマンド
CLA
“00“
INS
“B0“ = READ BINARY“94“ = 短縮 EF 識別子指定
P1“00“ = オフセット
P2“00“ = 読み出しバイト数(256 バイト以内のファイルの終りまで)
Le
２）レスポンス
長さ
意味
データ 1～256 データ
SW1
1
SW2
1
６）署名
VERIFY (EF 識別子=“16“) （毎回）（１）コマンド
CLA
“00“
INS
“20“ = VERIFY
P1“00““96“ = 短縮 EF 識別子指定
P2“XX“ = PIN の長さ
Lc
データ “31 32 33 34“ = PIN データ
２）レスポンス
長さ
意味
SW1
1
SW2
1

© JAHIS 2024
47

MANAGE SECURITY ENVIRONMENTSET DST (P1P2=“41 B6“) ＋データ（鍵へのリファレンス: EF 識別子=“0017“）（１）コマンド
CLA
“00“
INS
“22“ = MANAGE SECURITY ENVIRONMENT“41“ = 計算
P1“B6“ = 署名生成P2“04“ = データフィールドの長さ
Lc
データ “81 02 00 17“ = 署名生成鍵の IEF 指定
２）レスポンス
長さ
意味
SW1
1
SW2
1

PERFORM SECURITY OPERATION
P1P2=“9E 9A“＋データ（パディングしたハッシュ値）（１）コマンド
CLA
“00“
INS
“2A“ = PERFORM SECURITY OPERATION“9E“ = 署名計算
P1
“9A“ = データフィールドのデータに署名
P2“00 XX XX“ = データフィールドの長さ
Lc
データ 署名するハッシュデータ“00 00“ = 署名結果の長さ(65536 バイト以内)
Le２）レスポンス
長さ意味
データ 1～ 署名結果
65536
SW1
1
SW2
1
拡張 Lc/Le をサポートしていない IC カードで、データフィールドの長さが 255 バイトを超える、あるいは署名結果の長さが 256 バイトを超える場合には、コマンド連鎖を用いる。

A.4 PKCS #11 利用のシーケンス(A）初期処理ライブラリのロード
C_GetFunctionList

C_Initialize

電子署名用(電子認証用)PKCS #11 ライブラリをロードする。
↓
関数ポインタリストの取得
ppFunctionList：API アドレスポインタ↓
PKCS #11 ライブラリの初期化© JAHIS 2024
48

pInitArgs：NULL_PTR(B）終了処理
C_Finalize

ライブラリのアンロード

PKCS #11 ライブラリの終了処理
pReserved：NULL_PTR↓
電子署名用(電子認証用)PKCS #11 ライブラリをアンロードする。

(C）証明書取得(A)初期処理参照↓
スロットリスト数の取得
C_GetSlotList
tokenPresent：CK_TRUE
pSlotList：NULL_PTR
pulCount：スロット数格納アドレス
IC カード内の HPKI アプリケーションとスロット ID を対応させる必要がある。そのためには、
電子署名用(電子認証用)ID “E8 28 BD 08 0F XX XX … XX XX”を DF 名として指定して選択。
↓
スロットリストの取得
C_GetSlotList
tokenPresent：CK_TRUE
pSlotList：スロットリスト格納アドレス
pulCount：スロット数格納アドレス↓
アプリケーションとトークン間のセッションの確立
C_OpenSession
slotID：C_GetSlotList で取得したスロットリストの 1 番目
(pSlotList[0])flags：CKF_SERIAL_SESSION
pApplication：NULL_PTR
Notify：NULL_PTR
phSession：セッションハンドル格納アドレス
A.2.2 のシーケンスに従い、IC カード内のアプリケーションから全ての証明書を読み出す。
↓
証明書検索操作の初期設定
C_FindObjectsInit
hSession：C_OpenSession で取得したハンドル
pTemplate：以下の属性を指定(1) type=CKA_CLASS
value=CKO_CERTIFICATE(2) type=CKA_TOKEN
value=CK_TRUE
ulCount：設定する属性数(2)↓証明書の検索C_FindObjects
hSession：C_OpenSession で取得したハンドル
phObject：オブジェクトハンドル格納アドレス
初期化処理© JAHIS 2024
49

ループ

C_GetAttributeValueulMaxObjectCount：オブジェクトハンドル格納領域数(4)pulObjectCount：発見したオブジェクト数格納アドレス↓① (pulObjectCount-1)までループ(カウンタを j、初期値を 0 とする)↓証明書サイズの取得
hSession：C_OpenSession で取得したハンドル
hObject：C_FindObjects で取得したオブジェクトハンドルリストの j 番目(phObject[j])pTemplate：以下の属性を指定(1) type=CKA_LABEL(※1)
value=NULL_PTR
ulValueLen=サイズ格納領域アドレス(2) type=CKA_VALUE(※2)
value=NULL_PTR
ulValueLen=サイズ格納領域アドレス
ulCount：設定する属性数(2)↓C_GetAttributeValue

証明書のチェック

C_FindObjectsFinal

C_CloseSession
又は、
C_CloseAllSessions

証明書の取得hSession：C_OpenSession で取得したハンドル
hObject：C_FindObjects で取得したオブジェクトハンドルリストの j 番目(phObject[j])pTemplate：以下の属性を指定(1) type=CKA_LABEL(※1)
value=ラベル格納アドレス
ulValueLen=格納領域サイズ(2) type=CKA_VALUE(※2)
value=証明書格納アドレス
ulValueLen=格納領域サイズ
ulCount：設定する属性数(2)↓ラベル(※1)または証明書(※2)を用いて、求める証明書(ex. エンド
エンティティの証明書等)であるかを判定する。
求める証明書と一致すれば、次へ進む。
求める証明書と一致しなければ、カウンタ j を 1 加算して①に戻る。
↓
証明書検索操作の終了処理
hSession：C_OpenSession で取得したハンドル↓
セッションの切断
C_CloseSession の場合
hSession：C_OpenSession で取得したハンドル
C_CloseAllSessions の場合
slotID：C_OpenSession に指定したスロット ID© JAHIS 2024
50

終了処理

↓
(B)終了処理参照(D）署名生成処理
署名に必要な私有鍵は、n(modulus)と e(publicExponent)から検索する。そのため、事前にすべての証明書を検索し、ラベルまたは証明書データによって求めている証明書か否かを判定しておく必要がある。
(1)初期処理参照↓
スロットリスト数の取得
C_GetSlotList
tokenPresent：CK_TRUE
pSlotList：NULL_PTR
pulCount：スロット数格納アドレス
IC カード内の HPKI アプリケーションとスロット ID を対応させる必要がある。そのためには、
電子署名用(電子認証用)ID “E8 28 BD 08 0F XX XX … XX XX”を DF 名として指定して選択。
↓
スロットリストの取得
C_GetSlotList
tokenPresent：CK_TRUE
pSlotList：スロットリスト格納アドレス
pulCount：スロット数格納アドレス↓
アプリケーションとトークン間のセッションの確立
C_OpenSession
slotID：C_GetSlotList で取得したスロットリストの 1 番目
(pSlotList[0])flags：CKF_SERIAL_SESSION
pApplication：NULL_PTR
Notify：NULL_PTR
phSession：セッションハンドル格納アドレス↓
C_FindObjectsInit
証明書検索操作の初期設定
hSession：C_OpenSession で取得したハンドル
pTemplate：以下の属性を指定(1) type=CKA_CLASS
value=CKO_CERTIFICATE(2) type=CKA_TOKEN
value=CK_TRUE
ulCount：設定する属性数(2)A.2.2 のシーケンスに従い、IC カード内のアプリケーションから全ての証明書を読み出す。
↓
C_FindObjects
証明書の検索hSession：C_OpenSession で取得したハンドル
phObject：オブジェクトハンドル格納アドレス
ulMaxObjectCount：オブジェクトハンドル格納領域数(4)pulObjectCount：発見したオブジェクト数格納アドレス↓
初期化処理© JAHIS 2024
51

ループ

C_GetAttributeValue

C_GetAttributeValue

証明書のチェック

C_FindObjectsFinal

E と N の取得
C_Login① (pulObjectCount-1)までループ(カウンタを j、初期値を 0 とする)↓証明書サイズの取得
hSession：C_OpenSession で取得したハンドル
hObject：C_FindObjects で取得したオブジェクトハンドルリストの j 番目(phObject[j])pTemplate：以下の属性を指定(1) type=CKA_LABEL(※1)
value=NULL_PTR
ulValueLen=サイズ格納領域アドレス(2) type=CKA_VALUE(※2)
value=NULL_PTR
ulValueLen=サイズ格納領域アドレス
ulCount：設定する属性数(2)↓証明書の取得hSession：C_OpenSession で取得したハンドル
hObject：C_FindObjects で取得したオブジェクトハンドルリストの j 番目(phObject[j])pTemplate：以下の属性を指定(1) type=CKA_LABEL(※1)
value=ラベル格納アドレス
ulValueLen=格納領域サイズ(2) type=CKA_VALUE(※2)
value=証明書格納アドレス
ulValueLen=格納領域サイズ
ulCount：設定する属性数(2)↓ラベル(※1)または証明書(※2)を用いて、エンドエンティティの証明書であるかを判定する。
求める証明書と一致すれば、次へ進む。
求める証明書と一致しなければ、カウンタ j を 1 加算して①に戻る。
↓
証明書検索操作の終了処理
hSession：C_OpenSession で取得したハンドル↓
エンドエンティティの証明書から公開鍵の E と N を取得↓
トークンへのログイン
hSession：C_OpenSession で取得したハンドル
userType：CKU_USER
pPin：パスワード文字列
ulPinLen：パスワード文字列長© JAHIS 2024
52

A.3.3 の PIN 照合を行う。PIN 照合は、署名計算直前に必要となる場合がある。
↓
私有鍵検索操作の初期設定
C_FindObjectsInit
hSession：C_OpenSession で取得したハンドル
pTemplate：以下の属性を指定(1) type=CKA_CLASS
value=CKO_PRIVATE_KEY(2) type=CKA_TOKEN
value=CK_TRUE(3) type=CKA_MODULUS
value=公開鍵の N(4) type=CKA_PUBLIC_EXPONENT
value=公開鍵の E
ulCount：設定する属性数(4)↓
私有鍵の検索C_FindObjects
hSession：C_OpenSession で取得したハンドル
phObject：オブジェクトハンドル格納アドレス
ulMaxObjectCount：オブジェクトハンドル格納領域数(1)pulObjectCount：発見したオブジェクト数格納アドレス↓
私有鍵検索操作の終了処理
C_FindObjectsFinalhSession：C_OpenSession で取得したハンドル↓
ダイジェスト値の生成
署名対象データのダイジェスト値を生成↓
DigestInfo の作成
ダイジェスト値を使用して DigestInfo を作成↓
署名処理の初期設定
C_SignInit
hSession：C_OpenSession で取得したハンドル
pMechanism：CKM_RSA_PKCS
hKey：C_FindObjects で取得したオブジェクトハンドル↓
署名値長取得C_SignhSession：C_OpenSession で取得したハンドル
pData：DigestInfo
ulDataLen：DigestInfo のデータ長
pSignature：NULL_PTR
pulSignatureLen：署名値長格納アドレス↓
署名
C_SignhSession：C_OpenSession で取得したハンドル
pData：DigestInfo
ulDataLen：DigestInfo のデータ長
pSignature：署名値格納アドレス
pulSignatureLen：署名値長格納アドレス© JAHIS 202453

ここで、A.3.3 のハッシュの設定、署名計算の演算を実行する必要がある。PIN の照合はここで行っても良い。
↓
トークンからのログアウト
C_Logout
hSession：C_OpenSession で取得したハンドル↓(連続して署名を行う場合)(1 回の署名毎に C_Login～C_Logout を繰り返す。
認証を連続して行う場合は 1 回の署名毎に C_Login～C_Logoutの繰り返しは必須ではない。)↓
セッションの切断
C_CloseSession
又は、
C_CloseSession の場合
hSession：C_OpenSession で取得したハンドル
C_CloseAllSessions
C_CloseAllSessions の場合
slotID：C_OpenSession に指定したスロット ID↓
終了処理(B)終了処理参照

A.5 CAPI 利用のシーケンス
本シーケンス例で想定している条件は以下の通り：(1) 「電子署名用 CSP」、
「電子認証用 CSP」から見た場合、それぞれの PKI カードアプリケーションに対して、IC カード内にデフォルトコンテナ（電子署名用あるいは電子認証用の RSA 鍵ペア及び利用者証明書）が１つ存在する。
(A）

利用者証明書取得処理

CryptAcquireContext

CryptGetUserKey

CryptGetKeyParam

暗号プロバイダとコンテナを指定して、プロバイダハンドルを取得する。
phProv：プロバイダハンドル戻り値。
szContainer：コンテナ名 NULL を設定する（デフォルトコンテナ）。
szProvider：プロバイダ名を設定する。
電子署名用 CSP ならば"HPKI Crypto Service Provider for Non
Repudiation"、電子認証用 CSP ならば"HPKI Crypto Service
Provider for Authentication"を設定する。
dwProvType：プロバイダタイプ PROV_RSA_AES を設定する。
dwFlags：0 を設定する。
↓
コンテナの保持する RSA 鍵ペアのハンドルを取得する。
hProv：CryptAcquireContext で取得したプロバイダハンドル
dwKeySpec：鍵種別として AT_SIGNATURE を指定。
phUserKey ：鍵ハンドル戻り値。
↓
鍵ハンドルに付随する利用者証明書データのデータ長を取得する。
hKey：CryptGetUserKey で取得した鍵ハンドル。

© JAHIS 2024
54

CryptGetKeyParam

CryptDestroyKey

CryptReleaseContext(B）

dwParam：取得するデータ種別として、KP_CERTIFICATE を指定。
pbData：取得データ戻り値バッファとして NULL を指定
pdwDataLen：データ長戻り値。
dwFlags：0 を指定。
↓
鍵ハンドルに付随する利用者証明書データのデータを取得する。
hKey：CryptGetUserKey で取得した鍵ハンドル。
dwParam：取得するデータ種別として、KP_CERTIFICATE を指定。
pbData：取得データ戻り値バッファ。前段で得たデータ長分のバッファを確保し、そのアドレスを指定。
pdwDataLen：データ長。前段で得たデータ長を指定。
dwFlags：0 を指定。
※ 証明書チェインの検証については、必要に応じて別途実施する。
↓
鍵ハンドルを破棄する。
hKey：CryptGetUserKey で得た鍵ハンドル。
↓
プロバイダハンドルを解放する。
hProv：プロバイダハンドル。
dwFlags：0 を指定。

署名処理

CryptAcquireContext

CryptGetUserKey

CryptGetKeyParam

暗号プロバイダとコンテナを指定して、プロバイダハンドルを取得する。
phProv：プロバイダハンドル戻り値。
szContainer：コンテナ名 NULL を設定する（デフォルトコンテナ）。
szProvider,：プロバイダ名を設定する。
電子署名用 CSP ならば"HPKI Crypto Service Provider for Non
Repudiation"、電子認証用 CSP ならば"HPKI Crypto Service
Provider for Authentication"を設定する。
dwProvType,：プロバイダタイプ PROV_RSA_AES を設定する。
dwFlags：0 を設定する。
↓
コンテナの保持する RSA 鍵ペアのハンドルを取得する。
hProv：CryptAcquireContext で取得したプロバイダハンドル
dwKeySpec：鍵種別として AT_SIGNATURE を指定。
phUserKey ：鍵ハンドル戻り値。
↓
鍵ハンドルに付随する利用者証明書データのデータ長を取得する。
hKey：CryptGetUserKey で取得した鍵ハンドル。
dwParam：取得するデータ種別として、KP_CERTIFICATE を指定。
pbData：取得データ戻り値バッファとして NULL を指定
pdwDataLen：データ長戻り値。
dwFlags：0 を指定。

© JAHIS 2024
55

CryptGetKeyParam

CryptCreateHash

ハッシュ値の生成
CryptSetHashParam

CryptSignHash

CryptSetProvParam

CryptSignHash↓
鍵ハンドルに付随する利用者証明書データのデータを取得する。
hKey：CryptGetUserKey で取得した鍵ハンドル。
dwParam：取得するデータ種別として、KP_CERTIFICATE を指定。
pbData：取得データ戻り値バッファ。前段で得たデータ長分のバッファを確保し、そのアドレスを指定。
pdwDataLen：データ長。前段で得たデータ長を指定。
dwFlags：0 を指定。
※ 証明書チェインの検証については、必要に応じて別途実施する。
↓
ハッシュオブジェクトの生成
hProv：プロバイダハンドルを指定。
Algid：ハッシュアルゴリズム CALG_SHA_256 を指定。
hKey： NULL を指定。
dwFlags：0 を指定。
phHash：ハッシュハンドル戻り値。
↓
署名対象データのハッシュ値を生成↓
ハッシュオブジェクトのパラメータを設定
hHash：ハッシュハンドル。
dwParam：ハッシュ値設定のため HP_HASHVAL を指定。
pbData：設定するハッシュ値。
dwFlags：0 を指定。
↓
ハッシュ値に署名を行った結果のデータ長を取得する。
hHash：ハッシュハンドル
dwKeySpec：署名に使用する鍵の種別として AT_SIGNATURE を指定。
szDescription：NULL を指定。
dwFlags：0 を指定。
pbSignature：NULL を指定。
pdwSigLen：署名長戻り値。
↓
署名用鍵の PIN を設定する。
hProv：プロバイダハンドル。
dwParam：署名鍵用の PIN 値として PP_SIGNATURE_PIN を指定。
pbData：ユーザ PIN 値。
dwFlags：0 を指定。
※ここで PIN を設定しない場合、次の CryptSignHash で CSP によって PIN 入力ダイアログが表示される。
↓
ハッシュ値に署名を行った結果を取得する。
hHash：ハッシュハンドル
dwKeySpec：署名に使用する鍵の種別として AT_SIGNATURE を指定。

© JAHIS 2024
56

CryptDestroyHash

CryptDestroyKey

CryptReleaseContext

szDescription：NULL を指定。
dwFlags：0 を指定。
pbSignature：前段で得たデータ長分のバッファを確保し、そのアドレスを指定。
pdwSigLen：前段で得たデータ長を指定。
↓
ハッシュオブジェクト破棄
hHash：ハッシュオブジェクトのハンドル↓
鍵ハンドルを破棄する。
hKey：CryptGetUserKey で得た鍵ハンドル。
↓
プロバイダハンドルを解放する。
hProv：プロバイダハンドル。
dwFlags：0 を指定。

A.6 CNG 利用のシーケンス(A）

利用者証明書取得処理

NCryptOpenStorageProvider

プロバイダ名を指定して、プロバイダハンドルを取得する。

NCryptOpenKey

phProvider: プロバイダハンドル格納用ポインタ
pszProviderName: プロバイダ名
dwFlags: 0↓
鍵ハンドルを取得する。

NCryptGetProperty

hProvider: NCryptOpenStorageProvider で取得したハンドル
phKey: 鍵ハンドル格納用ポインタ
pszKeyName: “Private key of HPKI”
dwLegacyKeySpec: 0
dwFlags: 0↓
証明書サイズを取得する。

NCryptGetProperty

hObject: NCryptOpenKey で取得したハンドル
pszProperty: NCRYPT_CERTIFICATE_PROPERTY
pbOutput: NULL
cbOutput: 0
pcbResult: サイズ格納用ポインタ
dwFlags: 0↓
証明書を取得する。

© JAHIS 2024
57

NCryptFreeObject

hObject: NCryptOpenKey で取得したハンドル
pszProperty: NCRYPT_CERTIFICATE_PROPERTY
pbOutput: 証明書格納用ポインタ
cbOutput: 格納領域サイズ
pcbResult: サイズ格納用ポインタ
dwFlags: 0↓
鍵ハンドルを解放する。

NCryptFreeObject

hObject: NCryptOpenKey で取得したハンドル↓
プロバイダハンドルを解放する。
hObject: NCryptOpenStorageProvider で取得したハンドル

(B）

署名処理

NCryptOpenStorageProvider

プロバイダ名を指定して、プロバイダハンドルを取得する。

NCryptOpenKey

phProvider: プロバイダハンドル格納用ポインタ
pszProviderName: プロバイダ名
dwFlags: 0↓
鍵ハンドルを取得する。

NCryptSetProperty

hProvider: NCryptOpenStorageProvider で取得したハンドル
phKey: 鍵ハンドル格納用ポインタ
pszKeyName: “Private key of HPKI”
dwLegacyKeySpec: 0
dwFlags: 0↓
ダイアログ表示用の Window ハンドルを設定する。

ハッシュ値の生成
NCryptSignHash

hObject: NCryptOpenKey で取得したハンドル
pszProperty: NCRYPT_WINDOW_HANDLE_PROPERTY
pbInput: Window ハンドル
cbInput: Window ハンドルのサイズ (バイト)dwFlags: 0↓
署名対象データのハッシュ値を生成する。(SHA-256)↓
署名値のサイズを取得する。
hKey: NCryptOpenKey で取得したハンドル
pPaddingInfo: 以下の値が設定された© JAHIS 2024
58

NCryptSignHash

BCRYPT_PKCS1_PADDING_INFO 構造体を指定
pszAlgId=BCRYPT_SHA256_ALGORITHM
pbHashValue: ハッシュ値
cbHashValue: ハッシュ値のサイズ
pbSignature: NULL
cbSignature: 0
pcbResult: サイズ格納用ポインタ
dwFlags: BCRYPT_PAD_PKCS1↓
署名を実施する。

NCryptFreeObject

hKey: NCryptOpenKey で取得したハンドル
pPaddingInfo: 以下の値が設定された
BCRYPT_PKCS1_PADDING_INFO 構造体を指定
pszAlgId=BCRYPT_SHA256_ALGORITHM
pbHashValue: ハッシュ値
cbHashValue: ハッシュ値のサイズ
pbSignature: 署名値格納用ポインタ
cbSignature: 署名値のサイズ
pcbResult: サイズ格納用ポインタ
dwFlags: BCRYPT_PAD_PKCS1↓
鍵ハンドルを解放する。

NCryptFreeObject

hObject: NCryptOpenKey で取得したハンドル↓
プロバイダハンドルを解放する。
hObject: NCryptOpenStorageProvider で取得したハンドル© JAHIS 2024
59

附属書 B（参考）PKI アプリケーションの構造例
B.1 概要複数の事業者が HPKI 認証局の運用を行うことを前提に、カードに搭載される PKI カードアプリケーシ
ョンに関して、以下の条件の下で、相互運用性確保の仕様を検討する。
・各 HPKI 認証局が独自のカードを発行する。
・証明書は、医療従事者等のエンドエンティティの証明書と認証局の証明書となる。
・HPKI で署名用証明書を利用した署名演算には、署名を行うたびに PIN の照合が必要とする。
・ファイル構造、コマンド、シーケンスは、標準に従う
B.2 以降で示すのは一例であって、実際の事業者の発行するカード及びカードに搭載されたアプリケーシ
ョンの構造とは異なる。実際のカード及びカードに搭載されたアプリケーションの利用に当たっては、各事
業者のカード及びアプリケーション仕様、提供されるソフトウェアモジュールの仕様に従って動作を確認する必要がある。

B.2 ファイル構造
DF/アプリケーションの構造例を図 B.1 に示す。

DF/アプリケーション

CIAInfo(12)EF.OD(11)
EF.PrK(14)EF.CD(15)
EF.AOD(13)IEF(16)PIN

IEF(17)私有鍵

WEF(18)

証明書(1)

WEF(19)証明書(2)

WEF(1A)証明書(3)

WEF(1B)

証明書(4)

図 B.1

厚労省のルートからエンドエンティティの証明書まで

ISO/IEC 7816-15 に準拠したファイル構造例

注 1）追加の信頼点の証明書に関しては、考慮していない。

© JAHIS 2024
60

注 2）カッコ内の数字(XX)は、短縮 EF 識別子を示す。
注 3）カード内に複数のアプリケーションが存在する場合でも、EF.DIR は存在しないものとする

B.3 PKI アプリケーションの識別（AID）
ISO/IEC 7816-15 に従う。RID は、ISO/IEC 7816-15 で決められるので、個別アプリケーション識別子(PIX)部分を各 HPKI 認証局が定める ID とする。
E8 28 BD 08 0F XX XX XX XX XX XX XX XX XX XX XX
7816-15 の RID認証局から与えられる(最大 16 バイト)

注）XX の値は、厚生労働省が指定する。全体で最大 16 バイトとなる。

B.4 各 EF の内容
B.4.1 概要
ISO/IEC 7816-15 に従って規定する。すべて、短縮 EF 識別子を用いる。表 B.1 に一例を示す。暗号情報の一例を B.4.2、B.4.3、B.4.4、B.4.5 及び B.4.6 に示す。

AOD
PrKD
CD
IEF
IEF
WEF
WEF

短縮 EF 識別子‘12’ (ISO/IEC
7816-15)で指定)‘11’ (ISO/IEC
7816-15 で指定)‘13’ (例)‘14’ (例)‘15’ (例)‘16’ (例)‘17’ (例)‘18’ (例)‘19’ (例)

WEF
WEF

‘1A’
‘1B’

ファイル
CIAInfo

OD

(例)
(例)

表 B.1 必要となるファイル一覧
EF 識別子ファイルタイプ

内容‘5032’ ISO/IEC 透過
7816-15 指定)

B.4.2： カード情報‘5031’ (ISO/IEC 透過
7816-15 で指定)

B.4.3：オブジェクト情報事業者が定める事業者が定める事業者が定める事業者が定める事業者が定める事業者が定める事業者が定める

透過
透過
透過

事業者が定める事業者が定める

透過
透過

B.4.4：認証オブジェクト情報
B.4.5：私有鍵情報
B.4.6：証明書情報
PIN 格納 (VERIFY 用)
私有鍵格納 (署名用)証明書格納(エンティティ)
信 頼 点 の 証 明 書 格 納 (HPKI
ROOT 認証局の自己署名証明書)
下位認証局への証明書格納
下位認証局への証明書：追加

透過
透過B.4.2 EF.CIAInfo
CIAInfo ::= {version v2,
label “HPKI Application”, -- オプション
cardflags { authRequired, prnGeneration } -- 暗号演算に利用者認証必要、乱数生成あり}© JAHIS 2024
61

B.4.3 EF.OD
authObjects : -- EF.AOD へのパス
path : {efidOrPath '98'H -- EF.AOD の短縮 EF 識別子 ’13’},
privateKeys : -- EF.PrKD へのパス
path : {efidOrPath 'A0'H -- EF.PrKD の短縮 EF 識別子 ’14’},
certificates : -- EF.CD へのパス
path : {efidOrPath 'A8'H -- EF.CD の短縮 EF 識別子 ’15’}
B.4.4 EF. AOD
pwd : { -- パスワード
commonObjectAttributes {label "PIN ", -- オプション
flags { modifiable }, -- オプション 変更可能},
classAttributes {authId '16'H – 識別するための ID},
typeAttributes {pwdFlags {case-sensitive, -local, -- このアプリケーション/DF 内でのみ有効
initialized -- 初期化されている},
pwdType utf8, -- UTF8 文字セットは CryptAPI の条件により、ASCII となる
minLength 4, -- 最小の長さ
storedLength 16, -- 格納の長さ
maxLength 16, -- 最大の長さ
pwdReference ‘96’H-- Verify コマンドの P2 パラメータ(アプリ固有の PIN)IEF の短縮 EF 識別子 '16'}}
B.4.5 EF.PrKD
privateRSAKey : {commonObjectAttributes {label "Private key of HPKI",
flags { private }, -- 利用に認証が必要
authId '16'H – 必要となる AOD エントリ
userConsent 1 – 私有鍵によって署名を付加する際に、毎回認証を行う（電子署名 PKI カード© JAHIS 2024
62

アプリケーションの場合は必要。電子認証用の場合には必要ない）
accessControlRules {{accessMode { execute }, -- 実行securityCondition: {authId : '16'H, -- pointer to the AOD-entry}}}}
classAttributes {iD '17'H, -- 識別のための ID（EF 識別子を利用し、証明書と共通にする）
usage { nonRepudiation }, （電子認証用の場合には sign）},
typeAttributes {value {
efidOrPath 'B8'H -- IEF の短縮 EF 識別子 '17'},
modulusLength 2048}}
B.4.6 EF.CD
x509Certificate : {commonObjectAttributes {label "HPKI END ENTITY CERTIFICATE",}
classAttributes {iD '17'H --識別のための ID（私有鍵と共通にする）},
typeAttributes {value indirect :path : {efidOrPath 'C0'H -- 格納された WEF の短縮 EF 識別子 '18'}}},
x509Certificate : {commonObjectAttributes {label " MHLW CA CERTIFICATE ", --厚労省の CA 証明書}
classAttributes {iD '19'H --識別のための ID（EF 識別子と同じとする）
authority TRUE -- CA の証明書},
typeAttributes {© JAHIS 2024
63

value indirect :path : {efidOrPath 'C8'H -- 格納された WEF の短縮 EF 識別子 '19'}}｝
x509Certificate : {commonObjectAttributes {label " HPKI ROOT CA CERTIFICATE", --各事業者の CA}classAttributes {iD '1A'H --識別のための ID（EF 識別子と同じとする）
authority TRUE – 厚労省の証明書},
typeAttributes {value indirect :path : {efidOrPath 'D0'H – 格納された WEF の短縮 EF 識別子 '1A'}}｝
中間 CA が存在する場合にはもう１つ X509 オブジェクトを追加する
x509Certificate : {commonObjectAttributes {label " HPKI CA CERTIFICATE ", --各事業者の中間 CA}
classAttributes {iD '1B'H --識別のための ID（EF 識別子と同じとする）
authority TRUE – 中間 CA の証明書},
typeAttributes {value indirect :path : {efidOrPath 'D8'H – 格納された WEF の短縮 EF 識別子 '1B'}}｝

附属書 C（参考）PKI アプリケーション利用のコマンド
C.1 コマンド一覧
本ガイドラインでは、以下のコマンドについて満たすべき最低限の仕様を提示する。

© JAHIS 2024
64

SELECT FILE (ISO/IEC 7816-4)
VERIFY (ISO/IEC 7816-4)
READ BINARY (ISO/IEC 7816 -4)
MANAGE SECURITY ENVIRONMENT (ISO/IEC 7816-4)
PERFOM SECURITY OPERATION (ISO/IEC 7816-8)
C.2 で各コマンドの最低限満たすべき仕様を示す。ステータスワードは、代表的な例であって、カードの実装に応じて ISO/IEC 7816-4 で規定される他のステータスワードを適切に出力してもよい。

C.2 SELECT
C.2.1 条件・ アプリケーション/DF のパーシャルセレクトが可能
・ FCI にて選択されたアプリケーション/DF の AID が取得可能
C.2.2 コマンドメッセージ
DF 選択
CLA
“00”
(1)

INS
“A4”
(1)

P1
“XX”
(1)

P2
“XX”
(1)

EF 選択
CLA
“00”
(1)

INS
“A4”
(1)

P1
“XX”
(1)

P2
“XX”
(1)

Lc

データ

Le

(1)

(1～16)(0 or 1)

Lc

データ
(EF 識別子)
(2)

(1)

パラメータ

長さ

P1
P2
Lc
データ
Le

1
1
1
1～16
1

P1 コーディング
b8 b7 b6

b5

b4

b3

b2

b1

意味

0
0

0
0

0
0

0
1

x
1
0

x
0
0

ファイル ID による選択
カレント DF 直下の EF
DF 名選択P2 コーディング
b8 b7 b6

b5

b4

b3

b2

b1

意味

0
0
0
0

0
1
-

0
1-

0
1

0
0

FCI オプションテンプレート応答
FCI 応答なし(EF 識別子による選択時)
最初または唯一のファイル
次ファイル（パーシャル DF 名指定可）

0
0

0
0
0
0

0
0

0
0
0
0

0
0
0
0

意味

備考

選択制御子
選択オプション
ファイル識別子 or ファイル名の長さ
ファイル識別子 or ファイル名
FCI データのバイト数© JAHIS 2024
65

C.2.3 レスポンスメッセージ
レスポンス APDU
データ
SW1
(1)
(1)
パラメータ

SW2
(1)

長さ

意味

備考

データ
5～30
FCI(TAG=”84”)テンプレート
TAG=”84” :DF 名
SW1
1
SW2
1
注）レスポンスの SW1 及び SW2 が”90 00”以外の場合のデータ長は、0 となる
データ部
長さ
“6F”
(1)
(1)

“84”
(1)

長さ
(1)

DF 名
(1～16)

C.2.4 ステータスワード
ステータスワードの意味
SW1
SW2
正常終了
“90”
“00”
選択された DF が閉そくしている
“62”
“83”
選択された EF の親 DF が閉そくしている
Lc および Le フィールドが間違っている。
“67”
“00”
APDU の長さが間違っている。
指定された論理チャネル番号によるアクセス機能を提供しない
“68”
“81”
CLA バイトで指定されたセキュアメッセージング機能を提供しない“82”
機能が提供されない“6A”“81”
アクセス対象意ファイルがない“82”
P1 P2 の値が正しくない“86”
Lc の値が P1 P2 と矛盾している“87”

C.3 VERIFY
C.3.1 条件
・ 短縮 EF 識別子での実行
C.3.2 コマンドメッセージ
CLA
“00”
(1)

INS
“20”
(1)

P1
“XX”
(1)

パラメータ

長さ

P1
P2

1
1

P2
“XX”
(1)

Lc

データ

(1 or なし)

(可変 or なし)

意味なし（”00”固定）
参照データの限定© JAHIS 2024
66

備考

1 or なし
可変 or なし

Lc
データ
P2 コーディングB8 b7 b6
1
1

0
0

0
0

照合データ

b5

b4

b3

b2

b1

意味

0
x

0
x

0
x

0
x

0
x

特定の参照データ
カレント EF
短縮 EF 識別子（"11111”以外）

C.3.3 レスポンスメッセージ
レスポンス APDU
SW1
SW2
(1)
(1)
パラメータ

長さ

SW1
SW2

1
1

意味

備考

C.3.4 ステータスワード
ステータスワードの意味
SW1
SW2
正常終了
“90”
“00”
照合不一致とする“63”“00”
照合不一致[X によって、残りの再試行可能回数(0-15)を示す]“CX”
Lc および Le フィールドが間違っている。
“67”
“00”
APDU の長さが間違っている。
指定された論理チャネル番号によるアクセス機能を提供しない
“68”
“81”
CLA バイトで指定されたセキュアメッセージング機能を提供しない“82”
ファイル構造と矛盾したコマンド
“69”
“81”
認証方法を受け付けない“83”
参照された IEF が閉そくしている“84”
機能が提供されない“6A”“81”
短縮 EF 識別子で指定した IEF がない“82”
P1 P2 の値が正しくない“86”
Lc の値が P1 P2 と矛盾している“87”
参照された鍵が正しく設定されていない“88”

C.4 READ BINARY
C.4.1 条件
・ 短縮 EF 識別子での実行
C.4.2 コマンドメッセージ
CLA

INS

P1

P2

Lc

© JAHIS 2024
67

“00”
(1)

“B0”
(1)

“XX”
(1)

“XX”
(1)

(1)

パラメータ

長さ

意味

備考

P1-P2

各1

読み出し対象短縮 EF 識別子及び先頭のバイナリデータのオフ
セットLe

1 or 3

P1-P2 コーディング
P1

P2

B8

b7

b6

b5

b4

b3

b2

b1

0
0
1
1

x
0
0
0

x
0
0
0

x
0
x

x
0
x

x
0
x

x
0
x

x
0
x

C.4.3 レスポンスメッセージ
レスポンス APDU
データ
SW1
(可変)
(1)

-xx
--xx

意味
カレント EF 指定
オフセット(15 ビット)カレント EF 指定
短縮 EF 識別子（”11111”以外）
オフセット(8 ビット)

SW2
(1)

パラメータ

長さ

意味

データ
SW1
SW2

可変
1
1

読み出されたデータ

備考

C.4.4 ステータスワード
ステータスワードの意味
SW1
SW2
正常終了
“90”
“00”
DF が閉そくしている
“62”
“83”
Lc および Le フィールドが間違っている。
“67”
“00”
APDU の長さが間違っている。
指定された論理チャネル番号によるアクセス機能を提供しない
“68”
“81”
CLA バイトで指定されたセキュアメッセージング機能を提供しない“82”
ファイル構造と矛盾したコマンド
“69”
“81”
認証方法を受け付けない“83”
機能が提供されない“6A”“81”
短縮 EF 識別子で指定したファイルがない“82”
P1 P2 の値が正しくない“86”
Lc の値が P1 P2 と矛盾している“87”© JAHIS 2024
68

C.5 MANAGE SECURITY ENVIRONMENT
C.5.1 条件
・ 署名鍵の指定
C.5.2 コマンドメッセージ
CLA
INS
P1
“00”
“22”
“XX”
(1)
(1)
(1)
パラメータ

長さ

P1
P2

1
1

Lc
データ

1
4

P2
“XX”
(1)

Lc

データ

(1)

(可変)

意味

備考

“41”: SETP1 が SET あるいは GET CRT の “B6” （電子署名用 CRT）
場合は、テンプレートのタグ
データ長
Tag= ”81”, Len= ”02” , EF 識別子

C.5.3 レスポンスメッセージ
レスポンス APDU
SW1
SW2
(1)
(1)
パラメータ

長さ

SW1
SW2

1
1

意味

備考

C.5.4 ステータスワード
ステータスワードの意味
SW1
SW2
正常終了
“90”
“00”
DF が閉そくしている（カレント SE 利用できない）
“62”
“83”
Lc および Le フィールドが間違っている。
“67”
“00”
APDU の長さが間違っている。
指定された論理チャネル番号によるアクセス機能を提供しない
“68”
“81”
CLA バイトで指定されたセキュアメッセージング機能を提供しない“82”
セキュリティステータスが満足されない
“69”
“82”
コマンドの使用条件が満足されない“85”
データフィールドのタグが正しくない
“6A”
“80”
Lc の値が、TLV 構造に矛盾している“85”
P1 P2 の値が正しくない“86”

C.6 PERFORM SECURITY OPERATION
C.6.1 条件

© JAHIS 2024
69

・ 私有鍵での電子署名暗号演算の実行
・ パディングはカード外で行う
C.6.2 コマンドメッセージ
CLA
INS
P1
“00”
“2A”
“XX”
(1)
(1)
(1)
パラメータ

長さ

P1
P2
Lc
データ
Le

1
1
1 or 3可変
1 or 2C.6.3 レスポンスメッセージ
レスポンス APDU
データ
SW1
(可変)
(1)
パラメータ

長さ

データ
SW1
SW2

可変
1
1

P2
“XX”
(1)

Lc

データ

Le

(1)

(可変)

(1 or 3)意味
“9E”（デジタル署名）“9A” (データフィールドが署名)
データ長署名されるデータ

備考
Encipher 処理

SW2
(1)
意味

備考

電子署名データC.6.4 ステータスワード
ステータスワードの意味
SW1
SW2
正常終了
“90”
“00”
DF が閉そくしている（カレント SE 利用できない）
“62”
“83”
Lc および Le フィールドが間違っている。
“67”
“00”
APDU の長さが間違っている。
指定された論理チャネル番号によるアクセス機能を提供しない
“68”
“81”
CLA バイトで指定されたセキュアメッセージング機能を提供しない“82”
セキュリティステータスが満足されない
“69”
“82”
コマンドの使用条件が満足されない“85”
データフィールドのタグが正しくない
“6A”
“80”
Lc の値が、TLV 構造に矛盾している“85”
P1 P2 の値が正しくない“86”© JAHIS 2024
70

附属書 D（参考）IC カードリーダライタとのインタフェース
IC カードリーダライタとのインタフェースとしてプラットフォームにより以下の二つが存在する。
１）PC/SC （MS-Windows におけるインタフェース）
２）PCSC-Lite( LINUX や Mac OS など UNIX 系の OS におけるインタフェース)
IC カードリーダライタが、PC などに接続される物理的インタフェースには、RS-232C、PCMCIA、USB等がある。PC/SC や PCSC-Lite は、こうした物理的インタフェースの違いや、異なるベンダーの IC カード
リーダライタの論理的なインタフェースの仕様の違いも吸収し、IC カードリーダライタのアプリケーション
に対して IC カードリーダライタへの汎用的な API を提供する。HPKI 用 IC カードガイドラインにおいても、特定の IC カードリーダライタへの依存性を最小限にするためにするため、PC/SC や PCSC-Lite といったフレームワーク上で動作することを推奨している。ここでは、PC/SC、PCSC-Lite、更に、USB インタフ
ェースを持つ IC カードリーダライタにおけるドライバの標準である USB CCID(Chip/Smart Card
Interface Devices)について概説する。
◇PC/SC(Personal Computer/Smart Card)

PC/SC は、ベンダー各社が製造する IC カード、IC カードリーダライタを、Windows 環境上で相互利用できるようにするためのインタフェース仕様として、米マイクロソフト社を中心とした複数のベンダーからなる PC/SC ワークグループによって定められ、1997 年 12 月にバージョン 1.0 がリリースされ、 2005 年 6月には、2017 年現在の最新版であるバージョン 2.01 がリリースされている。
PC/SC においては、IC カードリーダライタのベンダーが、PC/SC に準拠した、個々の IC カードリーダ
ライタのドライバを提供する必要がある。
IC カードリーダライタのアプリケーション(HPKI 用 IC カードガイドラインにおいては、PKCS #11 などの PKI 機能を提供する汎用ミドルウェア）は、PC/SC の API を利用することにより、個別の IC カードリ
ーダライタのドライバを直接ハンドリングせず、ドライバから独立した実装が可能になっている。
Windows 環境では、マイクロソフト社の WHQL(Windows Hardware Quality Labs)が、IC カードリー
ダライタのようなハードウェアとドライバの認定を行っている。IC カードリーダライタと、対応するドライ
バに関して PC/SC に準拠した形での WHQL の認定が行われており、比較的安定した動作を行う製品が数多く販売されている。
◇PCSC-Lite
PCSC-Lite は、LINUX や Mac OS など UNIX 系の OS において、PC/SC と同様の目的のために仕様が作成され、オープンソースソフトウェアとして提供されている。PCSC-Lite は、仕様的には、PC/SC のサブ
セットであるが、LINUX など UNIX 系の OS での実装可能な仕様となっている。PC/SC 同様、あるベンダーIC カードリーダライタを利用するためには、その IC カードリーダライタのためのドライバを PCSC-Liteに組み入れることになる。ただし、PCSC-Lite においては、マイクロソフト社のような認定制度(WHQL による認定)は存在せず、また、多くの場合、IC カードリーダ・ライタベンダーは、ドライバを提供していない。代わって、オープンソースコミュニティが、PCSC-Lite 準拠した、IC カードリーダライタのドライバを提供している。そのため、現時点では、PCSC-Lite で動作させることのできる IC カードリーダライタは、
PC/SC ほど多くはない。利用に当たっては、動作の範囲に注意する必要がある。

© JAHIS 2024
71

◇USB CCID

(Chip/Smart Card Interface Devices)

IC カードリーダライタの物理的インタフェースには、USB が非常に多く利用されつつある。USB の物理的インタフェースの IC カードリーダライタのインタフェースの仕様として、USB CCID (Chip/Smart Card
Interface Devices)がある。USB CCID の仕様は、USB working group により 2001 年 3 月に Rev1.0、2005
年 4 月に Rev1.1 がリリースされている。
PC/SC に準拠した Windows プラットフォームの USB CCID のドライバは、マイクロソフトにより提供されている。また、PCSC-Lite 準拠した USB CCID のドライバは、オープンソースコミュニティにより提供されている。そのため、USB CCID に準拠した IC カードリーダライタの場合、IC カードリーダライタ固有のドライバの提供を行う必要がない。こうしたことから、新しい USB の IC カードリーダライタは、USB
CCID に準拠した製品が多い。

© JAHIS 202472

付録―１．参考文献
ISO 17090-3 Health informatics – Public key infrastructure – Part 3: Policy management of certification
authority
PC/SC Specifications https://www.pcscworkgroup.com/specifications/download/
電 子 政 府 に お け る 調 達 の た め に 参 照 す べ き 暗 号 の リ ス ト (CRYPTREC 暗 号 リ ス ト )https://www.cryptrec.go.jp/list.html© JAHIS 202473

付録―２．作成者名簿作成者（社名五十音順）
梅野 智靖

アライドテレシス㈱DUCH JAKUB

アライドテレシス㈱有馬 一閣㈱NTT データ

宇都宮 博㈱バッファロー

梶山 孝治

富士フイルムヘルスケア㈱喜多 紘一(一社)保健医療福祉情報安全管理適合性評価協会(HISPRO)

茗原 秀幸

三菱電機㈱

太田 英憲

三菱電機インフォメーションシステムズ㈱酒巻 一紀

三菱電機インフォメーションシステムズ㈱谷内田 益義㈱リコー© JAHIS 202474

日付
2018/05/08

バージョン
Ver. 3.0

改定履歴
内容
・HPKI 対応 IC カードガイドライン 第 1 版及び第2 版の統合・参照規格等の最新情報への更新
・Windows の新しいインタフェースの仕様追加
・技術の進展に合わせた例の修正

2023/01/19

Ver 3.0a

・JIS X 6320 シリーズの廃止に伴う修正・相互運用性に関する記述の追加
・引用規格・引用文献および参考文献の最新情報への更新
・暗号の危殆化に関する記載の追加

2024/01/11

Ver 3.1

・HPKI 証明書ポリシの改訂に合わせた私有鍵保存機
能の記述修正・IC カードの利用のシーケンスの誤りおよび RSA の鍵長 2048 ビット利用に即した例の修正
・IC カードの利用のシーケンスの修正に伴う PKI ア
プリケーション利用のコマンドの修正・引用規格・引用文献の最新情報への更新（ＪＡＨＩＳ標準 24－002）
２０２４年４月発行
ＪＡＨＩＳ HPKI 対応 IC カードガイドライン Ver .3.1
発行元 一般社団法人 保健医療福祉情報システム工業会〒１０５－０００４ 東京都港区新橋２丁目５番５号（新橋２丁目ＭＴビル５階）
電話 03-3506-8010

FAX 03-3506-8070（無断複写・転載を禁ず）© JAHIS 2024
75