2015/10/25

[nrf51]PairingとBonding

nRF51822とAndroidアプリだが、なんか気持ちが停滞してしまって進んでいない。
目が乾燥している気がするのよねぇ。

せっかく作るから、今みたいに誰でも接続できるんじゃなくて、ペアリングとかしてみたい。
ペア・リング(Pair Ring)を装着してみたい、じゃないよ。
ペアリング(Pairing)をしてみたいのだ。

そういえば、ボンディングという言葉もよく聞く。
検索すると、どっちも引っかかったりして訳がわからなくなってきた。
どこがどう違うのだろうか?
あるいは、「一般人はペアリングって呼ぶけど、開発者はボンディングって呼ぶよね」みたいなことなんだろうか?


こういうときは、NordicのInfocenterだ。

Paringのシーケンスは、SMP Pairing Phase 2のあと、アプリにBLE_GAP_EVT_CONN_SEC_UPDATEを返し、最後にBLE_GAP_EVT_AUTH_STATUSがSUCCESSで返っている。

Bondingもほぼ同じなのだけど、BLE_GAP_EVT_CONN_SEC_UPDATEのあと、SMP Pairing Phase 3があってからBLE_GAP_EVT_AUTH_STATUSがSUCCESSで返り、アプリは鍵を保存している。

シーケンスはほとんど一緒なのだが、どこで動きが変わっているかというと、最初にCentralからSMP Pairing Requestが来て、SoftDeviceがアプリにBLE_GAP_EVT_SEC_PARAMS_REQUESTが通知されたときと、その返し方が違っていた。

  • Paringのとき
    • BLE_GAP_EVT_SEC_PARAMS_REQUESTが「no_bond」で来ている
    • sd_ble_gap_sec_params_reply()の最後の引数が「NULL」になっている
  • Bondingのとき
    • BLE_GAP_EVT_SEC_PARAMS_REQUESTが「bond」で来ている
    • sd_ble_gap_sec_params_reply()の最後の引数が「p_keyset」になっている

ということは、PairingかBondingかの違いはCentral側が主導権を持っているということか。
AndroidとかiOSとかでペアリング操作はOSの役目だと思うけど、そのときに「ペアリング or ボンディング」みたいな選択はないと思う。

ボンディングのbondって、木工ボンドとかのあれと同じ意味なのだろうか。
だったら、のり付けというか、通信するペアになりはするけれども、ペアを覚えておくほどでもない場合がペアリングで、覚えておくときがボンディングなのだろうか?
シーケンスの一覧を見ても、PairingとBondingがあるのはJust Worksだけで、Passkey EntryやOOBのときはBondingしかないのよね。
Interface誌の特集では、暗号鍵の交換手順がボンディングとあるのだが、とりあえずNordicではそういう使い方をしているようだ、というところにとどめておこう。


sd_ble_gap_sec_params_reply()の最後の引数はin/outなんだけど、examplesを検索しても使っているのはmultiprotocol/ble_app_gzllのサンプルで、まねしていいのかどうかわからん。
試してみればいいんだろうけど、nRF52でNFCペアリングしようとして訳がわからなくなってしまったので、やる気が起きないのよねぇ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。