(:title 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 segretos 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
}
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
y2 = S + a1x + a2x2 + ... + ak-1xk-1
....
yk = S + a1x + a2x2 + ... + ak-1xk-1
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.
Torna alla pagina di Crittografia