Embassyのnrf-softdeviceにおけるボンディング
#ボンディングに必要な情報について
-
on_bonded ではMasterIdとEncryptionInfo、IdentityKeyが渡される。
- EncryptionInfoにはLTK(接続に必要な鍵)が含まれる。
- MasterIdにはedivとrandが含まれ、これを二つ合わせることでLTKを識別する。
- つまり、edivやrandが前と同じだったらLTKが変わっていないということ。
- そして、IdentityKeyにはピア(相手)のアドレスが保持される。
- IdentityKeyにはirkとaddrの二つのキーがあるが、irkはaddrを解決するために必要な値で、実際のアプリケーション内ではaddr(Address構造体)を使えばよい。
- さらに、Address構造体にはflagsとbytesがあるが、このうち、bytesが実際のアドレス(6ビット)を保持している。
- (追記)↑と、思っていたのだがどうやらAndroidは毎回アドレスを変えるっぽい。ここには解決後のアドレスが保存されると思っていたのだが…
- flagsは何やら機器の情報を表すものらしいがとりあえずは必要なさそう
これらの情報を保持するにはIdentityKeyをキーとしてMasterIdとEncryptionInfoを紐付ける必要がある。 で、多分同じIdentityKeyでもMasterIdが変わることがあり、もしそうなったら多分MasterIdとEncryptionInfoを更新すれば良い?(追記)アドレスは変わるためmaster_idをキーにする?
-
sys_attrs について
- sys_attrsはボンディングに必須となるLTK以外にいろいろ情報を保持するもののようだ。
- なのでIdentityKeyをキーとして保存すれば良いはず
- 恐らくMasterIdとは直接的には関係ない?それともMasterIdが変わったらsys_attrsをクリアしたほうがいいのかも?
参考: https://lpccs-docs.renesas.com/Tutorial-DA145x-BLE-Security/pairing_and_bonding.html