BLEタグは本物であることを証明できる範囲でのみ信頼されます。同じMACとペイロードに安価なボードが答えられれば、資産追跡やアクセス、決済システムは崩壊します。本記事はBLEタグにクローンとスプーフィングへの耐性を持たせる方法を扱います。チャレンジレスポンス、PUF鍵、回転ID、アテステーションです。

なぜクローンが効くか

BLEタグは識別子をブロードキャストします。同じ広告を再生したり、同じ静的鍵で接続に答える偽物は、 naiveなリーダーには見分けがつきません。防御は暗号的です。タグは漏洩不可能な秘密の所持を証明しなければなりません。

ECDHによるチャレンジレスポンス

リーダーは乱数nonceを発行し、BLEタグはそれに署名して返します。

resp = Sign(sk, nonce || reader_id)

秘密鍵skはセキュアエレメントから出ません。skを持たないクローンは有効なrespを作れず拒否されます。ECDSA P-256かEd25519を使い、ECDHと組み合わせてセッション鍵を短命かつ前方秘匿にします。

PUF:読めずコピーできない鍵

物理的複製不可能関数(PUF)はシリコンのばらつきから一意の鍵を派生します。BLEタグのPUF鍵はフラッシュに保存されないため、チップをダンプしても何も得られません。各デバイスは異なる鍵を得て、侵入される登録DBは不要です。

回転IDとアンチリプレイ

静的広告は録画して再生するだけです。広告する回転IDを短い間隔で更新します。

ID_i = Truncate(HMAC(k, T_i), n)

T_iは時間窓。リーダーは現在と直前の窓で検証します。捕獲した広告は数分で無価値になります。単調増加カウンタと組み合わせればリプレイを完全に殺せます。

アテステーションとフリート信頼

管理されたフリートでは、BLEタグはファームウェアと識別をアテストします。リーダーに焼き込まれたルートで検証される署名付きアテステーションブロブは、単位が改ざんされていないファームウェアを動かすことを証明し、クローンとroot化デバイスの両方をブロックします。

距離とリレー攻撃

暗号はリレーを止めません。攻撃者は2つのプロキシで電波到達を延ばし、タグがリーダーの「隣」に見えるようにします。距離境界(distance-bounding: 往復時間チェック)と、取引を短い物理的近接窓に縛ることで緩和します。

実践チェックリスト

  • 鍵はセキュアエレメントかPUFに、平文フラッシュには決して入れない。
  • 静的共有秘密ではなくチャレンジレスポンスを使う。
  • 回転IDを短い間隔で、アンチリプレイカウンタと共に。
  • ルート化された信頼チェーンでファームウェアをアテスト。
  • リレーが現実的脅威なら距離境界を追加。

十分に守られたBLEタグはクローンを経済的に無意味にします。攻撃者はバイトではなくシリコンごと必要です。