JPKIAP

class JPKIAP(session: ReaderSession) : JPKIAPInterface<ByteArray>

マイナンバーカードのJPKI APを操作するクラス

暗証番号

このAPが利用する暗証番号は2種類です。 それぞれ以下の通り形式が仕様として定められています。

  • 署名用電子証明書用暗証番号: 6〜16桁の半角英数字、英字は大文字のみ

  • 利用者証明用電子証明書用暗証番号: 4桁の半角数字

暗証番号の正規化

署名用電子証明書用暗証番号については、仕様上英小文字が使用されることがないため、入力された小文字を大文字に変換してカードに送信します。

試行可能回数

それぞれの暗証番号は、以下の通り試行できる回数に限りがあります。

  • 署名用電子証明書用暗証番号: 5回

  • 利用者証明用電子証明書用暗証番号: 3回

それぞれの試行可能回数は独立して管理されており、他の暗証番号の試行に影響を受けません。 暗証番号の試行可能回数は、照合に成功した場合にリセットされます。 試行回数が0になった場合、当該暗証番号はロックされ、解除されるまで利用できなくなります。

暗証番号誤りに起因する例外

暗証番号の照合を行い、不一致であった場合にはCommandExecutionExceptionが発生します。 このとき、CommandExecutionException.statusCommandResponseStatus.IncorrectPasswordとなります。

試行可能回数が0回になり、ロックされている状態で暗証番号の照会を試みた場合にもCommandExecutionExceptionが発生します。 このとき、CommandExecutionException.statusCommandResponseStatus.CommandExecutionError.ReferencedIEFClosedとなります。

証明書の取り扱い

法令要求のため、このAPから取得できる証明書のうちエンドユーザに対して発行された証明書(SigningResult.certificate)は、SP事業者が自身のシステムに保存することができません。 これらのデータはサーバに保存せず、PocketSign Verify APIに送信した後に必ず破棄してください。

証明書のパース

証明書には、SP事業者が扱うことのできない情報が含まれるため、端末上もしくはサーバ上でパースしないでください。

PocketSign Verify APIが提供する署名検証APIは、証明書の記載事項をパースして返す機能を提供しています。 基本4情報(氏名、住所、生年月日、性別)などの証明書記載事項を利用する必要がある場合は、PocketSign Verify APIをご利用ください。

署名の作成

signDataWithDigitalSignatureSecretKeyもしくはsignDataWithUserAuthenticationSecretKeyを使用して署名対象のバイナリデータから署名値を作成することができます。 既にハッシュ化された値に対して署名を行いたい場合は、signDigestWithDigitalSignatureSecretKeyもしくはsignDigestWithUserAuthenticationSecretKeyを利用できます。

これらのメソッドは、PocketSign Verify APIに署名検証リクエストを送信する際に必要になる証明書についても同時に取得します。

対応するハッシュ関数

ダイジェストの作成に利用できるハッシュ関数は、CRYPTREC暗号リスト(電子政府推奨暗号リスト)で推奨されるハッシュ関数のみです。 PocketSign Verify SDKでは、CRYPTREC LS-0001-2022を参照しており、このうち以下のハッシュ関数のみに対応しています。

署名の検証

このSDKによって作成した署名データは、PocketSign Verify APIによって検証することができます。 SP事業者が自身で検証を行うことはできないため、ご注意ください。

詳しくはVerify APIリファレンスをご参照ください。

トークンの管理

PocketSign Verify APIの利用は、必ずSP事業者が管理するサーバを経由して行ってください。 APIトークンをアプリケーションに含めて配布することは、Verify APIの不正利用、ひいてはJPKIへの不正なアクセスににつながるため、絶対に行わないでください

Constructors

Link copied to clipboard
constructor(session: ReaderSession)

同一のReaderSessionインスタンスは単一の通信セッション内で実行されます。複数のAPを使用しながら一回のカードタッチで完了させたい操作がある場合、同一のインスタンスを使用してこのクラスを初期化してください。

Functions

Link copied to clipboard
open suspend override fun changeDigitalSignaturePassword(password: String, newPassword: String)

署名用電子証明書用暗証番号を変更する

Link copied to clipboard
open suspend override fun changeUserAuthenticationPassword(password: String, newPassword: String)

利用者証明用電子証明書用暗証番号を変更する

Link copied to clipboard
open suspend override fun createConsentApplication(password: String, serviceID: String, serviceProviderID: String, preference: ERROR CLASS: Symbol not found for Preference): ByteArray

署名用電子証明書を用い最新の基本4情報(氏名、住所、生年月日、性別)取得に関する利用者同意申請情報を作成する

Link copied to clipboard
open suspend override fun createRevocationApplication(password: String, serviceID: String, serviceProviderID: String): ByteArray

署名用電子証明書を用い最新の基本4情報(氏名、住所、生年月日、性別)取得に関する利用者同意取消申請情報を作成する

open suspend override fun getDigitalSignaturePasswordRemainingRetries(): ERROR CLASS: Symbol not found for RemainingRetries

署名用電子証明書用暗証番号の残り試行回数を取得する

open suspend override fun getUserAuthenticationPasswordRemainingRetries(): ERROR CLASS: Symbol not found for RemainingRetries

利用者証明用電子証明書用暗証番号の残り試行回数を取得する

Link copied to clipboard
open suspend override fun signDataWithDigitalSignatureSecretKey(password: String, data: ByteArray, hashAlgorithm: ERROR CLASS: Symbol not found for HashAlgorithm): ERROR CLASS: Symbol not found for SigningResult<kotlin/ByteArray>

署名用電子証明書に対応する秘密鍵で署名値を作成する

Link copied to clipboard
open suspend override fun signDataWithUserAuthenticationSecretKey(password: String, data: ByteArray, hashAlgorithm: ERROR CLASS: Symbol not found for HashAlgorithm): ERROR CLASS: Symbol not found for SigningResult<kotlin/ByteArray>

利用者証明用電子証明書に対応する秘密鍵で署名値を作成する

Link copied to clipboard
open suspend override fun signDigestWithDigitalSignatureSecretKey(password: String, digest: ByteArray, hashAlgorithm: ERROR CLASS: Symbol not found for HashAlgorithm): ERROR CLASS: Symbol not found for SigningResult<kotlin/ByteArray>

署名用電子証明書に対応する秘密鍵で署名値を作成する

open suspend override fun signDigestWithUserAuthenticationSecretKey(password: String, digest: ByteArray, hashAlgorithm: ERROR CLASS: Symbol not found for HashAlgorithm): ERROR CLASS: Symbol not found for SigningResult<kotlin/ByteArray>

利用者証明用電子証明書に対応する秘密鍵で署名値を作成する