All Projects → adjoint-io → aos-signature

adjoint-io / aos-signature

Licence: other
Abe-Ohkubo-Suzuki Linkable Ring Signatures

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to aos-signature

Practical Cryptography For Developers Book
Practical Cryptography for Developers: Hashes, MAC, Key Derivation, DHKE, Symmetric and Asymmetric Ciphers, Public Key Cryptosystems, RSA, Elliptic Curves, ECC, secp256k1, ECDH, ECIES, Digital Signatures, ECDSA, EdDSA
Stars: ✭ 2,400 (+4900%)
Mutual labels:  digital-signature, elliptic-curves
SendingEncryptedData
.NET Core Encryption
Stars: ✭ 38 (-20.83%)
Mutual labels:  digital-signature
MOTION
An efficient, user-friendly, modular, and extensible framework for mixed-protocol secure multi-party computation with two or more parties
Stars: ✭ 59 (+22.92%)
Mutual labels:  multiparty-computation
sonic
Zero-Knowledge SNARKs from Linear-Size Universal and Updatable Structured Reference Strings
Stars: ✭ 41 (-14.58%)
Mutual labels:  multiparty-computation
galois
A performant NumPy extension for Galois fields and their applications
Stars: ✭ 106 (+120.83%)
Mutual labels:  elliptic-curves
hacl
Archived. Curve25519 support has been integrated into mirage-crypto-ec (via fiat-crypto). Hacl bindings are available from the hacl-star opam package. OCaml bindings for HACL* elliptic curves
Stars: ✭ 21 (-56.25%)
Mutual labels:  elliptic-curves
btclib
btclib: a python3 library for 'bitcoin cryptography'
Stars: ✭ 60 (+25%)
Mutual labels:  elliptic-curves
ecurve
DiffieHellman, Elgamal, ECDSA & STS with elliptic curve in python
Stars: ✭ 19 (-60.42%)
Mutual labels:  elliptic-curves
niftygate
Drop-in Access Control via NFT Ownership
Stars: ✭ 61 (+27.08%)
Mutual labels:  digital-signature
elliptic-curve
A polymorphic interface for elliptic curve operations
Stars: ✭ 37 (-22.92%)
Mutual labels:  elliptic-curves
srijan-gsoc-2020
Healthcare-Researcher-Connector Package: Federated Learning tool for bridging the gap between Healthcare providers and researchers
Stars: ✭ 17 (-64.58%)
Mutual labels:  multiparty-computation
bls-js
BLS signature implementation
Stars: ✭ 15 (-68.75%)
Mutual labels:  elliptic-curves
BulletproofJS
Set of JavaScript based tools and Ethereum Solidity contracts for BulletProof based range proofs and confidential transactions
Stars: ✭ 26 (-45.83%)
Mutual labels:  elliptic-curves
libeddsa
cryptographic library for ed25519 and curve25519
Stars: ✭ 20 (-58.33%)
Mutual labels:  elliptic-curves
cloud-signature-consortium
Cloud Signature Consortium Remote Signature Service Provider in Node.js
Stars: ✭ 19 (-60.42%)
Mutual labels:  digital-signature
dilithium
No description or website provided.
Stars: ✭ 166 (+245.83%)
Mutual labels:  digital-signature
WeDPR-Lab-Core
Core libraries of WeDPR instant scenario-focused solutions for privacy-inspired business; WeDPR即时可用场景式隐私保护高效解决方案核心算法组件
Stars: ✭ 147 (+206.25%)
Mutual labels:  multiparty-computation
nim-blscurve
Nim implementation of BLS signature scheme (Boneh-Lynn-Shacham) over Barreto-Lynn-Scott (BLS) curve BLS12-381
Stars: ✭ 19 (-60.42%)
Mutual labels:  elliptic-curves
zkp
Experimental zero-knowledge proof compiler in Rust macros
Stars: ✭ 121 (+152.08%)
Mutual labels:  elliptic-curves
cryptos
Pure Python from-scratch zero-dependency implementation of Bitcoin for educational purposes
Stars: ✭ 846 (+1662.5%)
Mutual labels:  elliptic-curves

Adjoint Logo

CircleCI Hackage

A ring signature, also know as a Spontaneous Anonymous Group (SAG) or 1-out-of-n signature, convinces a verifier that a message is signed by any member in a group of n independent signers without allowing the verifier to identify who the signer was.

Abe-Ohkubo-Suzuki Ring Signatures

In their paper, "1-out-of-n Signatures from a Variety of Keys"[1], Abe, Ohkubo and Suzuki (AOS) present a method to construct a 1-out-of-n signature scheme that allows mixture use of different flavours of keys at the same time.

Linkable Spontaneous Anonymous Group (LSAG) Signature

Liu, et al.[2] add the property of linkability to ring signatures. Linkability means that two signatures by the same signer can be identified as such, but the signer remains anonymous. It adds the feature of claimability, which allows a signer to claim responsibility by providing proof of having generated a given signature.

A LSAG signature scheme satisfies three properties:

  • Anonymity: A signer cannot be distinguished from a pool of t commitments (public keys).
  • Spontaneity: No group secret, group manager of secret sharing setup stage.
  • Linkability: Two signatures by the same signer can be linked.

A LSAG Signature Scheme over elliptic curves

It consists of two parts: signature generation and signature verification. Let L = {y0, ..., yt-1} be a list of t public keys. Let H:{0, 1}* -> Zn where H is a cryptographic hash function and n is the order of the elliptic curve over a finite field Fq. For i ∈ {0, ..., t-1}, each user i has a distinct public key yi and a private key xi.

Signature Generation

Let k ∈ {0, ..., t-1} be the position of the prover's public key in the list L of public keys. Let xk be its private key. The LSAG signature of a message m ∈ {0,1}* is generated by the following steps:

  1. Compute h by encoding the hash of the public keys to a point in the curve, while hiding its discrete logarithm, and y = [xk] * h. Both computations are the product of a scalar and a point in the curve.

  2. Select u ∈ Zn and compute the first challenge chk+1 = H(L, y, m, [u] * g, [u] * h)

  3. For i in {k+1, ..., t-1, 0, ... k-1}, choose si ∈ Zn and compute the remaining challenges: chi+1 = H(L, y, m, [si] * g + [chi] * yi, [si] * h + [chi] * y)

  4. With the last chk computed, calculate sk = (u - xk * chk) mod n

The signature is (ch0, [s0, ..., st-1], y).

Signature Verification

Given a message m, a signature of a message (ch0, [s0, ..., st-1], y) and a list of public keys L, an honest verifier checks a signature as follows:

  1. For i in {0, ..., t-1} compute chi+1 = H(L, y, m, [si] * g + [chi] * yi, [si] * h + [chi] * y), where h = [H(L)] * g.

  2. Check whether c0 is equal to H(L, y, m, [st-1] * g + [cht-1] * yt-1, [st-1] * h + [cht-1] * y)

testSignature
  :: ECC.Curve
  -> Int
  -> ByteString
  -> IO Bool
testSignature curve nParticipants msg = do
  -- Generate public and private keys
  (pubKey, privKey) <- ECC.generate curve
  -- Generate random foreign participants
  extPubKeys <- genNPubKeys curve nParticipants
  -- Position of the signer's key in the set of public keys
  k <- fromInteger <$> generateBetween 0 (toInteger $ length extPubKeys - 1)
  -- List of public keys
  let pubKeys = insert k pubKey extPubKeys
  -- Sign message with list of public keys and signer's key pair
  signature <- sign pubKeys (pubKey, privKey) msg
  -- Verify signature
  pure $ verify pubKeys signature msg

References:

  1. M. Abe, M. Ohkubo, K. Suzuki. "1-out-of-n Signatures from a Variety of Keys", 2002
  2. K. Liu, K. Wei, S. Wong. "Linkable Spontaneous Anonymous Group Signature for Ad Hoc Groups", 2004

Notation:

  1. [b] * P: multiplication of a point P and a scalar b over an elliptic curve defined over a finite field modulo a prime number

License

Copyright 2018-2020 Adjoint Inc

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
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].