solo1/README.md

146 wiersze
5.6 KiB
Markdown
Czysty Zwykły widok Historia

2018-10-22 20:29:50 +00:00
![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)
[![Kickstarter](https://img.shields.io/badge/kickstarter-back%20us-red.svg)](https://solokeys.com/kickstarter)
2018-10-22 20:02:26 +00:00
[![Build Status](https://travis-ci.com/SoloKeysSec/solo.svg?branch=master)](https://travis-ci.com/SoloKeysSec/solo)
2018-10-22 20:29:50 +00:00
[![Discourse Status](https://img.shields.io/discourse/https/meta.discourse.org/status.svg)](https://discourse.solokeys.com)
[![Keybase Chat](https://img.shields.io/badge/chat-on%20keybase-brightgreen.svg)](https://keybase.io/team/solokeys.public)
2018-10-22 20:02:26 +00:00
2018-09-04 23:40:43 +00:00
# Solo
2018-04-28 18:15:41 +00:00
2018-09-13 21:58:53 +00:00
Solo is an affordable security key that implements FIDO2/U2F and supports USB, NFC, and extensions. Extensions
include SSH, GPG, and cryptocurrency. Solo is an upgrade to [U2F Zero](https://github.com/conorpp/u2f-zero) and is a work in progress.
2018-09-13 03:35:02 +00:00
2018-10-20 01:10:30 +00:00
> Technical documentation for this project is contained in [docs/](https://github.com/SoloKeysSec/solo/tree/master/docs), built with [MkDocs](https://solo.solokeys.io/documenting/) and deployed automatically to <https://solo.solokeys.io>, part of our technical documentation suite hosted at <https://docs.solokeys.io>.
2018-10-20 00:36:47 +00:00
2018-09-13 03:51:45 +00:00
![](https://i.imgur.com/cXWtI1D.png)
2018-09-13 03:35:02 +00:00
![](https://i.imgur.com/vwFbsQW.png?1)
The Solo FIDO2/U2F code base is designed to be easily ported to different embedded systems.
2018-10-10 01:31:25 +00:00
Right now, it has been ported to the NRF52840 and EFM32J. Soon to be supported is the STM32L442.
2018-09-13 03:35:02 +00:00
No hardware is needed for development. You can run and extend the FIDO2 code base
using just your PC.
# Security
2018-10-10 01:31:25 +00:00
Solo is based on the STM32L442 microcontroller. It offers the following security features.
2018-09-13 03:35:02 +00:00
- True random number generation to guarantee random keys.
2018-10-10 01:31:25 +00:00
- Firewall feature for code and secret data isolation.
- Locked flash
2018-09-13 03:35:02 +00:00
2018-10-10 01:31:25 +00:00
It also has up to 256 KB of memory, meaning it has room for side channel and fault resistant crypto implementations, plus other features.
2018-04-28 18:15:41 +00:00
2018-10-10 01:31:25 +00:00
Each chip ships with a read-only USB bootloader, put in place by ST. This can be leveraged to completely reset and reprogram the device, to make sure you can trust it's running the right code. The bootloader can be disabled.
2018-04-28 18:15:41 +00:00
2018-09-13 03:44:57 +00:00
# How do I get one?
We are still working on open sourcing an implementation that anyone can cheaply
2018-09-13 03:47:40 +00:00
build and program, just like with U2F Zero. This will be released soon. It will be easy to solder :)
2018-09-13 03:44:57 +00:00
In the meantime, you can port the code to your favorite microcontroller, or support
2018-10-10 01:31:25 +00:00
us by [signing up for our Kickstarter](https://solokeys.com/kickstarter). Our aim is to crowdfund enough to make an economic
2018-09-13 03:44:57 +00:00
bulk order and provide open source security tokens for everyone that is interested. We will offer
"hackable" tokens that come with USB bootloaders and are reprogrammable.
2018-10-10 01:31:25 +00:00
[Sign up here](https://solokeys.com/kickstarter)!
2018-09-13 03:44:57 +00:00
2018-04-28 18:15:41 +00:00
# Setting up
Clone solo and build it
2018-04-28 18:15:41 +00:00
```bash
2018-11-02 15:01:06 +00:00
git clone --recurse-submodules https://github.com/SoloKeysSec/solo
2018-09-13 17:35:29 +00:00
cd solo/
2018-09-05 02:11:21 +00:00
2018-10-25 03:20:46 +00:00
git submodules init
git submodules update
make all
2018-09-05 02:11:21 +00:00
```
This builds our FIDO 2.0 and the U2F authenticator, as well as making a virtualenv in venv/
that has our python-fido2 fork installed.
2018-09-13 03:35:02 +00:00
Note that our python-fido2 fork will only connect to the software FIDO2 application,
not a hardware authenticator. Install Yubico's fork to do that.
2018-04-28 18:15:41 +00:00
# Testing and development
The application is set up to send and recv USB HID messages over UDP to ease
development and reduce need for hardware.
2018-09-13 13:56:36 +00:00
Testing can be done using our fork of Yubico's client software, `python-fido2`.
Our fork of `python-fido2` has small changes to make it send
2018-04-28 18:15:41 +00:00
USB HID over UDP to the authenticator application.
Run FIDO 2 / U2F application.
```bash
./main
```
2018-09-13 03:35:02 +00:00
Run example client software. This runs through a registration and authentication.
2018-04-28 18:15:41 +00:00
```
./venv/bin/python python-fido2/examples/credential.py
2018-04-28 18:15:41 +00:00
```
2018-09-13 03:35:02 +00:00
Run the FIDO2 tests.
```
make fido2-test
2018-09-13 03:35:02 +00:00
```
Follow specifications to really dig in.
2018-04-28 18:15:41 +00:00
[https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html](https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html)
2018-09-13 03:35:02 +00:00
## Extensions
Extensions can be added to FIDO2/U2F to support things like SSH, GPG, and cryptocurrency.
Right now, an experimental cryptocurrency extension can be found in `fido2/extensions` and `web/index.html`.
More documentation to come.
2018-09-13 13:56:36 +00:00
The main goal is to expose an extensible API on Solo, like the following:
- Command to store private key
- Command to sign arbitrary hash
- Command to derive a public key
- Commands for setting/changing/authenticating a pin code (like in FIDO2)
- Command to expose entropy from TRNG.
Using these generic commands, various external programs can be implemented for the security key.
Since FIDO2/U2F are implemented, these programs can potentially work in the browser on desktops
and mobile devices, with no drivers needed to be installed.
2018-09-13 03:35:02 +00:00
## Porting
The main code base is in `fido2/`. See `targets/nrf52840`, `targets/efm32/src`, and `pc/`
2018-09-13 13:56:36 +00:00
for examples of FIDO2/U2F ports. In essence, you just need to reimplement `device.c`. Optionally you can
re-implement `crypto.c` to accelerate operations and/or add other security features.
2018-09-13 03:35:02 +00:00
More documentation to come.
2018-10-15 02:56:30 +00:00
# Documentation
Check out our [official documentation](https://solo.solokeys.io/).
2018-04-28 18:15:41 +00:00
# Contributors
Contributors are welcome. The ultimate goal is to have a FIDO 2 hardware token
capable of USB, Bluetooth, and NFC interfaces. There could be multiple tokens
2018-09-13 22:59:12 +00:00
for each interface.
2018-09-13 03:35:02 +00:00
Look at the issues to see what is currently being worked on. Feel free to add issues as well.
2018-04-28 18:15:41 +00:00
This is an upgrade to [U2F Zero](https://github.com/conorpp/u2f-zero).
2018-04-28 18:15:41 +00:00
2018-09-13 22:17:38 +00:00
# License
2018-04-28 18:15:41 +00:00
2018-09-13 22:17:38 +00:00
Everything in this repo is open source and licensed under the MIT License.
2018-04-28 18:15:41 +00:00