2018年9月22日土曜日

BLEリモコンの謎

 「PCにつながるリモコン」でお困りの皆様こんにちは。
・無線キーボードはボタンが多すぎて扱いづらい
・赤外線は受光部に「向ける」という動作が必要で、面倒すぎて論外
・無線ゲームパッドは「起動」という動作が必要で、面倒すぎて論外
 わかります(レヴュースタァライト風)。あなたはBLEリモコンを使うしかないでしょう(ウテナ風)。

 「BLEリモコン」で素朴に探すと、KKPというCerevoじみた代物しか見つからない。しかし蛇の道は蛇で、Xiaomiの照明ブランドYeelightが出している自社商品用リモコンがBLEだということを発見した。私はこれを入手して調べた。以下にその結果を述べる。

・プロファイルやペアリングといったものは存在しない
 意味がわからないと思うが、アドバタイズだけですべての用を済ませている。しかし2.4GHzだから、パケットが届かない確率が高いのでは? そのために同じアドバタイズを3回連続で送信している。また、同じボタンタップで複数回動作しないよう、ボタンタップのたびにインクリメントする値がペイロードに入っている。まったくBLEでないプロトコルなのに規格上BLEなのは、各国の無線関係の認証を通すためだろう。

・ペイロードは暗号化されている
 リモコン上のボタン(6つある)を同じ順番で巡回して押していったときのペイロードの例を以下に示す。アンダーバーは直前のボタンタップ時のパケットと同じ値という意味。
__-__-__-__-__-__-72-__-__-__-__-__-__-91-CD-CB-56-18-7F-__-__-__-8A-
__-__-__-__-__-__-71-__-__-__-__-__-__-38-9D-63-EC-91-DB-__-__-__-63-
__-__-__-__-__-__-70-__-__-__-__-__-__-37-D2-BC-96-09-E1-__-__-__-B8-
__-__-__-__-__-__-6F-__-__-__-__-__-__-DF-2C-3B-97-90-79-__-__-__-7D-
__-__-__-__-__-__-6E-__-__-__-__-__-__-48-26-EF-F5-20-0E-__-__-__-A0-

__-__-__-__-__-__-6D-__-__-__-__-__-__-3B-C9-14-97-A4-5C-__-__-__-72-
__-__-__-__-__-__-6C-__-__-__-__-__-__-B1-CD-DE-E9-35-B3-__-__-__-D8-
__-__-__-__-__-__-6B-__-__-__-__-__-__-EF-52-D4-FA-97-54-__-__-__-20-
__-__-__-__-__-__-6A-__-__-__-__-__-__-F5-16-AD-A4-54-6E-__-__-__-F6-
__-__-__-__-__-__-69-__-__-__-__-__-__-4E-6B-43-CA-EE-80-__-__-__-83-
__-__-__-__-__-__-68-__-__-__-__-__-__-0C-A2-CA-7F-5C-B3-__-__-__-2A-

__-__-__-__-__-__-67-__-__-__-__-__-__-44-5F-2A-5D-60-E8-__-__-__-97-
__-__-__-__-__-__-66-__-__-__-__-__-__-06-7E-B1-81-B4-28-__-__-__-99-
__-__-__-__-__-__-65-__-__-__-__-__-__-0F-D6-29-18-FF-14-__-__-__-80-
__-__-__-__-__-__-64-__-__-__-__-__-__-7D-82-DA-6B-9B-50-__-__-__-2A-
__-__-__-__-__-__-63-__-__-__-__-__-__-30-1B-B2-BB-D6-6D-__-__-__-63-
__-__-__-__-__-__-62-__-__-__-__-__-__-F5-D1-03-38-EA-04-__-__-__-4E-

__-__-__-__-__-__-61-__-__-__-__-__-__-DF-C1-3D-01-B7-77-__-__-__-E5-
__-__-__-__-__-__-60-__-__-__-__-__-__-26-70-13-70-E3-69-__-__-__-C4-
__-__-__-__-__-__-5F-__-__-__-__-__-__-EF-68-E1-E6-80-C0-__-__-__-8D-
__-__-__-__-__-__-5E-__-__-__-__-__-__-BB-F1-10-21-21-9D-__-__-__-CE-
__-__-__-__-__-__-5D-__-__-__-__-__-__-09-84-8A-7F-C3-5D-__-__-__-79-
__-__-__-__-__-__-5C-__-__-__-__-__-__-4E-D5-B8-4A-5E-FA-__-__-__-D2-

 インクリメントするバイトが61・67・6D・72のペイロードは、どれも同じボタンを押しているが、ご覧のとおり暗号化されているので、同じだとは判別できない。さほど計算量のいらない単純な暗号だろうとは思うが、私の手には負えない。

 疑問――なぜ暗号化されているのか?
 私には見当がつかない。照明用リモコンを汎用BLEリモコンとして使おうという人間など、おそらくこの世に100人くらいしかいないので、対策する価値があるとは思えない。メーカーの予期しない方法で照明を操作されないように? しかしペアリングしない以上は、同じペイロードを送るだけで動作してしまう。
 Alibabaを見ていると、こういうBLEリモコンを作るODMのサービスが動いているらしいので、そのODM業者の都合なのかもしれない。しかしどんな都合なのかというと、やはり見当がつかない。