Skip to content

therealdarkflamemaster/Machine-voter-Python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Machine-voter-lectronique_Python

Le but de ce projet informatique est de vous faire créer une simulation de machine à voter securisé. La principale limitation du projet réside dans le fait que, dans un contexte opérationel, plusieurs entité distante et distincte doivent être impliquée ; dans notre projet les entités seront toutes hébergés sur le même ordinateur hôte.

Rapport

Ce rapport est écrit pour présenté brièvement le projet.

Diffcultés rencontrées

  • Zero-knowledge Proof Nombres trop large pour calculer, même si on utilise l'exponentiel rapide

Solutions mise en oeuvre

  • Singleton
def singleton(classe):
    _instance = {}

    def inner():
        if classe not in _instance:
            _instance[classe] = classe()
        return _instance[classe]

    return inner

Details

  1. Trouver Zp et son générateur Dans le document de Belenios...

  2. Génération d'UUID utiliser la façon HASH (sha256). fichier pythonSHA256.py

    def generate_uuid(self, x):
        return generate_hash(x.nom + x.prenom).hex()
  3. Génération de Cn et Pub(Cn) fichier Credential.py, PBKDF2.py et HmacSHA256.py

    def generate_intern_cn(self, x):
        crediential = Credential()
        return crediential.get_cn()
    
    def generate_pub_cn(self, x):
        crediential = Credential()
        return crediential.generate_pubcn(x.cn, x.uuid)
    • Génération de Cn faire référence au docu Belenios 14 lettres aléatoires et un lettre comme checksum

    • Génération Pub(Cn) comme l'indique dans le cahier de charges utiliser les fonctions dans les fichiers Credential.py, PBKDF2.py

  4. Shuffle fichier Algorithme/Shuffle.py

  5. Communication : BlowFish Chiffrement symétrique fichier Chiffrement/BlowFish.py

    # exemple
    driver_init()
    a = input_string("exemple blowfish")
    print(a)
    print(return_string(a)) # exemple blowfish
  6. Certificats : Ca, Ce, Cs pour les trois serveurs existants fichier entities/autoriteConfiance.py utiliser un string secret comme certificate = "Server-Enregistrement" et le chiffrement asymétrique ElGamal Chiffrement/ElGamal.py

    def test():
      keys = generate_keys()
      priv = keys['privateKey']
      pub = keys['publicKey']
      message = "My name is li. "
      cipher = encrypt(pub, message)
      plain = decrypt(priv, cipher)
    
      return message == plain

    vérifier un certificat

    def check_certificate_admin(self, cipher):
      plaintext = elgamal.decrypt(self.keys_admin["privateKey"], cipher)
      if plaintext != self.message_admin:
          raise "Server Administartion is not qualified !"
    
      print(Fore.GREEN + Style.BRIGHT + "Server Administration's certificate has been checked !" + Style.RESET_ALL)
  7. Générations des clés de V1, V2, ..., Vn ElGamal + une somme de clés secrète fichier entities/Trustee.py

    def generate_keys(self):
      ...
      h = elgamal.modexp(g, self.number_sum_s, prime_alea)
      iNumBits = 256
      self.publicKey = elgamal.PublicKey(prime_alea, g, h, iNumBits)
      self.privateKey = elgamal.PrivateKey(prime_alea, g, self.number_sum_s, iNumBits)

    utiliser la même façon comme cerficats pour vérifier les identités de Trustees au début de l'élection

  8. Contenu de bulletin

    • Chiffrement de la vote utiliser la clé publicque de Trustee pour chiffrer la vote d'un voter
    • Zero-knowledge Proof faire exactement comme celui indiqué dans le cahier des charges

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages