当社のタグにはNXP NTAG 424 DNAチップを使用しています。スキャンのたびに単調増加カウンターの値が増え、チップの秘密鍵を使ってAES-CMAC認証コードを生成します。当社の検証サービスはコードとカウンターを確認し、検証済みのコードを拒否します。コピーしたリンクからは、秘密鍵なしで新しい有効なコードを生成できません。スキャンの検証に成功すると、タグの真正性が確認されます。タグの付いた品物が本物だと証明するものではありません。
単調増加カウンターで複製を防ぐ仕組み
NTAG 216など、データの保存だけを行うNFCタグには、情報を提供する機能はあっても、真正性を保護する機能はありません。保存されている固定の情報は、どのリーダーでも複製できます。当社のNFCタグでは、スキャンのたびに内部のカウンターが1ずつ増えます。この値をタグ固有のデータおよび秘密鍵と組み合わせ、AES-CMAC(暗号ベースのメッセージ認証コード)で認証コードを生成します。スキャンのたびにカウンターが変わるため、同じタグでも毎回異なる認証コードになります。
認証コードは次の式で求めます。
CMAC = AES-CMAC(K, UID || Counter || Data)
Kは秘密鍵、UIDはタグ固有の識別子、Counterはスキャンのたびに増えるカウンター、Dataはタグのペイロードです。偽造タグは秘密鍵を知らなければ、今後のカウンター値に対応する有効な認証コードを予測・生成できません。計算量の面で、複製は現実的ではありません。
ハードウェアセキュリティモジュールがマスター鍵を保管し、その鍵とタグのUIDからタグごとに固有の鍵を導出します。その鍵をNTAG 424 DNAチップに一度だけ書き込みます。書き込んだ鍵はチップから読み出せません。仮に1つのタグから鍵を取り出しても、別のタグで有効なコードは生成できません。
固定データのNFCタグと当社のNTAG 424 DNAタグの比較
| 機能 | 固定データのNFCタグ | 当社のNTAG 424 DNAタグ |
|---|---|---|
| 固定のシリアル番号 | 容易に複製可能 | ほかの情報と併用 |
| 単調増加カウンター | 搭載されていても認証コードによる保護なし | スキャンごとに増加 |
| AES-CMACによる検証 | 保護なし | AES-CMACで検証 |
| 複製の検知 | 非対応 | カウンター値の不一致 |
| チップの検証 | なし | ECC secp224r1 |
| 物理的な開封・改ざんの検知 | 非対応 | TagTamperの検知線 |