cerca
Secret Sharing
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Return to Secret Sharing  (Edit)

Uni.CrittoSecret History

Hide minor edits - Show changes to output

Changed lines 116-119 from:
L'uomo coraggioso si può cimentare nella risoluzione del sistema. Nei temi d'esame viene chiesto di costruire le share, ma mai di risolvere per lo schema (k,n), mentre è richiesta anche la ricostruzione per lo schema (n,n).
to:
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).


''[[http://ananke.crema.unimi.it/Crittografia/Appello-090211.pdf|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.''
Changed line 112 from:
y'_1_' = S + a'_1_' * 1 + a'_2_' * 1 mod 7
to:
y'_1_' = S + a'_1_' * 1 + a'_2_' * 1'^2^' mod 7
Changed lines 11-12 from:
Lo '''schema (k,n)''' invece divide il segretos sempre tra '''n''' partecipanti, ma bastano '''k < n''' partecipanti per ricostruirlo.
to:
Lo '''schema (k,n)''' invece divide il segreto sempre tra '''n''' partecipanti, ma bastano '''k < n''' partecipanti per ricostruirlo.
Changed line 64 from:
y'_i_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
to:
y'_i_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^' mod p
Changed lines 76-77 from:
y'_1_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
y'_2_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
to:
y'_1_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^' mod p
y'_2_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^' mod p
Changed lines 79-80 from:
y'_k_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
to:
y'_k_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^' mod p
Added lines 85-116:

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

Scelgo a caso i '''k-1''' valori di '''a''':
a'_1_' = 4
a'_2_' = 3

Calcolo le share secondo la formula
y'_i_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^' mod p

y'_1_' = 3 + 4 * 1 + 3 * 1'^2^' mod 7 = 3 mod 7
y'_2_' = 3 + 4 * 2 + 3 * 2'^2^' mod 7 = 2 mod 7
y'_3_' = 3 + 4 * 3 + 3 * 3'^2^' mod 7 = 0 mod 7
y'_4_' = 3 + 4 * 4 + 3 * 4'^2^' mod 7 = 4 mod 7
y'_5_' = 3 + 4 * 5 + 3 * 5'^2^' mod 7 = 0 mod 7

Posso distribuire le share:
y'_1_' = 3
y'_2_' = 2
y'_3_' = 0
y'_4_' = 4
y'_5_' = 0

Per ricostruire, devo impostare il sistema con '''k''' di questi valori. Ad esempio, scelgo y'_1_', y'_3_', y'_5_':

y'_1_' = S + a'_1_' * 1 + a'_2_' * 1 mod 7
y'_3_' = S + a'_1_' * 3 + a'_2_' * 3'^2^' mod 7
y'_5_' = S + a'_1_' * 5 + a'_2_' * 5'^2^' mod 7

L'uomo coraggioso si può cimentare nella risoluzione del sistema. Nei temi d'esame viene chiesto di costruire le share, ma mai di risolvere per lo schema (k,n), mentre è richiesta anche la ricostruzione per lo schema (n,n).
Added lines 1-86:
(:title Secret Sharing:)
%titolo%''':: Secret Sharing ::'''

[[Torna alla pagina di Crittografia -> 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 '''a'_n-1_'''' share: a'_1_', a'_2_' ... a'_n-1_'
* lo share '''a'_n_'''' lo ottengo così: a'_n_' = S - a'_1_' - a'_2_' - ... - a'_n-1_' mod p
* distribuisco gli '''a''' ai miei n utenti
* per ricostruire, tutti gli utenti devono condividere i loro share: '''S''' = a'_1_' + a'_2_' + ... + a'_n-1_' + a'_n_' 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 '''a'_n-1_':
a'_1_' = 4
a'_2_' = 5
a'_3_' = 2
a'_4_' = 4

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

Come dicevo sopra, per trovare '''a'_n_'''' devo risolvere questo calcolo:
a'_n_' = S - a'_1_' - a'_2_' - ... - a'_n-1_' mod p
a'_n_' = 3 - 4 - 5 - 2 - 4 mod 7 = 2 mod 7

Ho quindi tutte le 5 share:
a'_1_' = 4
a'_2_' = 5
a'_3_' = 2
a'_4_' = 4
a'_5_' = 2
e le distribuisco ai miei 5 utenti.

Per '''ricostruire''' il segreto '''S''', avendo a disposizione solo le share, devo fare:
'''S''' = a'_1_' + a'_2_' + ... + a'_n-1_' + a'_n_'
'''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: a'_1_', a'_2_' ... a'_k-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 ++) {
y'_i_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
}
Questo vuol dire che l''''i-esima''' share è ottenuta a partire da questa formula, in cui
* i valori '''a'_k_'''' 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 '''y'_i_'''', 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ì:
y'_1_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
y'_2_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-1^'
....
y'_k_' = S + a'_1_'x + a'_2_'x'^2^' + ... + a'_k-1_'x'^k-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 -> Crittografia]]