La sicurezza di ElGamal risiede nella difficoltà computazionale del Problema del Logaritmo Discreto (DLP) in campi finiti, cioè è facile calcolare l’esponenziale: ma è estremamente difficile (computazionalmente impossibile) fare l’inverso: dato , e , trovare l’esponente .

Generazione delle Chiavi

Questo è un crittosistema molto similare a D-H. Alice e Bob concordano pubblicamente su due numeri:

  1. Un numero primo molto grande, .
  2. Un generatore sul gruppo moltiplicativo .
  3. Alice sceglie una chiave privata e invia la chiave pubblica a Bob.
  4. Bob sceglie una chiave privata e invia la chiave pubblica a Alice.

Cifratura

Prima di cifrare dobbiamo dividere il messaggio in blocchi tale che . Ogni blocco viene cifrato con questa formula:

Decifratura

Ogni blocco viene decifrato con questa formula:

Firma digitale

La firma digitale di ElGamal è uno schema crittografico che serve a garantire autenticità, integrità e non ripudio di un messaggio. È basata sul problema del logaritmo discreto, lo stesso su cui si fonda l’algoritmo di cifratura ElGamal. Per firmare un messaggio l’utente A sceglie un grande intero chiamato , con . L’utente A calcola e che hanno le seguenti formule:

L’utente A invia a B non solo il messaggio cifrato ma anche la firma digitale . L’utente B per accettare la firma deve porre l’ uguaglianza e verificare se è vera.

El-Gamal con Curve Ellittiche

EC-ElGamal è la versione di ElGamal che lavora non su , ma sul gruppo dei punti di una curva ellittica su un campo finito. La sicurezza non si basa più sul logaritmo discreto classico, ma sul problema del logaritmo discreto su curve ellittiche (ECDLP), molto più difficile a parità di dimensioni. Tutti conoscono:

  • la curva ellittica
  • un campo finito
  • un punto generatore di ordine grande

Per fare la cifratura utilizziamo:

Nella formula utilizziamo

  • e chiavi pubbliche di A e di B
  • e chiavi private di A e di B

Per fare la decifratura utilizziamo:

Firma digitale con Curve Ellittiche

Si fissano i parametri pubblici del sistema:

  • : un numero primo.
  • : una curva ellittica definita sul campo .
  • : un punto generatore della curva.
  • : l’ordine del gruppo generato da , tale che .

Ogni utente (A e B) genera le proprie coppie di chiavi:

  • Chiave Privata (): scelta casualmente.
  • Chiave Pubblica: calcolata come (moltiplicazione scalare del punto ).

Nel caso specifico:

  • Utente A: privata , pubblica .
  • Utente B: privata , pubblica .

Per firmare un messaggio , l’utente A esegue i seguenti passaggi:

  1. Scelta di : Sceglie un intero casuale tale che sia invertibile modulo .
    • Condizione: ovvero .
  2. Calcolo di : Calcola il punto sulla curva:
  3. Calcolo di : Calcola lo scalare utilizzando l’hash del messaggio e la coordinata x di :

Dove è una funzione di hash sicura.

La firma generata è la coppia: . L’utente B riceve il messaggio e la firma e calcola due valori per verificare la validità:

  1. Calcolo di :
  2. Calcolo di :

La firma è accettata se e solo se .