[筆記] 雙系統的藍牙鍵鼠配對 (BLE)
[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: --:--
現在還沒有留言!