Solo is an open source security key. We just launched Solo v2,
 
 
 
 
 
Go to file
allcontributors[bot] 9174c00abf docs: update README.md 2019-08-07 22:35:53 +00:00
builds ability to build solo versions via `make docker-build SOLO_VERSION=...` 2019-02-14 00:35:28 +01:00
crypto First go at using cifra for SHA512 2019-02-26 19:52:59 +01:00
docs/solo Merge pull request #65 from Nitrokey/docs-nucleo32-board 2019-08-06 13:20:19 +02:00
fido2 move CTAPHID_STATUS_PROCESSING to after UP 2019-07-29 12:39:59 -04:00
metadata add UP as UV method for when PIN is not set 2019-05-18 14:35:30 -04:00
pc fix build 2019-05-10 15:57:57 -04:00
targets/stm32l432 Merge pull request #229 from solokeys/fix-hmac-secret 2019-07-27 12:49:30 -04:00
tinycbor@878eb01b96 Update tinycbor 2019-04-24 19:04:33 -04:00
tools remove tests 2019-08-06 18:50:05 +08:00
udev Remove paranoid MM stuff, not signaling AT modem is enough + better 2019-03-22 20:01:31 +01:00
.all-contributorsrc docs: update .all-contributorsrc 2019-08-07 22:33:40 +00:00
.editorconfig Start some cleanup 2019-01-03 14:24:34 +01:00
.envrc fix .envrc 2019-02-13 04:13:15 +01:00
.gitignore gitignore 2019-07-04 16:32:11 +03:00
.gitmodules Merge pull request #120 from nickray/sha512 2019-03-01 21:44:13 -05:00
.travis.yml Travis: try to get python to work 2019-02-12 18:27:11 -05:00
99-solo.rules Cleanup udev rules, keep 99-solo.rules as symlink 2019-02-27 00:00:49 +01:00
ALPHA_VERSION use alpha 2019-03-07 21:19:10 -05:00
CODE_OF_CONDUCT.md
Dockerfile Build bundle-hacker-{version}.hex 2019-02-28 01:06:06 +01:00
LICENSE Create LICENSE 2019-03-19 16:29:39 +01:00
LICENSE-APACHE update license to apache2 + mit 2019-02-12 17:18:17 -05:00
LICENSE-MIT update license to apache2 + mit 2019-02-12 17:18:17 -05:00
Makefile fix build 2019-04-24 19:33:26 -04:00
README.md docs: update README.md 2019-08-07 22:35:53 +00:00
SECURITY.md Create SECURITY.md 2019-06-14 00:19:14 +02:00
STABLE_VERSION Update STABLE_VERSION 2019-07-29 14:58:30 -04:00
in-docker-build.sh Build debug 1/2 versions of hacker firmware and bundle 2019-03-23 13:52:47 +01:00
mkdocs.yml Merge pull request #65 from Nitrokey/docs-nucleo32-board 2019-08-06 13:20:19 +02:00
runtime.txt

README.md

License All Contributors Build Status Discourse Users Keybase Chat FOSSA Status

latest release commits since last release last commit commit activity contributors

Solo

Solo is an open source security key, and you can get one at solokeys.com.

Solo supports FIDO2 and U2F standards for strong two-factor authentication and password-less login, and it will protect you against phishing and other online attacks. With colored cases and multilingual guides we want to make secure login more personable and accessible to everyone around the globe.

This repo contains the Solo firmware, including implementations of FIDO2 and U2F (CTAP2 and CTAP) over USB and NFC. The main implementation is for STM32L432, but it is easily portable.

For development no hardware is needed, Solo also runs as a standalone application for Windows, Linux, and Mac OSX. If you like (or want to learn) hardware instead, you can run Solo on the NUCLEO-L432KC development board, or we make Solo for Hacker, an unlocked version of Solo that lets you customize its firmware.

Security

Solo is based on the STM32L432 microcontroller. It offers the following security features.

  • True random number generation to guarantee random keys.
  • Security isolation so only simple & secure parts of code can handle keys.
  • Flash protection from both external use and untrusted code segments.
  • 256 KB of memory to support hardened crypto implementations and, later, additional features such as OpenPGP or SSH.
  • No NDA needed to develop for.

Solo for Hackers

Solo for Hacker is a special version of Solo that let you customize its firmware, for example you can change the LED color, and even build advanced applications.

Check out solokeys.com, for options on where to buy Solo. Solo Hacker can be converted to a secure version, but normal Solo cannot be converted to a Hacker version.

If you have a Solo for Hacker, here's how you can load your own code on it. You can find more details, including how to permanently lock it, in our documentation. We only support Python3.

git clone --recurse-submodules https://github.com/solokeys/solo
cd solo

cd targets/stm32l432
make cbor
make build-hacker
cd ../..

make venv
source venv/bin/activate
solo program aux enter-bootloader
solo program bootloader targets/stm32l432/solo.hex

Alternatively, run make docker-build and use the firmware generated in /tmp.

If you forgot the --recurse-submodules when cloning, simply git submodule update --init --recursive.

For example, if you want to turn off any blue light emission, you can edit led_rgb() and change LED_INIT_VALUE to be a different hex color.

Then recompile, load your new firmware, and enjoy a different LED color Solo.

In the Hacker version, hardware is the same but the firmware is unlocked, so you can 1) load an unsigned application, or 2) entirely reflash the key. By contrast, in a regular Solo you can only upgrade to a firmware signed by SoloKeys, and flash is locked and debug disabled permanently.

Hacker Solo isn't really secure so you should only use it for development. An attacker with physical access to a Solo for Hacker can reflash it following the steps above, and even a malware on your computer could possibly reflash it.

Developing Solo (No Hardware Needed)

Clone Solo and build it

git clone --recurse-submodules https://github.com/solokeys/solo
cd solo
make all

This builds Solo as a standalone application. Solo application is set up to send and recv USB HID messages over UDP to ease development and reduce need for hardware.

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 USB HID over UDP to the authenticator application. You can install our fork by running the following:

pip install -r tools/requirements.txt

Run the Solo application:

./main

In another shell, you can run our test suite.

You can find more details in our documentation, including how to build on the the NUCLEO-L432KC development board.

Documentation

Check out our official documentation.

Contributors

Solo is an upgrade to U2F Zero. It was born from Conor's passion for making secure hardware, and from our shared belief that security should be open to be trustworthy, in hardware like in software.

This project follows the all-contributors specification. Contributions of any kind welcome! The ultimate goal is to have a FIDO2 security key supporting USB, NFC, and BLE interfaces, that can run on a variety of MCUs. Look at the issues to see what is currently being worked on. Feel free to add issues as well.

Thanks goes to these wonderful people (emoji key):

Szczepan Zalega
Szczepan Zalega

💻
Wessel dR
Wessel dR

📖
Adam Langley
Adam Langley

🐛 💻
Oleg Moiseenko
Oleg Moiseenko

💻
Alex Seigler
Alex Seigler

🐛
Dominik Schürmann
Dominik Schürmann

🐛
Ernie Hershey
Ernie Hershey

📖

License

Solo is fully open source.

All software, unless otherwise noted, is dual licensed under Apache 2.0 and MIT. You may use Solo software under the terms of either the Apache 2.0 license or MIT license.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

All hardware, unless otherwise noted, is dual licensed under CERN and CC-BY-SA. You may use Solo hardware under the terms of either the CERN 2.1 license or CC-BY-SA 4.0 license.

All documentation, unless otherwise noted, is licensed under CC-BY-SA. You may use Solo documentation under the terms of the CC-BY-SA 4.0 license

FOSSA Status

Where To Buy Solo

You can buy Solo, Solo Tap, and Solo for Hackers at solokeys.com.