BLE: Pairing schlaegt auf Android fehl — SC_MITM_BOND inkompatibel #4

Open
opened 2026-05-28 18:20:18 +02:00 by ppfeiffer · 2 comments
Owner

Problem

Das Geraet ist per BLE sichtbar (nRF Connect und MeshCore-App zeigen es an), aber das Pairing schlaegt fehl.

Ursache: SerialBLEInterface in der MeshCore-Bibliothek setzt ESP_LE_AUTH_REQ_SC_MITM_BOND:

BLESecurity sec;
sec.setStaticPIN(pin_code);
sec.setAuthenticationMode(ESP_LE_AUTH_REQ_SC_MITM_BOND);

Dieser Modus verlangt MITM-Schutz mit Passkey-Dialog. Android 12+ zeigt diesen Dialog fuer BLE-UART-Geraete nicht mehr als Vordergrund-Dialog an — Verbindung schlaegt still fehl.

Zusaetzlich erscheinen BLE-UART-Geraete grundsaetzlich nicht in den Android-System-Bluetooth-Einstellungen (nur Classic BT / bekannte Profile wie HID).

Betroffene Datei

lib/MeshCore/src/helpers/esp32/SerialBLEInterface.cpp (upstream MeshCore-Submodul)

Loesung

Security-Mode auf ESP_LE_AUTH_BOND (Just Works) aendern:

// Vorher:
sec.setStaticPIN(pin_code);
sec.setAuthenticationMode(ESP_LE_AUTH_REQ_SC_MITM_BOND);

// Nachher:
sec.setAuthenticationMode(ESP_LE_AUTH_BOND);

Kein PIN-Dialog — Android verbindet automatisch. Datensicherheit bleibt: MeshCore nutzt eigene ed25519-Verschluesselung, BLE-Transportverschluesselung ist redundant.

Optionen

  1. Submodul direkt patchen (bricht Upstream-Updates)
  2. Fix als PR an https://github.com/ripplebiz/MeshCore melden
  3. MeshCore forken und gepatchte Version verwenden
## Problem Das Geraet ist per BLE sichtbar (nRF Connect und MeshCore-App zeigen es an), aber das Pairing schlaegt fehl. Ursache: `SerialBLEInterface` in der MeshCore-Bibliothek setzt `ESP_LE_AUTH_REQ_SC_MITM_BOND`: ```cpp BLESecurity sec; sec.setStaticPIN(pin_code); sec.setAuthenticationMode(ESP_LE_AUTH_REQ_SC_MITM_BOND); ``` Dieser Modus verlangt MITM-Schutz mit Passkey-Dialog. Android 12+ zeigt diesen Dialog fuer BLE-UART-Geraete nicht mehr als Vordergrund-Dialog an — Verbindung schlaegt still fehl. Zusaetzlich erscheinen BLE-UART-Geraete grundsaetzlich nicht in den Android-System-Bluetooth-Einstellungen (nur Classic BT / bekannte Profile wie HID). ## Betroffene Datei `lib/MeshCore/src/helpers/esp32/SerialBLEInterface.cpp` (upstream MeshCore-Submodul) ## Loesung Security-Mode auf `ESP_LE_AUTH_BOND` (Just Works) aendern: ```cpp // Vorher: sec.setStaticPIN(pin_code); sec.setAuthenticationMode(ESP_LE_AUTH_REQ_SC_MITM_BOND); // Nachher: sec.setAuthenticationMode(ESP_LE_AUTH_BOND); ``` Kein PIN-Dialog — Android verbindet automatisch. Datensicherheit bleibt: MeshCore nutzt eigene ed25519-Verschluesselung, BLE-Transportverschluesselung ist redundant. ## Optionen 1. Submodul direkt patchen (bricht Upstream-Updates) 2. Fix als PR an https://github.com/ripplebiz/MeshCore melden 3. MeshCore forken und gepatchte Version verwenden
Author
Owner

Behoben via pre_build.py — Patch wird bei jedem Build automatisch auf SerialBLEInterface.cpp angewendet (MeshCore-Submodul bleibt git-sauber):

  • ESP_LE_AUTH_REQ_SC_MITM_BONDESP_LE_AUTH_BOND (Just Works, kein PIN-Dialog)
  • ESP_GATT_PERM_READ_ENC_MITMESP_GATT_PERM_READ_ENCRYPTED
  • ESP_GATT_PERM_WRITE_ENC_MITMESP_GATT_PERM_WRITE_ENCRYPTED

CI-Build erfolgreich mit diesem Patch: Task 1083

Behoben via `pre_build.py` — Patch wird bei jedem Build automatisch auf `SerialBLEInterface.cpp` angewendet (MeshCore-Submodul bleibt git-sauber): - `ESP_LE_AUTH_REQ_SC_MITM_BOND` → `ESP_LE_AUTH_BOND` (Just Works, kein PIN-Dialog) - `ESP_GATT_PERM_READ_ENC_MITM` → `ESP_GATT_PERM_READ_ENCRYPTED` - `ESP_GATT_PERM_WRITE_ENC_MITM` → `ESP_GATT_PERM_WRITE_ENCRYPTED` CI-Build erfolgreich mit diesem Patch: Task 1083 ✅
Author
Owner

Wiedergeöffnet: BT wird auf Android weiterhin nicht gefunden.

Der pre_build.py-Patch (MITM → Just Works) war unzureichend — Gerät ist trotzdem nicht sichtbar.

Mögliche Ursachen noch zu prüfen:

  • BLE Advertising läuft nicht / zu kurzes Advertising-Window
  • enable() wird nicht aufgerufen oder schlägt still fehl
  • Android findet Gerät erst nach manuellem BT-Reset
  • Advertising-Typ (connectable/non-connectable) falsch
  • SERVICE_UUID nicht korrekt in Advertising-Packet enthalten
**Wiedergeöffnet**: BT wird auf Android weiterhin nicht gefunden. Der `pre_build.py`-Patch (MITM → Just Works) war unzureichend — Gerät ist trotzdem nicht sichtbar. Mögliche Ursachen noch zu prüfen: - BLE Advertising läuft nicht / zu kurzes Advertising-Window - `enable()` wird nicht aufgerufen oder schlägt still fehl - Android findet Gerät erst nach manuellem BT-Reset - Advertising-Typ (connectable/non-connectable) falsch - `SERVICE_UUID` nicht korrekt in Advertising-Packet enthalten
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ppfeiffer/OpenMeshOS#4
No description provided.