Ist es möglich, den Besitz von Public-Key-Hash ohne Public Key nachzuweisen?

Ich baue ein System, in dem ich möchte, dass der Benutzer einen öffentlichen Schlüssel-Hash einer Brieftasche angibt, über die er die Kontrolle hat, wenn er Trinkgelder, Rückerstattungen erhält und/oder anderweitig Wert an ihn zurücksenden muss.

Von dort aus möchte ich weiterhin eine Funktion bereitstellen, mit der der Benutzer überprüfen kann , ob er diese gehashte Adresse besitzt.

Wenn ich das richtig verstehe, können sie dies beweisen, indem sie eine Nachricht signieren, die ich ihnen sende, und dann könnten sie mir die Signatur zusammen mit dem öffentlichen Schlüssel zurücksenden.

Ich verstehe jedoch auch, dass die Offenlegung Ihres öffentlichen Schlüssels nicht als ideal angesehen wird .

Ich bin also gespannt, ob es irgendwo eine Lösung gibt, mit der ich den Besitz allein anhand der gehashten Adresse ohne Verwendung eines öffentlichen Schlüssels überprüfen kann.

Ich nehme an, da dieser Verifizierungsprozess vorübergehend ist und nicht dauerhaft in einer öffentlichen Blockchain (oder anderswo) gespeichert wird, ist er nicht so potenziell schädlich für ein Szenario (oder vielmehr „vertrauenswürdiger“ für den Benutzer). Ich möchte jedoch so gut wie möglich auf ihre Privatsphäre und Sicherheit achten und ihnen die Möglichkeit geben, ihre Inhaberschaft an dieser gehashten Adresse auf die am wenigsten invasive Weise zu überprüfen.

Reicht es aus, einfach irgendwo in der Benutzeroberfläche anzugeben, dass dieser Verifizierungsprozess den öffentlichen Schlüssel in keiner Weise speichert? Dies alles setzt eine HTTPS-Verbindung voraus, aber natürlich besteht das Risiko, dass, da Angreifer wissen, dass öffentliche Schlüssel übertragen werden, ein weiterer potenzieller Angriffsvektor eröffnet wird.

Außerdem interessiere ich mich sehr für andere Ansätze, die hier bevorzugt/bekannt sind, sowie für Beispiele von anderen Websites und/oder Diensten, die dieses Problem auf elegante Weise angegangen sind.

Ist die Verwendung einer zentralen Autorität akzeptabel?
Klar @DavidSchwartz, gerne teilen. Ich bin neu in diesem Bereich und interessiere mich dafür, verschiedene Ansätze zu lernen. Da dies mein erstes Projekt sein wird, wird es wahrscheinlich einen hybriden Ansatz haben, um meine Füße unter mich zu bekommen, also werden einige Elemente zentral sein.

Antworten (2)

Die einfache Antwort ist nein.

Ein Hash-Algorithmus soll eine Einwegfunktion sein. Wenn es möglich ist, den öffentlichen Schlüssel aus dem Hash neu zu erstellen, bedeutet dies, dass der Hash-Algorithmus gebrochen ist.

Es gibt jedoch einen Aspekt, den Sie möglicherweise nützlich finden. Für Nachrichtensignaturen verwendet Bitcoin eine benutzerdefinierte Codierung (im Vergleich zur DER-codierten Signatur, die in Transaktionen zu finden ist).

Bei einer benutzerdefinierten verschlüsselten Nachrichtensignatur, der Nachricht und einem Hash des öffentlichen Schlüssels können Sie überprüfen, ob die Signatur korrekt ist. Beachten Sie jedoch, dass dies daran liegt, dass die benutzerdefinierte verschlüsselte Signatur die Wiederherstellung öffentlicher Schlüssel unterstützt. Dadurch ergeben sich die gleichen Sicherheitsaspekte wie bei der bloßen Bereitstellung des öffentlichen Schlüssels, jedoch mit dem Vorteil, dass der Benutzer Ihnen den öffentlichen Schlüssel nicht eigens übermitteln muss.

Wenn Sie die benutzerdefinierten codierten Signaturen testen möchten, werden sie von der Funktion „signmessage“ im Bitcoin-Core-Client zurückgegeben. Sie können dann durch die „verifymessage“-Funktion oder durch mehrere Online-Tools wie dieses hier verifiziert werden: https://blockexplorer.com/messages/verify

1) Generieren Sie einen zufälligen privaten Schlüssel, der nur zum Nachweis des Eigentums verwendet wird.

2) Erstellen Sie eine Nachricht mit dem entsprechenden öffentlichen Schlüssel zu dem in Schritt 1 generierten Schlüssel und dem öffentlichen Schlüssel, dessen Besitz Sie nachweisen möchten.

3) Signieren Sie es mit beiden privaten Schlüsseln.

4) Senden Sie es an eine zentrale Behörde.

5) Erhalten Sie von der zentralen Behörde eine unterschriebene Erklärung, dass der Eigentümer des öffentlichen Schlüssels, der dem privaten Schlüssel entspricht, den Sie in Schritt 1 generiert haben, zu dem Konto gehört, dessen Eigentum Sie nachweisen möchten.

6) Sie können jetzt den Schlüssel, den Sie in Schritt 1 generiert haben, verwenden, um die Inhaberschaft des Kontos nachzuweisen, ohne den öffentlichen Schlüssel des Kontos an Dritte weiterzugeben, da die unterzeichnete Erklärung der zentralen Autorität den Schlüssel, den Sie in Schritt 1 generiert haben, an das Konto bindet, was die gemeinsame Kontrolle beweist .

Okay, ich denke, ich habe mich hauptsächlich damit beschäftigt, @david-schwartz. Vielen Dank für die Bereitstellung dieses Workflows. Meine Verwirrung ist im 2. Schritt. Sollte das lauten "und der Hash des öffentlichen Schlüssels , dessen Besitz Sie nachweisen möchten."? Wenn der Benutzer den öffentlichen Schlüssel des betreffenden Kontos sendet, verwendet er immer noch seinen öffentlichen Schlüssel, um den Besitz einer gehashten Adresse nachzuweisen, was ich zu vermeiden versuche. Oder ist die Implikation/Annahme hier, dass diese signierte Erklärung vom Benutzer irgendwo gespeichert werden soll, um sie zu einem späteren Zeitpunkt wie diesem Szenario zu verwenden?
@Mike-EEE Der Benutzer muss der zentralen Behörde seinen öffentlichen Schlüssel zur Verfügung stellen, da die zentrale Behörde sonst die Signatur der Anfrage nicht überprüfen kann. Aber wenn sie anderen Beweise liefern, können sie einfach die Aussage der Behörde verwenden, ohne den öffentlichen Schlüssel offenlegen zu müssen.