provotum / security

The ElGamal encryption and proof components

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Provotum Security

Credits: The encryption and proof logic is heavily inspired by the Adder Voting System.

Requirements

Installation

  • Clone this repo and cd into it: git clone git@github.com:provotum/security.git && cd security
  • Run mvn clean install to install the application and run the corresponding tests

Development

Main Interfaces

  • IHomomorphicEncryption This interface ensures the signature for all implementations of a particular kind of homomorphic encryption. As a generic parameter, it requires the kind of ciphertext it operates on.
  • IHomomorphicCipherText Homomorphic cipher texts allow to operate on each other, abstracting the concrete mathematical details from the caller. It requires a concrete ciphertext as generic parameter.
  • IMembershipProof The interface for a membership proof requires a class implementing \texttt{IHomomorphicCiphertext} as generic parameter, restricting the classes it is able to generate proofs for.

Main Implementations

    E(m) = (g^r, h^r * g^m), with
    
    g = generator
    m = message</li>
    h = g^x i.e. the public key whereas x = private key
    r = [0, q-1]
    
    which operates in an additive manner over the encrypted plaintexts:
    
    E(m1) * E(m2) = (g^(r1+r2), h^(r1+r2) * g^(m1+m2))
                  = E(m1 + m2)
  • ElGamal Encryption The encryption and decryption component for the above documented ciphertext.
  • Non-interactive Membership Proof The non-interactive membership proof allowing to prove that a certain ElGamal ciphertext actually contains a particular cleartext value.

About

The ElGamal encryption and proof components

License:Apache License 2.0


Languages

Language:Java 100.0%