Expand description
Linkable ring signatures for double-spend prevention.
Linkable ring signatures are an extension of ring signatures that allow detection of double-signing (when the same key signs twice with the same ring). This is crucial for preventing double-spending in anonymous payment systems while preserving signer anonymity for single uses.
§Features
- Anonymous signing within a group (like regular ring signatures)
- Double-signing detection via key images
- No linkability between different rings
- Perfect for preventing double-spending of anonymous tokens
§Example
use chie_crypto::linkable_ring::{LinkableRingSignature, sign_linkable, verify_linkable, check_double_sign};
use chie_crypto::KeyPair;
let keypair1 = KeyPair::generate();
let keypair2 = KeyPair::generate();
let keypair3 = KeyPair::generate();
let ring = vec![
keypair1.public_key(),
keypair2.public_key(),
keypair3.public_key(),
];
// Sign two different messages with the same key
let msg1 = b"Transaction 1";
let msg2 = b"Transaction 2";
let sig1 = sign_linkable(&keypair2, &ring, msg1).unwrap();
let sig2 = sign_linkable(&keypair2, &ring, msg2).unwrap();
// Both signatures verify
assert!(verify_linkable(&ring, msg1, &sig1).unwrap());
assert!(verify_linkable(&ring, msg2, &sig2).unwrap());
// But we can detect they were signed by the same key!
assert!(check_double_sign(&sig1, &sig2));Structs§
- KeyImage
Db - Database for tracking used key images to prevent double-spending.
- Linkable
Ring Signature - A linkable ring signature with key image for double-sign detection.
Enums§
- Linkable
Ring Error - Error types for linkable ring signature operations.
Functions§
- check_
double_ sign - Check if two signatures were created by the same key (double-signing detection).
- sign_
linkable - Sign a message with a linkable ring signature.
- verify_
linkable - Verify a linkable ring signature.