All Projects → crate-crypto → MLSAG

crate-crypto / MLSAG

Licence: other
Multilayered Linkable Spontaneous Anonymous Group - Implemented as is from paper. Not Monero specific

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to MLSAG

Monero Pool
A Monero mining pool server written in C
Stars: ✭ 158 (+731.58%)
Mutual labels:  monero
MoneroTipper
Source code behind /u/MoneroTipsBot, a secure, on-chain Monero tipping service
Stars: ✭ 23 (+21.05%)
Mutual labels:  monero
arkworks-gadgets
Zero-knowledge gadgets for Webb's cross-chain blockchain applications.
Stars: ✭ 72 (+278.95%)
Mutual labels:  zero-knowledge
Webminerpool
Complete sources for a monero webminer.
Stars: ✭ 175 (+821.05%)
Mutual labels:  monero
Coinhive Stratum Mining Proxy
Browser mining on any pool using CoinHive.js library
Stars: ✭ 240 (+1163.16%)
Mutual labels:  monero
monero-merchant
Monero Merchant is a RESTful API wrapper for the official Monero wallet RPC. This project is mainly for merchants who hope to accept Monero as payment, which is currently the most robust and privacy-oriented cryptocurrency with extremely low transaction fees.
Stars: ✭ 27 (+42.11%)
Mutual labels:  monero
React Coin Hive
Mine cryptocurrency while your users haven't engaged with your content lately
Stars: ✭ 153 (+705.26%)
Mutual labels:  monero
XMRig-Proxy-Frontend
Simple Web app Frontend for XMRig-proxy
Stars: ✭ 27 (+42.11%)
Mutual labels:  monero
snarkVM
A Virtual Machine for Zero-Knowledge Executions
Stars: ✭ 345 (+1715.79%)
Mutual labels:  zero-knowledge
CryptoProfitSwitcher
Extensible profit switcher for crypto coins and algorithms
Stars: ✭ 49 (+157.89%)
Mutual labels:  monero
Onion Monero Blockchain Explorer
Onion Monero Blockchain Explorer
Stars: ✭ 194 (+921.05%)
Mutual labels:  monero
Nemosminer
NemosMiner multi algo profit switching NVIDIA miner
Stars: ✭ 224 (+1078.95%)
Mutual labels:  monero
uplexa
uPlexa: Incentivizing the mass compute power of IoT devices to form a means of anonymous blockchain payments.
Stars: ✭ 46 (+142.11%)
Mutual labels:  monero
Xmrminer
🐜 A CUDA based miner for Monero
Stars: ✭ 158 (+731.58%)
Mutual labels:  monero
dalek-rangeproofs
This was a pure-Rust implementation of a rangeproof scheme. It is now obsoleted by Bulletproofs.
Stars: ✭ 16 (-15.79%)
Mutual labels:  zero-knowledge
Coin Hive
CoinHive cryptocurrency miner for node.js
Stars: ✭ 1,923 (+10021.05%)
Mutual labels:  monero
md
Unofficial technical documentation for Monero cryptocurrency
Stars: ✭ 68 (+257.89%)
Mutual labels:  monero
bellman
Bellman zkSNARK library for community with Ethereum's BN256 support
Stars: ✭ 121 (+536.84%)
Mutual labels:  zero-knowledge
alias-wallet
Official Alias source code repository
Stars: ✭ 5 (-73.68%)
Mutual labels:  ring-signature-scheme
crypto-in-action
algebra arithmetic, finite fields, elliptic curves, zero-knowledge
Stars: ✭ 65 (+242.11%)
Mutual labels:  zero-knowledge

MLSAG

This is a pure Rust implementation of the Multilayered Linkable Spontaneous Anonymous Group construction.

  • This implementation has not been reviewed or auditted. Use at your own risk.

Rust

This implementation requires Rust nightly.

Details

  • This particular version leverages Ristretto255. The basepoint used can be modified accordingly.

Monero Differences

  • This construction differs from the monero implementation in that we do not assume a specific context for the scheme, therefore all key images are needed to validate the signature.

  • Using Merlin transcripts, we do allow prefixing before items are added into the transcript. For no other reason than simplicity, we have opted to not add any extra items into the hash function. This should not affect the security of the scheme.

Further Applied Explorations

This particular library aims at a more generic construction for MLSAG therefore, the following features may be explored:

  • Custom ordering of members in the ring before signing. This can be done by adding a "tag" field to each member and allowing the user to pass in a closure to sort on this "tag".

  • Generic group trait to allow an instantiation of any Group to be used.

  • Currently code does not check if one members key is a permutation of anothers. This may not be consequential.

Known attacks

  • Since the Ristretto255 co-factor is 1. This implementation does not suffer form a small-order subgroup attack.

  • Another attack vector that can be explored is through the hash to point construction for the key image. If the hash to point construction allows for any commutativity, then the privacy feature of a ring signature will be lost.

For example:

  • Let P = x * G

  • HashToPoint(P) = (sha_256)(P) * G

  • KeyImage(x) = x * HashToPoint(P) = x * (sha_256(P) * G) = (x * G) * (sha_256(P)) = P * sha_256(P)

This allows an outsider to calculate the key Image of the signer with knowledge of just the public key.

Benchmarks

  • Processor : 2.2Ghz intel core i7

License

Licensed under MIT:

Design decisions

The Verify method takes a reference to the public keys

  • In the context of blockchains, the public key will be derived by deserailising a blob of bytes. In this sense, it will not be coming from another part of the program. It is therefore likely that it may be used in another process after verification; in some state management logic.

The Sign method does not take a reference to the the private key

  • The private key is consumed for safety and for contexttual reasons. In the blockchain context, a user can only sign once with a particular private key. If a user would like to sign the same/different message with a new set of decoys, this must be intentional; the user must create a new mlsag object, pick the same private keys and a different set of decoys. For safety, once a user has completed signing, the author does not believe that keeping the private key in the program is beneficial. If a user would like to use the private key again, they must re-generate. It is therefore impossible to continuously sign different messages on accident.

We could equally argue that the private key should take a reference and the destroying of it, should not be this libraries responsibility.

  • This library does not mamnage any state, therefore if a user produces two signatures with the same linkability tags, there will be no errors. This logic is usually handled in a state machine.
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].