Possiamo usare uno schema a chiave pubblica per eseguire l'impegno crittografico

3

È possibile utilizzare uno schema a chiave pubblica come DSA come schema di impegno? Ci sono problemi con questo?

    
posta DaTaBomB 28.11.2012 - 03:06
fonte

2 risposte

9

La risposta può essere sì o no a seconda di cosa intendi per impegno.

In uno schema di impegno , hai una parte di dati ( d ) da cui calcoli un valore c che pubblichi; in un secondo momento, pubblichi d . Questo è un impegno se è vero quanto segue:

  • Da c , non è possibile ricalcolare d .
  • Chiunque conosca c e d deve essere in grado di accertarsi che corrispondano.
  • Non deve essere possibile, anche per te, trovare un d ' diverso da d ma che corrisponde ancora a c .

In superficie, sembra molto simile a una funzione di hash crittografica , con alcuni dettagli delicati. Se calcoli c come h (d) per una funzione hash h (ad esempio SHA-256), allora soddisfi le proprietà di impegno, < em> tranne che l'impegno è vulnerabile alla ricerca completa sui dati d . Si potrebbero provare i potenziali elementi di dati d e cancellarli tutti, per vedere se uno corrisponde a c . Questo è un problema riscontrato anche con la memorizzazione degli hash delle password. La soluzione è randomization : calcoli c come h (r || d) dove r è un riempimento casuale (diciamo 16 byte casuali). Quando apri l'impegno, pubblichi sia r che d . La casualità di r protegge dalla ricerca esauriente.

Che cosa farebbe uno schema di firma come il DSA in quella foto? Non molto, davvero. Invece di fare hashing, puoi firmare , ma dato che tutti possono verificare la firma, avrai comunque un problema esaustivo di ricerca (il DSA include alcuni dati casuali, ma non nel " posto giusto "per uno schema di impegno). Infatti, DSA inizia con l'hashing dei dati, quindi stai utilizzando una funzione hash e il DSA è una complicazione inutile.

Alcuni schemi di impegno forniscono molto più della semplice capacità di impegnarsi a un valore arbitrario; inoltre permettono di dimostrare senza aprire l'impegno che il valore commit-to soddisfa alcune proprietà algebriche. Questo viene utilizzato, ad esempio, in alcuni protocolli di votazione elettronica (il voto è criptato, ma l'elettore può dimostrare che il voto è o uno 0 o un 1, non un altro intero). Questo tipo di impegno richiede la matematica oltre a un semplice hash: può riutilizzare alcuni elementi che vengono utilizzati anche in algoritmi di crittografia e firma asimmetrici (come le operazioni modulo un grande primo), ma non solo gli algoritmi di crittografia o firma asimmetrici da soli.

    
risposta data 28.11.2012 - 13:31
fonte
0

È possibile ottenere un impegno da uno schema di crittografia a chiave pubblica ottenendo che Alice ottenga $ (PK, SK) = Gen (1 ^ n, r_g) $ (dove $ r_g $ è le monete casuali per l'algoritmo $ Gen $ ). Per impegnare il messaggio $ m $ invia $ PK $ e $ c = E_ {PK} (m; r_e) $ a Bob, dove $ r_e $ sono le monete casuali utilizzate nella crittografia. Per aprire l'impegno in un momento successivo Alice invia $ m, r_g $ a bob, che a sua volta ottiene $ (PK, SK) = Gen (1 ^ n, r_g) $ e verifica che $ c = E_ {PK} (m; r). $

Basta inviare $ c $ e $ PK $ nella fase di commit e successivamente inviare $ SK $ e $ m $ in apertura non garantisce binding poiché potrebbero esserci altri $ SK '$ e $ m '$ tale che $ m' = D_ {SK} (m) $. Lo stesso vale per l'invio di $ r_e $ nella fase di apertura.

Per ulteriori dettagli vedi questo .

    
risposta data 17.07.2017 - 14:28
fonte

Leggi altre domande sui tag