Skip to content
The ElGamal encryption and proof components
Branch: master
Clone or download
Latest commit af8d45f Mar 19, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src provotum/backend#21: Add clone methods Mar 7, 2018
.gitignore Ignore .DS_Store Feb 1, 2018
.travis.yml #1: Add proof to CipherText Feb 14, 2018
LICENSE Create LICENSE Mar 19, 2018
README.md Update README.md Mar 19, 2018
pom.xml provotum/backend#21: Add clone methods Mar 7, 2018

README.md

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.
You can’t perform that action at this time.