2024-03-19 (火)
MatterのPASEの鍵交換に失敗してた理由は connectedhomeip の実装と見比べてみて分かった。
仕様にいくつか罠があったのだけど、まずSPAKE2+は最新版ではなく、2020年のdraft版で実装する必要があった。ほとんど同じだけど、HKDFで生成する鍵の長さがなぜか半分しかない。
あと、仕様ではハッシュ関数に通す値に Matter という文字列が入っているけど CHIP にしないといけなかった。仕様の名前が変わったときに仕様書内の文字列を全部置換したのだろうけど、ここを変えると互換性壊れるので、世の中の実装はそのままCHIPを使い続けているっぽい。。。そしてMatter 1.2の仕様でさりげなくCHIPに戻っていた。
AndroidがStatus Report返さないように見えたのは単にACKフィールド忘れていただけだった。ADBでログを見てるとAndroid Homeアプリも connectedhomeip を使ってそうだった。
ECC周りは https://github.com/kmackay/micro-ecc を使ってみようと思ってたけど、HMACやHKDFが欲しかったのとどうせSSLも使うので今回はESP32のSDKに入ってたmbedtlsの実装を使った。SSLの内部で使うことを意図した実装なので説明少ない。