概要
2023年5月2日、マイナンバーカードを利用したコンビニの住民票発行システムで誤発行が発生した。
https://news.yahoo.co.jp/articles/548e659b98b68bce1a9bc54e6ba1433f598e66b9
偶然、AさんとBさんは同時に住民票の発行を行い、どちらもBさんの住民票が発行される事態となった。
注意書き
これ以降はすべて私の妄想です。ただし、現実世界のシステム開発で起こりそうな事象を想定します。
本記事は、同様の不具合を起こさないようにするための注意喚起であり、妄想記事であり、マイナンバーカード及びマイナンバーカードに関連するシステムに対する批判や政治的な意図は一切ありません。
想像図
コンビニのプリンタ機があって、
プリンタ機からアクセスできる住民票発行用サーバがあって
住民票の記載情報が入ってるデータベースがあるっていう図
処理の流れの想像
- プリンタ機がマイナンバーカードを読み取って、サーバにマイナンバーカードの情報を送る
- サーバはデータベースにアクセスして、住民票に記載する情報を記したpdfファイルを生成する
- 生成したpdfファイルをタイムスタンプで保存する
例:2023年5月2日 19時20分34秒なら「20230509192034.pdf」を保存する - プリンタ機に「20230502192034.pdf」を印刷させる
同時に発行依頼があると上書きされてしまう
こうして、秒単位で同時に住民票の発行をしたであろうAさんとBさんに、Bさんの住民票が発行された(かもしれない)
この不具合が今になって起きた背景として、マイナンバーカードの普及率の上昇とそれに伴う利用者の増加が考えられる。正直、こんな感じの潜んでる系のバグが一番怖いめう🥺
対策
PDFを生成して印刷する場合、どのようなファイル名を付ければよいだろう?
- そもそもタイムスタンプではなく、UUID(ULID)のようなユニークキーを利用する。UUIDなら一応重複チェックを入れたほうがよさそう
- ユーザIDがデータベースにあるなら、それをファイル名に含ませても良いかも
- 面倒だが、同じタイミングで印刷されたファイルが存在しないかチェックして、存在する場合にはファイル名の末尾に連番を加える
- プリンタ機の識別子みたいなのがあるような気がするので、それをファイル名に付け加えることができるかもしれない。知らんけど
他にもいい方法はあるかもしれない。何かしら対策をしていれば、このようなことは起こらなかっただろう
(ただ、記事には通信連携プログラムの不具合と書いてある…ジョブキュー処理で、同時の発行申請があった場合にタイミングをずらす処理の箇所で不具合があったのかもしれない。だとしても後勝ちになるのはちょっと……)