Yahoo!ニュース

接種証明書アプリ QRコードには何が書かれている?

山口健太ITジャーナリスト
PayPayのQRコードよりも複雑に見える(画像は筆者作成、ダミーデータ)

12月20日から提供が始まった「新型コロナワクチン接種証明書アプリ」には、接種証明書の二次元コード(QRコード)を表示する機能があります。スマホ決済などのQRコードよりも大きくて複雑に見えますが、いったい何が書かれているのでしょうか。

PayPayやLINEのQRコードに比べると接種証明書のQRコードは大きくて複雑であることから、何が書かれているのか不安を抱く人がいるようです。見た目が複雑な理由は情報量が多いためですが、これは使われ方が違うためです。

PayPayやLINEの場合、QRコードに含まれているのは店舗や個人を一意に示すIDやURLなどの識別子に過ぎません。実際の支払い処理や友達追加は、この識別子情報を用いてクラウド上で実行されています。

これに対して接種証明書には、QRコードにすべての情報が入っています。クラウドやサーバーに依存しないため、電波が届かない場所や、海外の空港に到着した直後のように通信環境がなくても使えるよう考慮されています。

具体的な記載内容は、デジタル庁のサイトに詳しい説明があります。ここに書かれている内容は、QRコードに含まれる情報を取り出すことで誰でも確認できます。

実際に接種証明書アプリで表示したQRコードを一般的なQRコードリーダーアプリで読み取ってみると、以下のような数字の羅列が出てきました。

shc:/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789...(省略)

先頭の「shc:/」が示しているように、これは国際規格の「SMART Health Cards」に基づいたデータを符号化したものです(海外用はこれに加えてICAO VDS-NC規格のQRコードも使われています)。一見したところ、氏名や生年月日は入っていないように見えますが、暗号化されているわけではなく簡単に復元できるので、不用意に他人に見られないようしましょう。

これを人間に読みやすい文字列に変換すると、以下のようなJSON形式のデータを得られます(ここで用いているのはデジタル庁が使用しているダミーデータで、「有効 三十七」というのが氏名です)。

QRコードに含まれているデータ本体(筆者作成)
QRコードに含まれているデータ本体(筆者作成)

最初の「iss」は発行者(Issuer)で、デジタル庁のURLが入っています。「nbf」(Not Before)は、証明書を発行した日時のタイムスタンプ(UNIX時間)です。証明書をいつ発行したのか、後から検証できるというわけです。

発行者や発行日時が入っている(筆者作成)
発行者や発行日時が入っている(筆者作成)

その下には複数のリソースが格納されています。「Patient」リソースは接種を受けた本人の情報が入っており、「usual」は日本語の氏名、海外用証明書では「official」にアルファベットの氏名が入っています。また、生年月日もここに入っています。

接種を受けた本人の情報(筆者作成)
接種を受けた本人の情報(筆者作成)

データ構造としては「HL7 FHIR」という医療情報交換のための標準規格を用いています。ちなみにFHIRの規格では「maiden」(旧姓)を追加することもできそうです。デジタル庁は今後のアップデートで旧姓に対応する予定としていることから、これを利用する可能性があります。

次に、「Immunization」(予防接種)リソースに接種の履歴が入っています。ワクチンの種類としてはHL7が定義するCVXコードを利用しており、ファイザーなら208、モデルナなら207といった数字が入ることになります。

 接種の履歴(筆者作成)
接種の履歴(筆者作成)

「performer」内の「actor」(接種制度の所管者)は、一律で「MHLW_Gov_of_JAPAN」になっているとのこと(MHLW=厚生労働省)。接種日やワクチンのロットナンバーは、接種済証のシールに記載されている情報と同じものです。

3回目以降の接種を受けた場合は、ワクチン接種記録システム(VRS)にデータが追加された後にアプリから証明書を発行することで、ここに反映されると思われます。

接種のたびにデータサイズが大きくなっていくように見えますが、実際には不要な空白などを除いた上で圧縮をかけて格納されるため、接種回数が数回増えたとしても大きな変化はなさそうです。

アプリには改ざんを防ぐ仕組みも

データ改ざんへの対策として、SMART Health Cardsでは電子署名の仕組み(JSON Web Signature、JWS)が用いられています。これを利用することで、内容が改ざんされていないことや、信頼できる機関が発行した鍵で署名されていることを検証できるようになっています。

実際にQRコードのデータを書き換えてみたところ、接種証明書アプリや海外製アプリではいずれもエラーになることを確認できました(簡易的な確認であり、偽造できないことを本気で検証したわけではありません)。

データを書き換えると有効性確認に失敗する。左は接種証明書アプリ、右はThe Commons ProjectによるVerifierアプリ(筆者作成)
データを書き換えると有効性確認に失敗する。左は接種証明書アプリ、右はThe Commons ProjectによるVerifierアプリ(筆者作成)

接種証明書アプリには、家族など複数人の証明書を一緒に保存する機能があります。どこまで厳密に確認するかは現場の運用次第と思われますが、実際には身分証明書など別のIDと組み合わせることで、本人確認をしながら照合していくことになるでしょう。

ITジャーナリスト

(やまぐち けんた)1979年生まれ。10年間のプログラマー経験を経て、フリーランスのITジャーナリストとして2012年に独立。主な執筆媒体は日経クロステック(xTECH)、ASCII.jpなど。取材を兼ねて欧州方面によく出かけます。

山口健太の最近の記事