Cavern.sigma
Welcome to Cavern.sigma
[TOC] 最近買了 irocks K69BR 跟 Logitech MX Anywhere 3S 所以也來弄一下雙系統 (windows 跟 arch linux) 的配對 但發現他們走的是 BLE 所以有更多 key 要設定 紀錄一下整個流程 整個流程大概是: 1. 在 Linux 配對 2. 在 Windows 配對 3. 到 Linux 修改 key ---- 先打開 `/var/lib/bluetooth/<mac address>/info` 會觀察到多了這些 section: - `[IdentityResolvingKey]` - `[LongTermKey]` (不一定) - `[PeripheralLongTermKey]` - `[SlaveLongTermKey]` 然後 `[LongTermKey]` 長的像這樣: ``` [LongTermKey] Key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Authenticated=0 EncSize=16 EDiv=63619 Rand=14301383529120964297 ``` ## Retrieve key ``` cd /mnt/windows/Windows/System32/config chntpw -e SYSTEM > cd ControlSet001\Services\BTHPORT\Parameters\Keys > cd <host bluetooth mac address> ``` 接下來會發現 BLE 裝置的 mac address 不再是一個 value 而是變成 key: ``` (...)\BTHPORT\Parameters\Keys\xxxxxxxxxxFF> ls Node has 3 subkeys and 3 values key name <xxxxxxxxxxx1> <xxxxxxxxxxx2> <xxxxxxxxxxx3> size type value name [value if type DWORD] 16 3 REG_BINARY <xxxxxxxxxxx4> 16 3 REG_BINARY <CentralIRK> 16 3 REG_BINARY <xxxxxxxxxxx5> ``` `xxxxxxxxxxx1`、`xxxxxxxxxxx2`、`xxxxxxxxxxx3` 這些就是 BLE 裝置 下面的 `xxxxxxxxxxx4`、`xxxxxxxxxxx5` 就是傳統藍牙裝置 進去 `xxxxxxxxxxx1` 會看到這樣的 output ``` (...)\Parameters\Keys\xxxxxxxxxxFF> cd <bluetooth device mac address> (...)\Parameters\Keys\xxxxxxxxxxFF\xxxxxxxxxxx1> ls Node has 0 subkeys and 9 values size type value name [value if type DWORD] 16 3 REG_BINARY <LTK> 4 4 REG_DWORD <KeyLength> 16 [0x10] 8 b REG_QWORD <ERand> 4 4 REG_DWORD <EDIV> 63619 [0xf883] 16 3 REG_BINARY <IRK> 8 b REG_QWORD <Address> 4 4 REG_DWORD <AddressType> 0 [0x0] 4 4 REG_DWORD <CEntralIRKStatus> 1 [0x1] 4 4 REG_DWORD <AuthReq> 45 [0x2d] ``` 我們可以從 value name 猜測它對應的 linux bluetooth config section 是哪個 - `<LTK>` -> `[LongTermKey]`、`[PeripheralLongTermKey]`、`[SlaveLongTermKey]` - `<IRK>` -> `[IdentityResolvingKey]` - `<ERand>` -> `[LongTermKey]` 的 `Rand` - `<EDiv>` -> `[LongTermKey]` 的 `EDiv` 可以用 `hex <value name>` 取值 ## Update Key 主要要在 `/var/lib/bluetooth/<mac address>/info` 填入 `IRK` 跟 `LongTermKey` 的 key `LongTermKey` 另外要複製 `Rand` 跟 `EDiv` (這兩個值是 little endian 要轉成 decimal 寫到 config) 但 `LongTermKey` 可能會有不同的狀況 ### Logitech MX Anywhere 3S 它有 `[PeripheralLongTermKey]` 跟 `[SlaveLongTermKey]` 兩個的 Key 長不一樣 而且 `Authenticated=2` 要讓它會動只要把 `IRK` 設好 並把 `LTK` 填到 `PeripheralLongTermKey` 即可 `SlaveLongTermKey` 不用動它 ### irocks K69BR 它則有 `[LongTermKey]`、`[PeripheralLongTermKey]`、`[SlaveLongTermKey]` 三個 section `PeripheralLongTermKey` 跟 `SlaveLongTermKey` 一樣 但 `LongTermKey` 不同 且 `Authenticated=0` 這時候 `LTK` 填到 `LongTermKey` 即可 甚至可以刪掉 `PeripheralLongTermKey` 跟 `SlaveLongTermKey` 最後要注意在 Windows 重新配對後裝置的 mac address 會變 所以要記得把在 `/var/lib/bluetooth` 的裝置資料夾重新命名 再 `systemctl restart bluetooth` 並重開藍牙裝置就好了 Reference: - https://gist.github.com/madkoding/f3cfd3742546d5c99131fd19ca267fd4 - https://unix.stackexchange.com/questions/402488/dual-boot-bluetooth-le-low-energy-device-pairing/413831#413831
2024-11-19 09:28:02
留言
Last fetch: --:-- 
現在還沒有留言!