マイナンバー画像の読み出し
このページでは、PocketSign Verify SDK を使用してマイナンバーカードに搭載された券面事項確認 AP から、 マイナンバー画像を読み出します。
あらかじめ券面事項の読み出しに対応した SDK の準備を完了しておいてください。
シーケンス
実装例
ここでは、カードの内部認証に用いる Nonce が 0xCAFEBABE
の場合の実装例を示します。
要確認
この資料では説明の都合上省略していますが、Nonce は原則としてバックエンド側で生成する必要があります。 クライアントサイドで Nonce を生成する実装は、セキュリティ上の問題があるためご注意ください。
また、一度使用した Nonce は再利用することはできず、マイナンバー画像の要求時には毎回新しい Nonce を生成する必要があります。
- iOS
- Android
- Web(PaSoRi)
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.readMyNumberContentWithVerificationNumberA(
password: pin, nonce: nonce, hashAlgorithm: .sha256)
session.close()
return "署名検証用公開鍵: \(result.verificationPublicKey?.base64EncodedString() ?? "")\n"
+ "内部認証の署名値: \(result.authenticationSignature?.base64EncodedString() ?? "")\n"
+ "Nonceのハッシュ値: \(result.digest?.base64EncodedString() ?? "")\n"
+ "マイナンバー画像: \(result.myNumberContent?.base64EncodedString() ?? "")\n"
}
suspend fun run(pin: String): String {
// 券面事項確認APへの接続準備を行います。
val session = ReaderSession(this, this)
// 券面事項確認APを初期化します。
val ap = ConfirmationAP(session)
// 内部認証のためのNonceを設定します
val nonce = byteArrayOf(0xCA.toByte(), 0xFE.toByte(), 0xBA.toByte(), 0xBE.toByte())
// 券面事項確認APに対してマイナンバー画像の読み出しを行います。
val result = ap.readMyNumberContentWithVerificationNumberA(pin, nonce, HashAlgorithm.SHA256)
session.close()
return "署名検証用公開鍵: ${Base64.encodeToString(result.verificationPublicKey, Base64.NO_WRAP)}\n" +
"内部認証の署名値: ${Base64.encodeToString(result.authenticationSignature, Base64.NO_WRAP)}\n" +
"Nonceのハッシュ値: ${Base64.encodeToString(result.digest, Base64.NO_WRAP)}\n" +
"マイナンバー画像: ${Base64.encodeToString(result.myNumberContent, Base64.NO_WRAP)}\n"
}
const run = async (pin: string) => {
// 券面事項確認APへの接続準備を行います。
const session = new ReaderSession(nfcPortLib);
// 券面事項確認APを初期化します。
const ap = new ConfirmationAP(session);
// 内部認証のためのNonceを設定します
const nonce = Uint8Array.from([0xca, 0xfe, 0xba, 0xbe]);
// 券面事項確認APに対してマイナンバー画像の読み出しを行います。
const result = await ap.readMyNumberContentWithVerificationNumberA(pin, nonce, HashAlgorithm.SHA256);
await session.close();
return (
`署名検証用公開鍵: ${btoa(String.fromCharCode(...result.verificationPublicKey))}\n` +
`内部認証の署名値: ${btoa(String.fromCharCode(...result.authenticationSignature))}\n` +
`Nonceのハッシュ値: ${btoa(String.fromCharCode(...result.digest))}\n` +
`マイナンバー画像: ${btoa(String.fromCharCode(...result.myNumberContent!))}\n`
);
};
ヒント
モック環境では、FeliCa カード(交通系 IC カード、Edy、WAON など)や、ISO/IEC 14443-4 Type-A カード(クレジットカードなど)をタッチすると、マイナンバーカードの挙動がシミュレートされます。 詳しくはSDK リファレンスをご覧ください。
実行結果
マイナンバー画像の読み出しに成功すると、以下のように Base64 エンコードされた 署名検証用公開鍵、内部認証の署名値などが表示されます。 マイナンバー画像のパース・検証時には、これらのデータを PocketSign Verify API に送信します。
次のステップ
券面事項確認 AP から取得したデータのパース・検証を行い、マイナンバー画像を取得しましょう。
その他、SDK の詳しい使い方やエラーの詳細等については、SDK リファレンスをご覧ください。