Gibt es ein Signaturformat oder hat die Kryptografie *nur einen* möglichen S-Wert?

BEARBEITEN: Diese Frage ist nicht spezifisch für Bitcoin. Es ist auf jede andere Kryptowährung anwendbar, die daran interessiert ist, ein anderes Signaturschema als Bitcoin oder den QT-Referenzclient zu verwenden. Ein Grund dafür ist, die Komplexität (und Fehler) im Protokoll zu reduzieren.

Mein Verständnis von formbaren Transaktionen in Bitcoin ist, dass zwei verschiedene Werte für "S" unterstützt werden, wenn eine Signatur validiert wird.

Die Lösung hierfür besteht darin, sicherzustellen, dass S kleiner als der folgende Wert ist

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

  HALF_CURVE_ORDER = ecParams.N.ShiftRight(1);

Welche Algorithmen oder Signaturansätze sind angesichts der Fülle an Signaturmechanismen, die für Kryptowährungen verfügbar sind, nicht anfällig für Malleable Transactions?

zB Was wäre wenn...

  • Statt secp256k1 wurde eine andere Kurve ausgewählt?
  • Ein anderer Signaturmechanismus wurde gewählt?
  • Ein völlig anderer Ansatz, wie z. B. ein blinder HMAC, der zum Signieren von Transaktionen verwendet wurde?

Ich bin an Antworten interessiert, die sowohl defekte Lösungen als auch solche beschreiben, die verhindern würden, dass formbare Transaktionen jemals stattfinden.

Mein Ziel ist es, einen Algorithmus auszuräumen, der konsistente Ergebnisse mit minimaler Komplexität für Implementierer liefert. (mit anderen Worten, sogar Mt. Gox würde es richtig machen)

@JacobTorba Kein Duplikat, ich frage, ob ein Signaturformat existiert, das dieses Problem nicht hat. Ich kenne alle Antworten auf diese Frage, und keine bezieht sich darauf. Vielleicht könnt ihr mir bei der Klärung helfen?
sie haben Recht! Dies ist eine legitime Frage mit einem kniffligen Titel, mein Fehler.
Ich denke, Sie haben Probleme mit der Funktionsweise von Hashing, es ist nicht so, dass sha256-Hashing die mehreren Werte verursacht, es geht nur darum, was in die Hash-Funktion eingespeist wird. Könnten Sie davon sprechen, Kollisionen zu vermeiden ? Es gibt eine extrem kleine Chance für die.
Mein Fokus liegt speziell auf zwei öffentlichen Schlüsseln, die dieselbe Signatur erzeugen können. Die Änderung der Signatur führt (natürlich) zu einem anderen sha256-Hash. Ich konzentriere mich hauptsächlich darauf, dass der S-Wert der Signatur weniger als die Hälfte der hierdurch definierten Kurvenordnung beträgt, zHALF_CURVE_ORDER = ecParams.N.ShiftRight(1);

Antworten (1)

Die Lösung ist unabhängig vom Kurven- oder Signaturalgorithmus dieselbe – nicht-kanonische Signaturen ablehnen. Genau dafür hat sich Bitcoin entschieden.

Diese Antwort trifft nicht auf meine Frage zu. Gibt es ein Signaturformat oder einen Verschlüsselungstyp, der es unmöglich macht, mehrere Werte für eine Signatur zu haben? Können Sie mir helfen, ... neu zu formulieren?
Ich denke, die Antwort lautet "Ja, ein kanonisches Signaturformat macht es unmöglich, mehrere Werte für eine Signatur zu haben". Die Software muss nur nicht-kanonische Signaturen ablehnen.
@makerofthings7 Jedes Schema, vorausgesetzt, nicht-kanonische Signaturen werden abgelehnt.
verstanden, aber ich betrachte Kryptowährungen im Allgemeinen, nicht spezifisch für Bitcoin, die Signaturschemata zulassen oder fördern können, die keine Implementierungsdetails zur Gewährleistung kanonischer Signaturen erfordern. (daher der Kommentar "sogar Mt Gox würde es richtig machen). Welcher Krypto-Ansatz würde diese Notwendigkeit beseitigen (außerhalb von Bitcoin und QT-Referenzclient)
@makerofthings7 Wenn Sie nicht-kanonische Signaturen ablehnen, gibt es kein Problem. Es gibt nur eine "richtige" Form jeder Signatur. Wenn Sie dies nicht tun, wird es immer dieses Problem geben. Jemand kann eine kanonische Signatur durch eine nicht-kanonische ersetzen. Beachten Sie, dass Mt Gox (oder Benutzer im Allgemeinen) nichts Besonderes tun müssen. Die Transaktionsverarbeitungs-Engine der Währung muss nicht-kanonische Signaturen ablehnen. Der Grund, warum Benutzer und Emittenten besondere Dinge tun mussten, ist, dass Bitcoin nicht -kanonische Signaturen nicht zurückgewiesen hat.
Meine Frage anders formuliert ... Haben alle Krypto-Signaturen ... nicht nur die in Bitcoin (RSA zum Beispiel ... El Gamal ... usw.) die Möglichkeit, eine Signatur auf viele Arten darzustellen?
Das hat nichts mit dem Algorithmus zu tun, das hat damit zu tun, wie Sie die Signaturen darstellen. Angenommen, ein Signaturalgorithmus hat eine Signatur von siebzehn erzeugt. Wenn Sie "017" unabhängig vom Algorithmus als gleichwertig mit "17" behandeln, haben Sie mehr als eine Möglichkeit, die Signatur darzustellen. Es hat nichts mit dem Kryptoalgorithmus zu tun, sondern mit den Regeln, die Sie zum Validieren der Darstellungen von Signaturen verwenden. Wenn die Repräsentationsgültigkeitsregeln eine und nur eine Möglichkeit bieten, eine gegebene Signatur darzustellen, sind Sie gut. Wenn nicht, nicht.