diff --git a/README.md b/README.md index a2dc2fa..fd37297 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ -# Covid Bracelet, compatibile with Covid Apps on iOS and Android [![Actions Status: test](https://github.com/CovidBraceletPrj/CovidBracelet/workflows/test/badge.svg)](https://github.com/CovidBraceletPrj/CovidBracelet/actions) [![Actions Status: build](https://github.com/CovidBraceletPrj/CovidBracelet/workflows/build/badge.svg)](https://github.com/CovidBraceletPrj/CovidBracelet/actions) +# Contact Tracing Wristband [![Actions Status: test](https://github.com/CovidBraceletPrj/CovidBracelet/workflows/test/badge.svg)](https://github.com/CovidBraceletPrj/CovidBracelet/actions) [![Actions Status: build](https://github.com/CovidBraceletPrj/CovidBracelet/workflows/build/badge.svg)](https://github.com/CovidBraceletPrj/CovidBracelet/actions) +This project aims to add support the [Exposure Notification (EN) protocol for tracing contacts from Apple and Google](https://covid19.apple.com/contacttracing) on low-power wristbands. It maintains full compatibility with smartphone Apps based on the EN protocol. +**Note: this is a proof of concept and not ready for production** **Contributions Welcome!** - - ## Features -* Sends and receives exposure beacons as specified by Google and Apple for Covid Contact Tracing +* Builds on Zephyr OS targetting the NRF52 BLE SOCs +* Easy project setup using [PlatformIO](https://platformio.org/platformio-ide) +* Sends and receives exposure beacons as specified by Google and Apple for Covid Contact Tracing * Rolling, encrypted, anonymous beacons * Compatible with Apple iOS and Android phones * With rolling proximity identifiers and encrypted metadata @@ -18,47 +20,66 @@ * computes rolling proximity identifiers * compares to stored contacts to check for exposure -Builds on on Zephyr OS and NRF52 BLE SOCs. Note: as we for now do not use the flash for key storage, this currently only works on nrf52480 or you can just store a very small number of keys. Moving the keys to flash is on the TODO list and will fix this. +Note: as we for now do not use the flash for key storage, this currently only works on nrf52480 or you can just store a very small number of keys. Moving the keys to flash is on the TODO list and will fix this. + +## Getting Started +This project is based on platformIO for an easy setup process, see: [https://platformio.org/platformio-ide](https://platformio.org/platformio-ide). -## Get Started: -This project is based on platformIO, see: [https://platformio.org/platformio-ide](https://platformio.org/platformio-ide) ## Testing -To run the tests for the desktop environment select the test task for desktop or run: +To run the tests for the desktop environment select the task *test* for desktop or run: + ``` platformio test -e desktop ``` -**Note: this is a proof of concept and not ready for production** - ## Demo Video [![Video Demo](https://img.youtube.com/vi/tYGsFJC3LtE/0.jpg)](https://youtu.be/tYGsFJC3LtE) -## Open / Possible next steps -* firmware of the air updates (signed): done in testing -* fix entropy: keys are always the same on boot up -* time sync -* set device name, user id or so in Flash +## Roadmap + +### Flash Support +* Store long-term contacts in flash + +### Device Initialization +The devices need to be initialized: +* Fix entropy: keys are always the same on boot up +* Synchronize time +* Set device name, user id or so in Flash (-> persistend configuration) + +### Device Synchronization +* Extend beyond the simple (existing) basestation +* Synchronize time +* Get infections from DB, Check their signatures +* Secure GATT services and authentication of base statation in general +* Read keys form national databases + +### Extract Keys from Device +In case of an infection, the keys need to be extracted from the device: +* Secure extraction of keys +(Base version existing) + +### Device Updates Over the Air (OTA) +Securely updating many running devices over the air with signed firmware will greatly improve maintainability. Related feature branch: [feature/ota](https://github.com/CovidBraceletPrj/CovidBracelet/tree/feature/ota) + +### Logging +* extensive logging: crash, reboot, battery level, charging state, contacts, memory useage, flash usage +* Energy efficiency + +### Protocol Specifications * set scanning interval to the correct value, for now we just use the default * set advertisement interval, correct value, for now we just use the default: should be 200-270 milliseconds -* store long-term contacts in flash * set transmit power and store this in the corona beacons -* get infections from DB, check their signatures -* extensive logging: crash, reboot, battery level, charging state, contacts, memory useage, flash usage, * extensive compatibility testing with Apple iOS and Android devices -* contininous integration testing -* Energy efficiency * BLE advertisements sets -* Secure GATT services and authentication of base statation in general + +### Other +* Contininous integration testing * More platforms: with display etc. -## TODOs Wristband +## Possible Platforms Possible platforms for real-world deployment many, as many of the cheap fitness trackers base on NRF52 or chips with similar capabilities. However, many would need the firmware to be shipped to manufactures. * Watch UI * Pine Time could be good for testing - -## TODOs App and Basestation -* extend this beyond the simple basestation -* read keys form national databases