- Does the hardware wallet have an entropy source?
- Yes, the
True
random number generator peripheral implemented on wallet microcontrollers is based on an analog circuit. This circuit generates a continuous analog noise that will be used by the RNG processing in order to produce a 32-bit random number. To verify the true randomness of the numbers generated a verification is performed based on the National Institute of Standards and Technology (NIST) Statistical Test Suite (STS) SP 800-22rev1a (April 2010).
- Yes, the
- Does the hardware wallet get entropy from the host machine?
- Yes, an external random 32 bytes buffer is used to increase internal entropy when performing cryptographically sensitive operations e.g. mnemonic generation
- How does the hardware wallet get entropy?
- The hardware wallet generates internal entropy from a peripheral device. This value is salted with several sources so as to make unfeasible some kinds of dictionary and lookup attacks (e.g. rainbow tables ). The salt is chosen in such a way that no two devices can generate the same value in (at least) the time frame of a human lifetime. Such values might not be particularly random. Internal entropy is eventually combined with an external entropy received from the user host device.
- What types of salt sources are considered ?
- Between devices (such as device UUID)
- Between device runs (at init time)
- Over time (after init, value continues to change)
- What are salt sources used in firmware ?
- MCU core registers
- We use constant values of three registers, namely: PC - shows which instruction perform next. SP - track the call stack LR - hold the address of the function.
- Device UUID
- Every Microcontroller has its universal unique identifier which is stored at the specific location in memory, depending on different families. As it is unique in every device, it can be used as a good salt for the entropy.
- SysTick timer
- All the Microprocessor have it, regardless of the manufacturer. Systick timer is a part of the core.
- Unconnected GPIO pins
- We configure a detached port as an input and then read the value from it. Because of specific physical processes appears noise, which goes with waves, which has minimal statistical dependence.
- MCU core registers
If you see an inverted skycoin logo in bootloader mode like in the following image, maybe you have either flashed for development or not official device.
If you are experiencing any issues:
- Determine if your particular case is mentioned in troubleshooting section and try to follow the corresponding instructions to fix it.
- Contact the developers via Skycoin development channel in Telegram.
This section describes quick solutions to some common errors or mistakes.
If you are getting this error quite likely your system is configured to run Python version 2.x
by default. This version of Python is not supported. At all times Python3
is a requirement.
Firstly , confirm that Python 2.x was executed by running the following commands from a terminal window:
which protoc
protoc --version
python -c 'import google.protobuf; print(google.protobuf.__file__)'
If python2
is part of the output then that's exactly the case so continue with instructions that follow. Otherwise contact the team.
In order to force using Python3 set PYTHON=python3
environment variable while invoking all make targets. For instance if building bootloader binary just once
make bootloader PYTHON=python3
In order to invoke multiple targets export that variable to the glovbal OS environment, e.g. on Unix systems
export PYTHON=python3
make bootloader
make firmware
make full-firmware
For further details see #235 .