cerca
Secret Sharing
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Secret Sharing

 :: Secret Sharing ::

Torna alla pagina di Crittografia

Che cos'è

Secret Sharing è un nome generico che si applica a tecniche che permettono di distribuire parti (share) di un numero segreto a più utenti, e che permettono di ricostruire il segreto solo con la collaborazione di tutti gli utenti che hanno share oppure con una parte di essi.

Si dividono in due gruppi: schema (n,n) e schema (k,n).
Lo schema (n,n) divide il segreto tra n partecipanti, e per ricostruirlo sono necessarie le share di tutti gli n partecipanti.
Lo schema (k,n) invece divide il segreto sempre tra n partecipanti, ma bastano k < n partecipanti per ricostruirlo.

Schema (n,n)

Ecco che cosa occorre fare:

  • scegliere un numero primo p
  • scegliere il numero segreto S, con S < p
  • scegliere casualmente n-1 valori minori di p, e assegnarli alle an-1 share: a1, a2 ... an-1
  • lo share an lo ottengo così: an = S - a1 - a2 - ... - an-1 mod p
  • distribuisco gli a ai miei n utenti
  • per ricostruire, tutti gli utenti devono condividere i loro share: S = a1 + a2 + ... + an-1 + an mod p

Esempio numerico

Voglio uno schema (5,5), cioè divido il segreto in 5 share. Ecco tutti i passaggi

Scelgo un numero primo che più mi aggrada: p = 7.

Decido che il segreto sia S = 3.

Scelgo ora n - 1 valori casuali, per assegnarli agli share fino a '''an-1:

 a1 = 4
 a2 = 5
 a3 = 2
 a4 = 4

È possibile anche avere valori ripetuti, non è un problema.

Come dicevo sopra, per trovare an devo risolvere questo calcolo:

 an = S - a1 - a2 - ... - an-1 mod p
 an = 3 - 4 - 5 - 2 - 4 mod 7 = 2 mod 7

Ho quindi tutte le 5 share:

 a1 = 4
 a2 = 5
 a3 = 2
 a4 = 4
 a5 = 2

e le distribuisco ai miei 5 utenti.

Per ricostruire il segreto S, avendo a disposizione solo le share, devo fare:

 S = a1 + a2 + ... + an-1 + an
 S = 4 + 5 + 2 + 4 + 2 mod 7 = 17 mod 7 = 3 mod 7

E infatti, il segreto era 3.

Schema (k,n)

Questo schema è più complesso: divido il segreto in n share, ma ne bastano k < n per ricostruirlo.

Come sopra, devo scegliere

  • il primo p
  • il segreto S < p
  • k - 1 valori: a1, a2 ... ak-1, tutti minori di p

In questo caso, questi k-1 valori non sono le share. Infatti, le share le ottengo calcolando la seguente espressione:

 for (i = 1; i <= n; i ++) {
   yi = S + a1x + a2x2 + ... + ak-1xk-1 mod p
 }

Questo vuol dire che l'i-esima share è ottenuta a partire da questa formula, in cui

  • i valori ak li ho, perché li ho scelti a caso sopra
  • al posto delle x sostituisco il valore di i
    • nella share numero 1, x = 1
    • nella share numero 2, x = 2
  • e così via per tutte le n share

Distribuisco quindi i vari yi, assieme alla i stessa: ovvero, l'utente conosce il valore della share ed il numero i della sua share.

Per ricostruire il segreto, mi bastano k share, perché mi permettono di costruire un sistema così:

 y1 = S + a1x + a2x2 + ... + ak-1xk-1 mod p
 y2 = S + a1x + a2x2 + ... + ak-1xk-1 mod p
 ....
 yk = S + a1x + a2x2 + ... + ak-1xk-1 mod p

In questo caso:

  • le varie y_i_' sono note
  • le x le sostituisco come prima, con il valore di i

Le incognite sono quindi S e i k-1 valori di a: k incognite, k equazioni: il sistema si può risolvere.

Esempio

Voglio uno schema (3,5).
Scelgo p = 7 e S = 3 come prima.

Scelgo a caso i k-1 valori di a:

 a1 = 4
 a2 = 3

Calcolo le share secondo la formula

 yi = S + a1x + a2x2 + ... + ak-1xk-1 mod p

 y1 = 3 + 4 * 1 + 3 * 12 mod 7 = 3 mod 7
 y2 = 3 + 4 * 2 + 3 * 22 mod 7 = 2 mod 7
 y3 = 3 + 4 * 3 + 3 * 32 mod 7 = 0 mod 7
 y4 = 3 + 4 * 4 + 3 * 42 mod 7 = 4 mod 7
 y5 = 3 + 4 * 5 + 3 * 52 mod 7 = 0 mod 7

Posso distribuire le share:

 y1 = 3
 y2 = 2
 y3 = 0
 y4 = 4
 y5 = 0

Per ricostruire, devo impostare il sistema con k di questi valori. Ad esempio, scelgo y1, y3, y5:

 y1 = S + a1 * 1 + a2 * 12 mod 7
 y3 = S + a1 * 3 + a2 * 32 mod 7
 y5 = S + a1 * 5 + a2 * 52 mod 7

L'uomo coraggioso si può cimentare nella risoluzione del sistema. Nei temi d'esame viene chiesto di costruire le share, ma (quasi) mai di risolvere per lo schema (k,n), mentre è richiesta anche la ricostruzione per lo schema (n,n).

Nell'appello dell'11-02-09 era prevista la ricostruzione di uno schema (k,n), quindi fate molta attenzione; se mai dovesse riaccadere, preparatevi con il citrinesco teorema cinese del resto.

Torna alla pagina di Crittografia