PS Locks secured by BlueID
PS Locks secured by BlueID
Dieses Dokument soll einen Überblick darüber geben, wie BlueID an sich funktioniert, wie das BlueID Paket für die Nordic nRF52 Plattform zu kompilieren und benutzen ist und schließlich, welche Funktionen für den Port auf die Schlösser von PS Lock noch integriert werden müssen.
Zugangsdaten
Ihre Zugangsdaten werden Ihnen separat per e-Mail mitgeteilt.
Benötigte externe Pakete
- BlueID for Nordic nRF52 + BlueID Initializer
- Java Runtime in Version 8 (oder höher)
- Buildtool SCons
- Nordic Bluetooth SDK in Version 14.2
Zielort einstellen in SConstruct Variable PLATFORM_SDK_PATH - Nordic SoftDevice S132 5.1.0
Zielort einstellen in SConstruct Variable PLATFORM_SD_PATH - Nordic Command line Tools
Zielort einstellen in SConstruct Variable CLI_TOOLS_PATH - GNU ARM Compiler (getestet wurde 4.9-2015q3)
Zielort einstellen in SConstruct Variable DIR_TOOL_CHAIN
Ablegen der Initialisierungs- und Customizationdaten
Bevor ein Schloss BlueID-fähig wird, braucht es seine Identität. Diese wird durch den Initializer generiert.
Der Initializer muss wie folgt aufgerufen werden, um sowohl Bluetooth als auch NFC zu aktivieren:
java sdkforc-initializer-4.0.jar -a XL86VQKFSQV5ZV05IU4X -e PROD --channel-btlespp --channel-nfcpki
Dies generiert mehrere Artefakte, unter anderem ein .info.json File, die rein informativ ist, sowie ein .bcf File, das im Flash des nRF52 abgelegt werden muss.
Die komplette Dokumentation für den Initializer finden Sie unter hier
Wir bieten im Lieferumfang drei verschiedene CustomizationData Profile an, die sich hauptsächlich im Advertising Interval und damit im Stromverbrauch unterscheiden. Sie finden Sie im Verzeichnis config.
Geflasht werden die Daten mit dem Buildtool SCons.
Typische SCons Aufrufe
Projekt mit Debuginformationen bauen
scons --dbg
Logging
Standardmäßig loggt die Implementierung per UART. Um stattdessen RTT zu verwenden reicht der folgende Switch:
scons --dbg --rtt-logger
Die Logausgaben lassen sich etwa mit Segger Ozone betrachten oder man startet den JLink Server mittels
scons jlinkserver
und sieht anschließend die Logausgaben mittels
scons rtt
Bauen und Flashen
Um alle Daten mit einem Aufruf zu flashen, starten Sie SCons wie folgt:
scons --dbg --rtt-logger --init-bcf=LockServerConfiguration_XXXX.bcf --cust-bcf=config/CustomizationData_highSpeedProfile.bcf flash_all
Die Initialisierungs- und Customizationdaten müssen allerdings nur einmal pro Schloss abgelegt werden. Soll nur die Firmware geflasht werden reicht
scons --dbg --rtt-logger flash
Implementierung
Testen der blanken nRF52-Implementierung
Sind alle notwendigen Daten auf das Schloss geflasht, sollte der BlueID nRF52 Code direkt auf dem Schloss lauffähig sein.
Nach der Erstellung der Initialisierungsdaten sollte das Schloss im Bereich "Schlösser" unter access.blueid.net mit seiner Zylinder ID gelistet werden. Ist dies nicht der Fall, muss mit Klick auf das Icon rechts oben die Synchronisierung angestoßen werden.
Nun können Sie einen neuen Benutzer anlegen (wichtig: es ist am einfachsten, wenn die Mails der angegebenen E-Mail-Adresse auf dem Smartphone verfügbar ist) und eine neue Berechtigung für das Schloss erteilen.
Nach Installation der BlueID Keys App (Android, iOS) kann diese mit dem verschickten Link aktiviert werden.
Ist noch keine Uhrzeit auf einem Schloss gesetzt, wird die Uhrzeit auf den 1/1/2016 00:00 UTC gesetzt und verbleibt auch dort. D.h., auch das Startdatum der Berechtigung muss vor dieser Zeit sein, sonst wird diese abgewiesen.
Zur Administration der Schlösser gibt es unsere BlueID Lock Admin App (nur iOS), mit der Sie etwa die Zeit setzen können, aber auch Schlösser öffnen können.
Sobald Sie die NFC Karten von uns erhalten haben, können Sie sie mit der BlueID Token Writer App (nur Android) beschreiben.
Zu implementierende Schnittstellen
Hauptsächlich gibt es die Provider für NFC und Systeminformationen zu implementieren.
vcs_deps/blueid_sdk/src/main/include/blueid/provider/NfcProvider.h
Implementierung der NFC-Schnittstelle. Wird in main.c verwendet
In vcs_deps/blueid_sdk/src/main/c/modules/nfc
gibt es Beispielimplementierungen für den PN512 und den PN532.
Die NFC-Implementierung kann entweder mit passenden Karten von BlueID getestet werden, die wir Ihnen per Post zuschicken oder mit der Keys App und einem Android Smartphone.
vcs_deps/blueid_sdk/src/main/include/blueid/provider/SystemInformationProvider.h
Liefert Informationen über Systemeigenschaften wie etwa den Batteriestand.
In vcs_deps/blueid_sdk/src/main/c/blueid/provider/nRF52SystemProvider.c
ist das meiste schon implementiert.
Persistenz der Daten, Uhrzeit, Crypto, etc. ist schon fertig implementiert für nRF52 und sollte out-of-the-box verwendbar sein.
Zu implementierende Kommandos
BlueID arbeitet auf Kommandobasis. Jede Interaktion mit dem Schloss bedeutet eine Kommandoausführung.
Die wichtigsten zu implementierenden Kommandos (da sie eine Interaktion mit dem Motor darstellen) sind:
- tokn: Öffnet das Schloss für 5s (token)
- enof: Öffnet das Schloss permanent (enable office mode)
- diof: Schließt das Schloss permanent (disable office mode)
Der Schlossstatus von enof/diof muss nach einem Reset erhalten bleiben.
Signalling
Das Signalling für den Benutzer mittels Buzzer und LEDs soll ähnlich wie U&Z gestaltet werden. Bisher haben wir 1x grün blinken bei erfolgreicher Kommandoausführung, im Fehlerfall 1x rot blinken. Bei NFC Karten ist es sinnvoll zusätzlich noch kurz zu piepsen.
Generell ist das Signalling aber natürlich stark davon abhängig, welche Möglichkeiten das jeweilige Schloss bietet.
Uhrzeit
Eine zentrale Voraussetzung für ein funktionierendes Berechtigungsmanagement ist eine Uhr, die möglichst präzise läuft. Die Abweichung soll höchstens 30 Minuten pro Jahr betragen. Sofern vorhanden kann dafür ein externer Quartz verwendet werden und ist so auch im geleiferten Projekt konfiguriert. Andernfalls muss auf den internen Quartz zurückgegriffen werden.
Ändern des Namens in DFU mode
Befindet sich das Schloss im DFU Modus, dann advertised es einen Hardware Identifier, der von unserer Lock Admin App verwendet wird um das passende Firmwareupdate auszuwählen.
Deshalb muss dieser Wert so eindeutig sein, dass kein inkompatibles Update aufgespielt wird.
Der Wert ist im Buildscript SConscriptBootloader im Feld NRF_DFU_HW_VERSION definiert.
Ausstellen anderer Kommandos
Mit access.blueid.net können nur BLE und NFC Tokens für das Kommando 'tokn' ausgestellt werden. Um etwa Berechtigungen "enof" oder "diof" verwenden zu können, benötigt es etwas Aufwand.
Denn beliebige Kommandos kann man nicht mit der BlueID Keys App ausführen, sondern nur mit der BlueID SDK App, die ebenfalls in den App Stores verfügbar ist.
Zum Start benötigt die App den eingangs erwähnten IDaaS API Key und die PROD Umgebung. Nach erfolgreicher Initialisierung erhält man eine Mobile Device ID.
Nun loggt man sich am Token Creator mit IDaaS Operator Username und Password ein.
Dort gibt man nun die Mobile Device ID und die Secured Object ID (aka Zylinder ID) ein, drückt auf "get channels" und wählt dann bei Channels "btlespp" aus.
Jetzt braucht man noch ein Start- und Enddatum für die Berechtigung, fügt die benötigten Kommandos hinzu und klickt auf "Create Token NOW".
Als letzten Schritt muss man nun noch die BlueID SDK App synchronisieren und kann anschließend die Kommandos ausführen.