All Projects → kudelskisecurity → Eddsa Fault Attack

kudelskisecurity / Eddsa Fault Attack

Licence: unlicense
Fault attack agaisnt EdDSA demonstrated on an Arduino Nano board, allowing for partial key recovery and fake signatures.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Eddsa Fault Attack

Bitcracker
BitCracker is the first open source password cracking tool for memory units encrypted with BitLocker
Stars: ✭ 463 (+773.58%)
Mutual labels:  cryptography, attack
Vuvuzela
Private messaging system that hides metadata
Stars: ✭ 2,423 (+4471.7%)
Mutual labels:  research, cryptography
Fhe Toolkit Linux
IBM Fully Homomorphic Encryption Toolkit For Linux. This toolkit is a Linux based Docker container that demonstrates computing on encrypted data without decrypting it! The toolkit ships with two demos including a fully encrypted Machine Learning inference with a Neural Network and a Privacy-Preserving key-value search.
Stars: ✭ 1,123 (+2018.87%)
Mutual labels:  research, cryptography
Curl Collisions
An implementation of Heilman et al.'s differential attack on IOTA's Curl hashing function.
Stars: ✭ 20 (-62.26%)
Mutual labels:  cryptography, attack
Al Go Rithms
🎵 Algorithms written in different programming languages - https://zoranpandovski.github.io/al-go-rithms/
Stars: ✭ 1,036 (+1854.72%)
Mutual labels:  cryptography
Capsgnn
A PyTorch implementation of "Capsule Graph Neural Network" (ICLR 2019).
Stars: ✭ 1,008 (+1801.89%)
Mutual labels:  research
Cryptoinaction
CIA - CryptoInAction
Stars: ✭ 42 (-20.75%)
Mutual labels:  cryptography
Crypto blogs
Blogs about Cryptography/Security to follow
Stars: ✭ 41 (-22.64%)
Mutual labels:  cryptography
Filecoin Signing Tools
Filecoin Signing Library
Stars: ✭ 50 (-5.66%)
Mutual labels:  cryptography
Openpmd Standard
📓 Open Standard for Particle-Mesh Data
Stars: ✭ 47 (-11.32%)
Mutual labels:  research
Joeecc
Elliptic Curve Cryptography playground/toolkit written in pure Python
Stars: ✭ 46 (-13.21%)
Mutual labels:  cryptography
Cryptojs.swift
Cross-platform cryptographic functions in swift
Stars: ✭ 42 (-20.75%)
Mutual labels:  cryptography
Exonum
An extensible open-source framework for creating private/permissioned blockchain applications
Stars: ✭ 1,037 (+1856.6%)
Mutual labels:  cryptography
Cryptocat
Secure chat software for your computer.
Stars: ✭ 1,011 (+1807.55%)
Mutual labels:  cryptography
Holodeck Engine
High Fidelity Simulator for Reinforcement Learning and Robotics Research.
Stars: ✭ 48 (-9.43%)
Mutual labels:  research
Openpmd Viewer
🐍 Python visualization tools for openPMD files
Stars: ✭ 41 (-22.64%)
Mutual labels:  research
Mundane
Mundane is a Rust cryptography library backed by BoringSSL that is difficult to misuse, ergonomic, and performant (in that order).
Stars: ✭ 1,033 (+1849.06%)
Mutual labels:  cryptography
Keys
Uncomplicated cryptography frameworks base on CommonCrypto
Stars: ✭ 47 (-11.32%)
Mutual labels:  cryptography
Write Ups
📚 VoidHack CTF write-ups
Stars: ✭ 45 (-15.09%)
Mutual labels:  cryptography
Timeless Timing Attacks
A Python implementation that facilitates finding timeless timing attack vulnerabilities.
Stars: ✭ 45 (-15.09%)
Mutual labels:  attack

Fault attack on EdDSA and Ed25519

We demonstrated how to recover enough part of the secret key of a device performing EdDSA signatures thanks to a single fault at the right time to be able to produce seemingly valid signature (even though the real signature by the actual secret key holder would not have the same value). This is an inherent weakness of the algorithms and cannot be avoided as long as the algorithms are generating their values through deterministic means. Our paper was presented during FDTC 2017. We give here the code to perform fault signature simulations as well as key recovery from faulted signatures.

In our example setup, we were able to attack and recover the secret key stored in an Arduino Nano running Ed25519 signature using the ArduinoLibs.

Countermeasures against such fault attacks are detailled in our paper "Practical fault attack against the Ed25519 and EdDSA signature schemes".

Requirements

  • Python 2.6+
  • gmpy2

Attack simulation

The Python script test_simulation.py simulates a fault happening during the signature process and applies the attack to recover the private value a:

./test_simulation.py -r
Key generation:
a = 3856099267433939410638934773561861774469861534617912158986655171120805876879
First signature is valid : True
Second signature is valid: False
Same R but not the same S: True
Found a with error at offset 31
a = 3856099267433939410638934773561861774469861534617912158986655171120805876879
Signing another message:
Third signature is valid: True

By default keys, fault offsets and values are randomly generated. However, deterministic tests may be run:

$ ./test_simulation.py -d -o 12 -e 56
Key generation:
a = 482006232232683921242586128535238829962455780187631138037190845242801001519
First signature is valid : True
Second signature is valid: False
Same R but not the same S: True
Found a with error at offset 12
a = 482006232232683921242586128535238829962455780187631138037190845242801001519
Signing another message:
Third signature is valid: True

Arduino attack

To perform the attack on Arduino Nano, Arduino Studio must be installed and the Crypto library of the ArduinoLibs project have to be imported. The code executed on Arduino Nano is given in the file ed25519.ino. The complete set-up and methodology to obtain faults by voltage glitch are given in the paper.

Once the proper faults have been found, the script test_arduino.py recovers the value a from the faulted signatures:

$ ./test_arduino.py 
Fault from Arduino Nano voltage glitch:
signature 1 is valid: True
signature 2 is valid: False
Found value of a thanks to error at offset 6
a = 5261030905596737613781015704137862010759183555703583748072526152929652983426
signature 2 is valid: False
Found value of a thanks to error at offset 4
a = 5261030905596737613781015704137862010759183555703583748072526152929652983426
signature 2 is valid: False
Found value of a thanks to error at offset 2
a = 5261030905596737613781015704137862010759183555703583748072526152929652983426
signature 2 is valid: False
Found value of a thanks to error at offset 1
a = 5261030905596737613781015704137862010759183555703583748072526152929652983426
signature 2 is valid: False
Error
Error: the glitch was not at offset 32

Publication

Article's DOI: 10.1109/FDTC.2017.12
The accepted version is freely available.

Copyrights

Our original source code is copyright © 2017 Nagravision S.A., and was written by Sylvain Pelissier and Yolan Romailler.

The Ed25519 python implementation is based on DJB's work, the Ed25519 software is in the public domain.

The software published here is in under the Unlicense.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].