This repository extends IOTA Identity by implementing both pure Post-Quantum (PQ) and Post-Quantum/Traditional (PQ/T) hybrid signatures and JWT encoding for VCs with a crypto-agility approach.
-
PQ Signatures: IOTA Identity extends its support for selected PQ signature algorithms, such as ML-DSA, SLH-DSA and FALCON. The implementation of these algorithms is provided by liboqs.
-
PQ/T hybrid Signatures: to mitigate risks associated with the relative immaturity of Post-Quantum Cryptography (PQC), the IOTA Identity also extends its support for PQ/T hybrid signatures. The hybrid scheme combines a PQ signature with a Traditional signature in a single composite signature. This ensures secure authentication, even if one of the two algorithms becomes compromised. The PQ/T hybrid signature requires a PQ/T hybrid key pair; the PQ/T hybrid public key is handled using the newly introduced verification material property type called
compositeJwk
, which stores both types of public keys within the DID document. This setup enforces theWeak Non-Separability
(WSN) property of signatures, protecting against stripping attack.
"compositeJwk": {
"algId": ".. composite key OID ..",
"pqPublicKey": {
".. PQ JWK encoded key .."
},
"traditionalPublicKey": {
".. Traditional JWK encoded key .."
}
}
Supported Algorithms: Currently, the implmentation supports id-MLDSA44-Ed25519-SHA512 and id-MLDSA65-Ed25519-SHA512 algorithms. The first combines ML-DSA-44 with Ed25519 signatures, while the second combines ML-DSA-65 with Ed25519 signatures.
The transition to PQC is a delicate and lengthy process. Today, the Distributed Ledger Technologies (DLT) that underpin decentralised identity are not yet quantum-secure, so this repository extends the IOTA Identity library with a new DID method called did:compositejwk
for Holders to use PQ/T hybrid signatures. Refer to did:compositejwk specification for the details.
Note: this repository also extends the existing did:jwk
method to deal with pure PQ keys and signatures (ML-DSA, SLH-DSA and FALCON), and adds a simple did:web
method for the Issuers.
To test all the above quantum-secure functionalities, refer to practical PQC examples available in the example directory.
Note: The examples in the
example/2_pqc
directory are configured with the Issuer using the did:web method. To run these examples, you must have a server instance that hosts the Issuer's DID Document. You can use the default server provided in theexample/2_pqc/server
folder, or configure one yourself. However, ensure that the following variables inutils.rs
are correctly set to point to your server instance:pub static DID_URL: &str = "https://localhost:4443/.well-known/"; pub static PATH_DID_FILE: &str = "C:/Projects/did-web-server/.well-known/";
Make sure your server is set up before running the examples to avoid any configuration issues.
The IOTA Identity already supports Zero-Knowledge functionalities, thanks to the integration of two key components:
- BBS+ Signature: the scheme has been integrated through the ZKryptium library for secure and privacy-preserving VC management with ZK selective disclosure.
- JSON Web Proof Representation: the json-proof-token library implements the JSON Web Proof (JWP) specification, enabling verifiable claims with selective disclosure.
Note: the BBS+ signature scheme uses traditional cryptography, hence it is not quantum-secure; for more details on the implementation and how to use these features, refer to the full documentation.