id:Hie:20091229 で車に設置しましたワイヤレスドアロック機能付きエンジンスターターですが,これってどれくらい安全なのでしょうかね? アンロックやエンジンスタート指示をリモコンで送信すると5秒後くらいに,OKかNGが戻ってくるのですが…ひょっとして非インタラクティブな解錠命令なのだろうか??
つまり,懸念しているのは,私がアンロックやエンジンスタートしたときに飛ばした電波をまるまるキャプチャして,同じ電波を吹けば解錠されちゃったりエンジンがかかったりしてしまうんじゃなかろうか,ということ.
もちろん,インタラクティブな双方向通信で認証処理をしているなら問題ないはずだ.すごく簡単なプロトコルは次のようなものでしょう.便宜上,リモコンを送信機,車側を受信機としよう.
- 出荷の時点で製品毎(送信機,受信機ペア)に同一のUniqueIDと十分に大きな乱数テーブルを入れておく.
- 送信機側からUniqueIDを送信する.
- 受信機側がUniqueIDを確認し,ランダムに乱数テーブルを引きインデックスiをチャレンジとして送信機に返す.
- 送信機側ではインデックスiをもとに乱数テーブルを引き,対応する乱数rを受信機に返す.
- 受信機は乱数rがインデックスiの乱数に対応していることを検証して,OKなら解錠.
とりあえず,乱数テーブルが十分に大きければこれでよさそうだ.ポイントは受信機側が任意にチャレンジを作ることができるところですね.
非インタラクティブでも多少はセキュリティを保持するようなものは作れそうです.例えばつぎのようなもの.(公開鍵暗号の知識が必要ですが)
- 出荷の時点で製品毎に同一のUniqueIDを付与し,さらに送信機に秘密鍵skを,受信機に対応する公開鍵pkを入れておく.
- 送信機は乱数mを生成し,秘密鍵skを用いて乱数mに対する署名σを生成する.
- 送信機は(UniqueID, m, σ)を受信機に送信する.
- 受信機はUniqueIDを確認し,さらにmが過去に使われたものでないことを確認する.OKなら,自身の公開鍵pkを用いてσがmに対して付けられたものか検証しOKなら解錠.mをすでに使った乱数として記憶.
ポイントはmが使い捨てワンタイムパッドになっているところ.mは使い捨てですが,乱数空間が十分に大きければ数年は使い捨てまくっても大丈夫な気がします.
さて,コムテックのリモートエンジンスターターはこの程度のことはやってくれているのでしょうか….個人的にはインタラクティブに公開鍵暗号(というより電子署名)を使って認証処理をしていてほしいのですが,あまり期待できません.非対話ゼロ知識認証とかやってたら神ですが!*1ううむ,解析やってみようかな….無線を捕まえられる装置を借りて来なきゃ….
ま,いずれにしても窓ガラスをたたき割った方が早そうですけどね….