メインコンテンツまでスキップ

内部認証データの作成

このページでは、PocketSign Verify SDK を使用してマイナンバーカードに搭載された券面事項確認 AP から、内部認証データを読み出します。

内部認証は、券面事項確認 AP の生年月日読出機能を用います。 読み出しに使用する暗証番号は「生年月日 6 桁」です。 事前に署名用電子証明書による署名検証や券面事項入力補助 AP を利用して生年月日を取得しておいてください。

あらかじめ券面事項の読み出しに対応した SDK の準備を完了しておいてください。

シーケンス

実装例

ここでは、カードの内部認証に用いる Nonce が 0xCAFEBABE の場合の実装例を示します。

要確認

この資料では説明の都合上省略していますが、Nonce は原則としてバックエンド側で生成する必要があります。 クライアントサイドで Nonce を生成する実装は、セキュリティ上の問題があるためご注意ください。

また、一度使用した Nonce は再利用することはできず、基本4情報の要求時には毎回新しい Nonce を生成する必要があります。

func run(pin: String) async throws -> String {
// 券面事項確認APへの接続準備を行います。
let session = ReaderSession(dispatchQueue: DispatchQueue.main)

// 券面事項確認APを初期化します。
let ap = ConfirmationAP(session: session)

// 内部認証のためのNonceを設定します。
let nonce = Data([0xCA, 0xFE, 0xBA, 0xBE])

// 券面事項確認APに対して生年月日の読み出しを行います。
let result = try await ap.readDateOfBirthContentWithDateOfBirthPassword(password: pin, nonce: nonce, hashAlgorithm: .sha256)

session.close()
return "署名検証用公開鍵: \(result.verificationPublicKey?.base64EncodedString() ?? "")\n"
+ "内部認証の署名値: \(result.authenticationSignature?.base64EncodedString() ?? "")\n"
+ "Nonceのハッシュ値: \(result.digest?.base64EncodedString() ?? "")\n"
+ "生年月日: \(result.dateOfBirthContent?.base64EncodedString() ?? "")\n"
}
ヒント

モック環境では、FeliCa カード(交通系 IC カード、Edy、WAON など)や、ISO/IEC 14443-4 Type-A カード(クレジットカードなど)をタッチすると、マイナンバーカードの挙動がシミュレートされます。 詳しくはSDK リファレンスをご覧ください。

実行結果

券面事項情報の読み出しに成功すると、以下のように Base64 エンコードされた 署名検証用公開鍵、内部認証の署名値などが表示されます。 内部認証データの検証時には、これらを PocketSign Verify API に送信します。


次のステップ

PocketSign Verify API を使用して、内部認証データの検証を行いましょう。

その他、SDK の詳しい使い方やエラーの詳細等については、SDK リファレンスをご覧ください。