STROBE protocol framework
This is a development release of the STROBE framework. Although the
specification of the framework is at release level (1.0.0), the code is
development-quality and not yet ready for production use.
STROBE's framework spec versioning (not software versioning) is a little
bit funny. Every protocol hashes the spec version into the cryptographic
state, so any change to the spec version string breaks interoperability.
However, minor and patch revisions shouldn't break application
compatibility, so protocol specifications that make sense with 1.0.0
should also work with 1.0.1 and 1.1.0.
TODO: Update this README to include worthwhile documentation and use cases
for STROBE.
#############
Side channels
#############
The STROBE code is designed to resist timing side-channels that would
recover secret keys and messages. Obviously, timing is affected by other
variables such as message lengths.
The compact X25519 code is designed to resist timing side-channels, including
attacks on timing, caching, and branch prediction. However, the code
is incomplete in that regard, and should be tested on your particular CPU
and compiler. This warning is mainly in regard to embedded or old processors
such as the Cortex-M0, Cortex-M3, 80386, 80486, Via Nano 2000, PowerPC G3,
PowerPC G4, and RISC-V Rocket. These processors have a multiplication
instruction which takes a variable amount of time depending on its operands.
Since X25519 uses multiplication on sensitive data, some of that data will
leak to an attacker who can observe timing information. There are per-CPU
workarounds for this problem, but none of them are yet included in STROBE's
X25519 implementation.
Newer CPUs such as the Cortex-M4 and higher, and modern X86 processors, should
be safe. However, the test suite does not currently test resistance to timing
attacks (TODO).
On vulnerable processors, I expect that ephemeral Curve25519 is safe, and that
signature verification leaks information that's public in most threat models
(eg, the signer, signature and hashed message). Signing and long-term X25519
are probably vulnerable to key compromise.
I would like to eventually place a warning on the X25519 code for this, but
there are so many CPUs affected that it would be difficult to test the warning
code.
None of this code is designed to resist physically invasive attacks such as
power side channels, electromagnetic side channels, or fault attacks.
Remember of course that this is alpha-quality software, and probably contains
bugs which are more serious than timing attacks.
#############
Mailing lists
#############
If you use STROBE, please subscribe to at least the strobe-security mailing
list:
strobe-security@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-security
This mailing list is moderated and low-volume. It will be used only to
announce security issues in STROBE, should they arise.
You may also be interested in the strobe-announce and strobe-discuss
mailing lists.
strobe-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-discuss
strobe-announce@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strobe-announce
###########################
Export control notification
###########################
Downloading of this software may constitute an export or re-export of
cryptographic software from the United States of America. The U.S.
government prohibits export of encryption source code to certain countries
and individuals, including, but not limited to, the countries of Cuba, Iran,
North Korea, Sudan, Syria, and residents and nationals of those countries.
Other countries may also have restrictions on the import, possession, use,
and/or re-export to another country, of encryption software. BEFORE using
any encryption software, please check your country's laws, regulations and
policies concerning the import, possession, or use, and re-export of
encryption software, to see if this is permitted.