TLDR:
Peter R. ignoriert in seinem Vortrag, dass es neben dem P2P Layer einen Consensus-Layer gibt, bzw. unterstellt der absoluten Mehrheit, dass diese vorab einen Hard-Fork durchführt und Segwit auf dem Consensus-Layer deaktiviert.
Dann ist der Angriff allerdings kein Angriff mehr, weil es überhaupt keine gültigen Witnessdaten mehr auf dem P2P Layer gibt, die man vorenthalten könnte, und der Sinn des Vortrages ist ebenso ad absurdum geführt.
Zudem gibt es keinen standardisierten P2P Layer bei Segwit Knoten um Segwit-Blöcke ohne Witnessdaten zu übertragen.
Also das mit dem Signature Pruning geht theoretisch bereits jetzt.
Unter bestimmten Bedingungen wäre das sogar sinnvoll, weil Bitcoin Unlimited beim IBD die Signaturen zwar runterlädt, aber nicht überprüft, also Bandbreite verschwendet.
Bitcoin Core unterstützt eine ähnliche Funktion mit Assumevalid(), verschwendet also praktisch auch Bandbreite, wenn man sich nicht für die Signaturen in ganz alten Blöcken interessiert und diese nicht anderen zur Verfügung stellen möchte.
Das wirklich neue an Segwit ist in diesem Fall nur, dass man jetzt dafür
theoretisch einen
standardisierten Weg hat, welcher rückwärtskompatibel mit bestehenden Nodes ist und zwar auf dem P2P-Layer, als auch auf dem Consensus-Layer.
Man könnte das auch für die alten Transaktionen standardisieren - und zwar für den P2P Layer unabhängig vom Consensus Layer.
Das Problem ist dann die Datenintegrität... Bei Segwit ist das über den 2. Merkle-Tree abgesichert.
Aber bei den alten Transaktionen?
Woher weiß man, ob der Merkle-Tree bzw. die TXIDs zu den Transaktionen ohne Signaturen passen?
Aber auch das lässt sich lösen, zum Beispiel mit UTXO-Commitments, oder "known-good-UTXO" bei bestimmten Blöcken.
Oder eben auch mit einem 2. Merkle Tree auf dem P2P Layer mit normalized TXIDs, bzw. einem kombinierten aus legacy und normalized TXIDs.
Somit wäre auch die Historie erhalten. Man ist ja nicht gezwungen nur auf die bisherige Art und Weise die Historie aufzubauen.
Wie man das eine Node in seiner lokalen Datenbank speichert ist dann noch mal komplett unabhängig davon, da kann man noch viel leichter die Signaturdaten prunen.
Auch noch wichtig zu wissen - Miner haben einen eigenen P2P-Layer (z.B. FIBRE / Xthin-Xpedited).
Und wenn Miner den Consensus Layer ignorieren, dann sorgen die ökonomischen Nodes dafür, dass die Miner bestraft werden und sich dann doch wieder an die Consensus Regeln halten.
Das heißt der Angriff mit Segwit ist nur bei Nodes möglich, welche auf dem Consensus-Layer kein Segwit überprüfen und auch auf dem P2P-Layer keine Witnessdaten erfordern (zum Beispiel Bitcoin Unlimited).
Es gibt nämlich keine Segwit-Kompatiblen Knoten, die bei einem Segwit-Block auf dem P2P-Layer diesen ohne Witnessdaten akzeptieren.
Das heißt man müsste erstmal so einen Client implementieren, damit der Angriff überhaupt bei Segwit-Knoten funktioniert - haha sehr lustig.
Was jetzt wirklich wie wann gepruned wird bleibt abzuwarten - meines wissens gibt es noch keine Software die
A(S) - B(S) - C(S) - D(S)
zu
A - B - C - D(S)
prunen kann, auch wenn das theoretisch sehr einfach möglich sein sollte.
Weiß noch nicht genau, wie das auf dem P2P Layer mit der Standardisierung ist. Ich denke dann müsste man NODE_WITNESS nicht nach außen als Service anbieten, was also bedeutet, dass der eigene Knoten nach außen zunächst mal überhaupt keine Segwit Signaturen liefern kann.
Von anderen Knoten würden die Blöcke aber trotzdem nur akzeptiert werden, wenn diese auch die Witnessdaten(Signaturen) beinhalten, der Signaturdaten prunende Knoten würde also alles weiterhin validieren. Aktuell geht das aber noch nicht.
Ohne die Signaturdaten (egal, ob Segwitdaten oder nicht) akzeptiert jedenfalls ein Segwit bewusster Knoten den Block nicht.
Der Angriff funktioniert nur, wenn man ökonomische Knoten davon überzeugen kann mit einem Hard-Fork Segwit zu deaktivieren.
Die Miner im Beispiel von Peter R. können also die Bitcoins garnicht klauen, weil Sie ein Bitcoin (Altcoin) mit neuen Regeln erschaffen haben.
Das es keinen Beweis dafür gibt, dass die Bitcoins geklaut wurden ist irrelevant - bzw. sie wurden nicht geklaut, weil die Miner in Ihrem Hard-Fork die Segwit Outputs zu Anyone-Can-Spend outputs umgewandelt haben und sich also an alle Regeln gehalten haben.
Wenn man die Witness Daten vom Block zurückhält, hält man praktisch den ganzen Block zurück.
Dazu müsste man eine neue P2P Standardisierung einführen, weil Segwit-Knoten nur beides gleichzeitig übertragen.
Das Miner über ihre eigenen P2P Layer kurzfristig per Spy-Mining etc. schon einen neuen Block bauen, damit die Mining-Hardware nicht sinnlos Däumchen dreht, bis der Block durch den Consensus-Layer durch ist ändert nichts daran, dass der Block durch den Consensus-Layer durch muss um gültig zu sein - und ohne Witness-Daten kommt er da nicht durch, verteilt sich also auch nicht über den P2P Layer von normalen Nodes.
Unter den dann alten Regeln (also mit Segwit), die von allen wichtigen ökonomischen Knoten angewandt werden haben sich die Bitcoins also niemals bewegt.
Ich möchte mal sehen, wie die Miner es schaffen Bitcoins mit einem Hard-Fork zu klauen, wenn diese es nicht mal schaffen einen Hard-Fork mit 2 MB Blocksize durchzudrücken - das ist einfach lächerlich.
Edit:
Weil von den Hardforkern gerne mal letzter Zeit wieder BIP140 mit normalized TXID ins spiel gebracht wurde -> Erlaubt auch Signature pruning, ähnlich Segwit, führt also zu den ähnlichen Problemen und jede Transaktion muss 2 mal gehashed werden -> UTXO-Size verdoppelt sich
Malleability ist ein Arschloch
BIP140 ist ganz schön kompliziert - finde es ungefähr so kompliziert wie segwit - gibt wohl auch deswegen keine Implementierung die ich finden konnte
Edit2:
https://www.reddit.com/r/btc/comments/6jsu46/the_risks_of_segregated_witness_possible_problems/Gmax beschreibt da ganz gut, warum das nur FUD ist für normale Knoten
Edit3:
Technische Details zum P2P Layer für Segwit:
https://github.com/bitcoin/bips/blob/master/bip-0144.mediawikiDa kann man auch gut sehen, dass es keine standardisierte Möglichkeit gibt nur die Signaturdaten zu übertragen