Wenn jetzt sagen wir mal 5 Leute eine 2/5 Wallet erstellen und dann findet eine TX darauf statt.
Jetzt treffen sich die 5 und keiner will es gewesen sein. Da müsste es doch jetzt irgendwie möglich sein die TX zu analisieren welche Signaturen an der TX beteiligt waren oder?
Wie würde das denn gehen?
Wahrscheinlich schauen welche locking Skripts, also public keys der utxo signiert worden sind. Da ja alle Beteiligten die master Public Keys der anderen Teilnehmer haben, können sie deren Anteil an der Adresse ableiten und schauen ob dieser Teil signiert wurde.
Meines Wissens nach ist es nicht möglich, so einfach Rückschlüsse auf die unterzeichnenden Schlüssel zu ziehen.
Alle Schlüssel sind in jeder Kombination gültig und erstellen eine gültige Signatur. Das kann auch geprüft werden.
Hast du drei Hausschlüssel und machst Sticker mit verschiedenen Farben drauf, kannst du ja auch nur feststellen, dass die Tür aufgeschlossen wurde, aber nicht mit welcher Farbe.
Dann hier mit erhöhtem Detailgrad um die Zusammenhänge darzustellen:
Bei einer nativen SegWit-Transaktion mit Multisig werden die Signaturen und das Skript, das die Multisig-Bedingung definiert (bekannt als Redeem Script), in den Witness-Daten der Transaktion gespeichert. Diese Daten sind öffentlich auf der Blockchain einsehbar.
Da das Redeem Script die öffentlichen Schlüssel aller an der Multisig beteiligten Parteien enthält, und die Signaturen separat in den Witness-Daten vorhanden sind, kann man durch Überprüfung der Signaturen mit den bekannten öffentlichen Schlüsseln feststellen, welche Signaturen mit welchen Schlüsseln übereinstimmen.
Angenommen, man hat eine 2-von-3-Multisig-Adresse, die aus den folgenden öffentlichen Schlüsseln besteht:
PubKeyA
PubKeyB
PubKeyC
Diese Adresse erfordert die Signatur von mindestens zwei der drei zugehörigen privaten Schlüssel, um eine Transaktion auszugeben.
Beim Ausgeben einer UTXO von dieser Adresse wird die Transaktion von zwei privaten Schlüsseln signiert, sagen wir PrivKeyA und PrivKeyB. Die erzeugten Signaturen sind SigA und SigB.
In den Witness-Daten der Transaktion sind dann die folgenden Daten:
- Die Signaturen: SigA und SigB
- Das Redeem Script: Dieses enthält die Multisig-Bedingung und die drei öffentlichen Schlüssel (PubKeyA, PubKeyB, PubKeyC)
Wenn man alle öffentlichen Schlüssel kennt, kann man jede Signatur folgendermaßen überprüfen:
SigA wird nacheinander mit PubKeyA, PubKeyB und PubKeyC überprüft. Die Signatur wird nur mit dem passenden öffentlichen Schlüssel gültig sein. In diesem Fall passt SigA zu PubKeyA.
SigB wird ebenfalls mit allen drei öffentlichen Schlüsseln überprüft und passt zu PubKeyB.
Durch diesen Prozess stellst du fest, dass PrivKeyA und PrivKeyB verwendet wurden, um die Transaktion zu signieren.
Das ist natürlich alles nicht so einfach per Hand möglich, sondern man muss sich schon kleine Programme dafür schreiben.
Für tiefere Einblicke kann ich die Website learnmeabitcoin.com empfehlen.