Nic nie trzeba łamać. Do pierwszych bloków nie potrzebujesz dużej mocy.
Do wykopania alternatywnych bloków z taką trudnością potrzeba około 2^32 hashy. Do wydobycia dwóch identycznych bloków w ogóle, to jakieś 2^128 (bo atak urodzinowy). Do znalezienia innego bloku, którego hash się pokryje idealnie, no to 2^256 (no może nieco mniej, jak się sprytnie do tego podejdzie, ale jeśli można to zrobić szybciej, to też pewnie coś koło 2^254, może 2^252, tego typu wielkości, skoro przy MD5 teoretyczny atak preimage wymaga jakieś 2^123 przy 128 bitach).
Zresztą możesz chchmęcić z czasem kopania a więc również z trudnością.
Żeby zbić trudność, możesz wydłużyć czas. Skrócenie go prowadziłoby do zwiększenia trudności, a tylko wtedy można wykonać głęboki reorg (no i wtedy niektóre transakcje musiałyby wejść w późniejszych blokach, bo mają timelocki). Liczy się jednak łączny Proof of Work, a w nowszych klientach są zaszyte hashe niektórych bloków oraz minimalna wartość łączna Proof of Work (tak zwany chainwork), więc nawet jeśli otoczysz kogoś tylko swoimi węzłami i wykopiesz mnóstwo bloków o trudności równej jeden, no to zakładając, że użytkownik ma oficjalnego klienta, to taki węzeł odrzuci takie bloki.
Wydaje mi się tylko, że w obecnym kodzie są zaszyta jakieś checkpointy (poprawcie mnie jeśli się mylę).
Jeśli ktoś ma oficjalnego klienta, to tam checkpoint jest ustawiony w ten sposób, źródło:
https://github.com/bitcoin/bitcoin/blob ... pp#L94-L95
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000001fa4663bbbe19f82de910280");
consensus.defaultAssumeValid = uint256S("0x00000000000000000008a89e854d57e5667df88f1cdef6fde2fbca1de5b639ad"); // 691719
Oznacza to tyle, że aby takiego klienta przekonać do alternatywnego łańcucha, trzeba byłoby wystartować od bloku 691719 i zbić trudność (wykopując wiele bloków z masakrycznie wysoką trudnością przez wiele dwutygodniowych okresów, co atakującemu mogłoby zająć mnóstwo czasu, choć nadal mniej niż jakakolwiek kolizja). Tutaj jednak hashe są wbite na sztywno, co oznacza, że potrzebny jest preimage.
Umiejąc tworzyć kolizje losowych hashy, można byłoby coś zdziałać jedynie na najnowszych blokach, bo dokładając do łańcucha równocześnie dwa różne bloki o tym samym hashu, można byłoby podzielić sieć na dwie grupy, z których każda widziałaby inne transakcje jako prawidłowe, więc kolejny blok poprawny w jednej sieci mógłby być błędny w innej.