¿Existe un formato de firma o la criptografía tiene *solo* un posible valor S?

EDITAR: Esta pregunta no es específica de Bitcoin. Es aplicable a cualquier otra moneda criptográfica que esté interesada en utilizar un esquema de firma diferente al de Bitcoin o al cliente de referencia QT. Una razón para esto es reducir la complejidad (y los errores) en el protocolo.

Mi comprensión de las transacciones maleables en Bitcoin es que se admiten dos valores diferentes para "S" cuando se valida una firma.

La solución para esto es asegurar que S sea menor que el siguiente

  X9ECParameters ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");

  HALF_CURVE_ORDER = ecParams.N.ShiftRight(1);

Dada la gran cantidad de mecanismos de firma disponibles para las criptomonedas, ¿qué algoritmos o enfoques de firma no son vulnerables a las transacciones maleables?

por ejemplo, ¿y si...?

  • ¿Se seleccionó una curva diferente en lugar de secp256k1?
  • ¿Se eligió un mecanismo de firma diferente?
  • ¿Se utilizó un enfoque completamente diferente, como un HMAC ciego para firmar transacciones?

Estoy interesado en las respuestas que describen tanto las soluciones que están rotas como las que evitarían que ocurran transacciones maleables.

Mi objetivo es eliminar un algoritmo que produzca resultados consistentes con una complejidad mínima para los implementadores. (en otras palabras, incluso Mt Gox lo haría bien)

@JacobTorba No es un duplicado, pregunto si existe un formato de firma que no tenga este problema. Estoy al tanto de todas las respuestas de esa pregunta, y ninguna se relaciona. ¿Quizás puedas ayudarme a aclarar?
¡estás bien! Esta es una pregunta legítima con un título engañoso, mi error.
Creo que tiene problemas con la forma en que funciona el hash, no es que el hash sha256 cause los valores múltiples, se trata de lo que se alimenta a la función hash. ¿Podría estar hablando de evitar colisiones? Hay una posibilidad extremadamente pequeña para ellos.
Mi atención se centra específicamente en dos claves públicas que pueden generar la misma firma. El cambio en la firma da como resultado un hash sha256 diferente (por supuesto). Me enfoco principalmente en que el valor S de la firma sea menos de la mitad del orden de la curva como lo define esto, por ejemploHALF_CURVE_ORDER = ecParams.N.ShiftRight(1);

Respuestas (1)

La solución es la misma independientemente de la curva o el algoritmo de firma: rechace las firmas no canónicas. Esto es precisamente lo que Bitcoin ha decidido hacer.

Esta respuesta no se aplica a mi pregunta. ¿Existe un formato de firma o un tipo de cifrado que imposibilite tener múltiples valores para una firma? ¿Puedes ayudarme a reformular...?
Creo que la respuesta es "sí, un formato de firma canónico hace que sea imposible tener múltiples valores para una firma". El software solo necesita rechazar las firmas no canónicas.
@makerofthings7 Cualquier esquema, siempre que se rechacen las firmas no canónicas.
entendido, pero estoy buscando criptomonedas en general, no específicas de Bitcoin, que pueden permitir o promover esquemas de firma que no requieren el detalle de implementación para garantizar firmas canónicas. (de ahí el comentario "incluso Mt Gox lo haría bien). ¿Qué enfoque criptográfico eliminaría esta necesidad (fuera del cliente de referencia de Bitcoin y QT)?
@makerofthings7 Si rechaza las firmas no canónicas, entonces no hay problema. Hay una y sólo una forma "correcta" de cada firma. Si no lo hace, entonces siempre habrá este problema. Alguien puede reemplazar una firma canónica con una no canónica. Tenga en cuenta que no hay nada especial que Mt Gox (o los usuarios en general) tenga que hacer. El motor de procesamiento de transacciones de la moneda tiene que rechazar firmas no canónicas. La razón por la que los usuarios y los emisores tuvieron que hacer cosas especiales es que Bitcoin no rechazó las firmas no canónicas.
Mi pregunta está formulada de otra manera... ¿Todas las firmas criptográficas... No solo las de Bitcoin (RSA, por ejemplo... El gamal... Etc.) tienen la capacidad de representar una firma de muchas maneras?
Eso no tiene nada que ver con el algoritmo, tiene que ver con cómo eliges representar las firmas. Por ejemplo, digamos que un algoritmo de firma produjo una firma de diecisiete. Independientemente del algoritmo, si trata "017" como equivalente a "17", entonces tiene más de una forma de representar la firma. No tiene nada que ver con el algoritmo criptográfico sino con las reglas que usas para validar las representaciones de las firmas. Si las reglas de validez de la representación proporcionan una y solo una forma de representar cualquier firma dada, está bien. Si no, no.