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

レスポンスの作成/証明書の読み出し

このページでは、PocketSign Verify SDK を使用してマイナンバーカードに搭載された利用者証明用電子証明書を使用してチャレンジに対するレスポンス(Nonce の署名値)の作成と署名に使用した証明書の読み出しを行います。

あらかじめSDK のセットアップを完了しておいてください。

シーケンス

実装例

ここでは、チャレンジ(Nonce)が 0xCAFEBABE の場合の実装例を示します。

要確認

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

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

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

// JPKI APを初期化します。
let ap = JPKIAP(session: session)

// ここでは、これがチャレンジ(Nonce)です。
let challengeNonce = Data([0xCA, 0xFE, 0xBA, 0xBE])

// JPKI APに対して署名を要求します。
let result = try await ap.signDataWithUserAuthenticationSecretKey(
password: pin, data: challengeNonce, hashAlgorithm: .sha256)

session.close()
return "Nonceのハッシュ値: \(result.digest?.base64EncodedString() ?? "")\n"
+ "レスポンス: \(result.signature?.base64EncodedString() ?? "")\n"
+ "証明書: \(result.certificate?.base64EncodedString() ?? "")\n"
}
ヒント

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

実行結果

署名に成功すると、以下のように Base64 エンコードされた Nonce のハッシュ値、レスポンス(Nonce の署名値)、署名に使用された証明書が表示されます。 署名検証時には、このデータを PocketSign Verify API に送信します。


次のステップ

取得した利用者 ID を用いて、当人認証によるログインを実装しましょう。

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