¿Es posible utilizar un esquema de clave pública como DSA como un esquema de compromiso? ¿Hay algún problema para hacer esto?
La respuesta puede ser sí o no, según lo que quieras decir con compromiso.
En un esquema de compromiso , tiene un dato ( d ) del cual calcula un valor c que publica; en una fecha posterior, publicará d . Este es un compromiso si se cumple lo siguiente:
En la superficie, esto se parece mucho a una función hash criptográfica , con algunos detalles sutiles. Si calcula c como h (d) para una función hash h (por ejemplo, SHA-256), entonces cumple con las propiedades de compromiso, < em> excepto que el compromiso es vulnerable a una búsqueda exhaustiva en los datos d . Se podrían probar los elementos de datos potenciales d y agruparlos a todos, para ver si uno coincide con c . Ese es un problema también encontrado con el almacenamiento de hashes de contraseña. La solución es aleatorización : calcula c como h (r || d) , donde r es un relleno aleatorio. (digamos 16 bytes al azar). Cuando abre el compromiso, publica tanto r como d . La aleatoriedad de r protege contra búsquedas exhaustivas.
¿Qué haría un esquema de firma como DSA en esa imagen? No mucho realmente. En lugar de hacer hashing, podría firmar , pero dado que todos pueden verificar la firma, aún tendrá el problema de la búsqueda exhaustiva (DSA incluye algunos datos aleatorios, pero no en el " lugar correcto "para un esquema de compromiso). De hecho, el DSA comienza con un hash de los datos, por lo que realmente está utilizando una función de hash, y el DSA es una complicación innecesaria.
Algunos esquemas de compromiso ofrecen algo más que la capacidad de comprometerse con un valor arbitrario; también permiten probar sin abrir el compromiso que el valor comprometido cumple algunas propiedades algebraicas. Esto se usa, por ejemplo, en algunos protocolos de votación electrónica (la votación está encriptada, pero el votante puede demostrar que la votación es un 0 o un 1, no otro entero). Este tipo de compromiso requiere matemáticas además de un hash: puede reutilizar algunos elementos que también se utilizan en algunos algoritmos de cifrado y firma asimétricos (como operaciones de módulo una gran prima), pero no solo el cifrado asimétrico o los algoritmos de firma solo.
Puede obtener un compromiso de un esquema de cifrado de clave pública haciendo que Alice obtenga $ (PK, SK) = Gen (1 ^ n, r_g) $ (donde $ r_g $ son las monedas aleatorias para el algoritmo $ Gen $ ). Para comprometerse con el mensaje $ m $ ella envía $ PK $ y $ c = E_ {PK} (m; r_e) $ a Bob, donde $ r_e $ son las monedas aleatorias utilizadas en el cifrado. Para abrir el compromiso en un momento posterior, Alice envía $ m, r_g $ a bob, quien a su vez obtiene $ (PK, SK) = Gen (1 ^ n, r_g) $ y verifica que $ c = E_ {PK} (m; r) $.
El solo envío de $ c $ y $ PK $ en la fase de confirmación y luego el envío de $ SK $ y $ m $ en la apertura no garantiza vinculante ya que puede haber otros $ SK '$ y $ m '$ tal que $ m' = D_ {SK} (m) $. Lo mismo se aplica al envío de $ r_e $ en la fase de apertura.
Para más detalles vea esto .
Lea otras preguntas en las etiquetas public-key-infrastructure cryptography encryption