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.
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 .
David Schwarz
Mike-E