In cryptography, a ring signature is a type of digital signature that can be performed by any member of a group of users that each have keys. Therefore, a message signed with a ring signature is endorsed by someone in a particular group of people. One of the security properties of a ring signature is that it should be computationally infeasible to determine which of the group members' keys was used to produce the signature. Ring signatures are similar to group signatures but differ in two key ways: first, there is no way to revoke the anonymity of an individual signature, and second, any group of users can be used as a group without additional setup. Ring signatures were invented by Ron Rivest, Adi Shamir, and Yael Tauman, and introduced at ASIACRYPTin 2001. The name, ring signature, comes from the ring-like structure of the signature algorithm.
Definition
Suppose that a group of entities each have public/private key pairs,,,...,. Party i can compute a ring signature σ on a message m, on input. Anyone can check the validity of a ring signature given σ, m, and the public keys involved, P1,..., Pn. If a ring signature is properly computed, it should pass the check. On the other hand, it should be hard for anyone to create a valid ring signature on any message for any group without knowing any of the private keys for that group.
Applications and modifications
In the original paper, Rivest, Shamir, and Tauman described ring signatures as a way to leak a secret. For instance, a ring signature could be used to provide an anonymous signature from "a high-ranking White House official", without revealing which official signed the message. Ring signatures are right for this application because the anonymity of a ring signature cannot be revoked, and because the group for a ring signature can be improvised. Another application, also described in the original paper, is for deniable signatures. Here the sender and the recipient of a message form a group for the ring signature, then the signature is valid to the recipient, but anyone else will be unsure whether the recipient or the sender was the actual signer. Thus, such a signature is convincing, but cannot be transferred beyond its intended recipient. There were various works, introducing new features and based on different assumptions: ;Threshold ring signatures: Unlike standard "t-out-of-n" threshold signature, where t of n users should collaborate to decrypt a message, this variant of a ring signature requires t users to cooperate in the signing protocol. Namely, t parties can compute a -ring signature, σ, on a message, m, on input. ;Linkable ring signatures: The property of linkability allows one to determine whether any two signatures have been produced by the same member. The identity of the signer is nevertheless preserved. One of the possible applications can be an offline e-cash system. ;Traceable ring signature: In addition to the previous scheme the public key of the signer is revealed. An e-voting system can be implemented using this protocol.
Efficiency
Most of the proposed algorithms have asymptotic output size ; i.e., the size of the resulting signature increases linearly with the size of input. That means that such schemes are impracticable for real use cases with sufficiently large . But for some application with relatively small median input size such estimate may be acceptable. CryptoNote implements ring signature scheme by Fujisaki and Suzuki in p2p payments to achieve sender's untraceability. More efficient algorithms have appeared recently. There are schemes with the sublinear size of the signature, as well as with constant size.
Implementation
Original scheme
The original paper describes an RSA based ring signature scheme, as well as one based on Rabin signatures. They define a keyed "combining function" which takes a key, an initialization value, and a list of arbitrary values. It outputs a single value. The equation is solvable for any single input, but it is infeasible to solve for if the adversary cannot invert any of the trap-door functions. The function is called the ring equation, and is defined below. The equation is based on a symmetric encryption function : In the ring signature scheme, the output is the same as the input. This function is trivially invertible given parameters.
Signature generation
Generating a ring signature involves six steps. The plaintext is signified by, the ring's public keys by.
Here is a Python implementation of the original paper using RSA. import os, hashlib, random, Crypto.PublicKey.RSA class Ring: """RSA implementation.""" def __init__ -> None: self.k = k self.l = L self.n = len self.q = 1 << def sign: """Sign a message.""" self._permut s = * self.n u = random.randint c = v = self._E for i in range + range: s = random.randint e = self._g v = self._E if % self.n 0: c = v s = self._g return + s def verify -> bool: """Verify a message.""" self._permut def _f: return self._g y = map def _g: return self._E r = reduce return r X def _permut: self.p = int.hexdigest, 16) def _E: msg = '%s%s' % return int.hexdigest, 16) def _g: q, r = divmod if <= : result = q * n + pow else: result = x return result
To sign and verify 2 messages in a ring of 4 users: size = 4 msg1, msg2 = 'hello', 'world!' def _rn: return Crypto.PublicKey.RSA.generate key = map r = Ring for i in range: s1 = r.sign s2 = r.sign assert r.verify and r.verify and not r.verify
Cryptocurrencies
The CryptoNote technology uses ring signatures. It was first implemented by Bytecoin.
ShadowCash
The cryptocurrency ShadowCash uses traceable ring signature to anonymize the sender of a transaction. However, these were originally implemented incorrectly, resulting in a partial de-anonymization of ShadowCash from their first implementation until February 2016 by Monero Research Labs researcher, Shen Noether. Luckily only 20% of all the one-time keys in the system were affected by this bug, sender anonymity was compromised but receiver anonymity remained intact. A patch was submitted in a timely fashion to resolve the bug.
Monero
Between January 10, 2017 and October 18, 2018, Monero used Ring Confidential Transaction technology to obfuscate transaction amounts on the blockchain. This allowed only the sender and recipient of the funds to know the true quantity being sent. The currency has since switched to Bulletproofs.