Bitcoin Core wprowadza poprawkę dla błędu podpisywania, który mógł przekierować środki bez ujawniania kluczy
Najważniejsze informacje
- •Bitcoin Core połączył 25 września poprawkę, która zapobiega podpisywaniu PSBT w przypadkach, gdy brzegowy scenariusz brakującego wyjścia SIGHASH_SINGLE mógł pozostawić podpis ważny po zmianie odbiorcy.
- •Wada nie ujawnia kluczy prywatnych, ale w przypadku wejść legacy podpis na stałej wartości skrótu mógł potencjalnie zostać ponownie użyty przeciwko innym niewydanym wyjściom kontrolowanym przez ten sam klucz przy zgodnych warunkach strukturalnych.
- •Podpisy SegWit v0 nadal obejmują konkretną wydawaną monetę i jej kwotę, jednak wyjście docelowe może pozostać niepowiązane, co tworzy problem autoryzacji dla portfeli i urządzeń podpisujących.
- •Nowa kontrola została przeniesiona do wspólnej logiki tworzenia podpisów Bitcoin Core, rozszerzając istniejące odrzucenie dla surowych transakcji na ścieżkę PSBT, w tym polecenie walletprocesspsbt, przy jednoczesnym umożliwieniu kontynuacji ważnych wejść w tym samym PSBT.
- •Na dzień 4 października żadne wydanie produkcyjne ani potwierdzony backport nie zawierały zabezpieczenia, co skłania dostawców portfeli i integracje sprzętowego podpisywania do przejrzenia własnej obsługi żądań SIGHASH_SINGLE zamiast czekania na wydanie Bitcoin Core.

Bitcoin Core dodał zabezpieczenie przed podpisywaniem transakcji, których podpisy mogą nie wiązać kryptograficznie środków ze zatwierdzonym przez użytkownika odbiorcą płatności. Zmiana, połączona z główną gałęzią deweloperską projektu 25 września, dotyczy wąskiej wady częściowo podpisanych transakcji Bitcoin (PSBT), która mogła wygenerować ważny podpis bez ochrony zamierzonego wyjścia. Bitcoin Optech zwrócił na tę aktualizację uwagę 2 października.
Problem nie ujawnia klucza prywatnego użytkownika. Tworzy natomiast inne ryzyko: w określonych warunkach podpis może pozostać ważny nawet po zmianie odbiorcy transakcji.
Jak działa słabość SIGHASH_SINGLE
Każdy podpis Bitcoin zawiera flagę sighash, która określa, które części transakcji są objęte podpisem. SIGHASH_SINGLE to jeden z trybów podpisywania, zaprojektowany tak, aby wiązać wejście z wyjściem zajmującym odpowiadającą pozycję w transakcji. Gdy na tej pozycji nie istnieje żadne wyjście, ochrona rozpada się w różny sposób w zależności od rodzaju wydawanego bitcoina.
W przypadku wejść legacy scenariusz brakującego wyjścia może wygenerować podpis na stałej wartości skrótu. Deweloperzy Bitcoin Core stwierdzili, że taki podpis może następnie zostać ponownie użyty przeciw innym niewydanym wyjściom kontrolowanym przez ten sam klucz, gdy występują te same warunki strukturalne.
Transakcje SegWit v0 zachowują silniejszą ochronę, ponieważ podpis nadal obejmuje konkretną wydawaną monetę i jej kwotę. Wyjście docelowe może jednak pozostać niepowiązane. Tworzy to problem autoryzacji dla portfeli i urządzeń podpisujących: oprogramowanie może przedstawić użytkownikowi jedną płatność, generując jednocześnie podpis, który nie gwarantuje kryptograficznie, że zatwierdzony odbiorca pozostał niezmieniony.
Bitcoin Core blokuje ryzykowne żądanie podpisania
Bitcoin Core już wcześniej odrzucał ten przypadek brzegowy poprzez swój interfejs podpisywania surowych transakcji, ale ścieżka PSBT — w tym polecenie walletprocesspsbt — mogła go nadal podpisać. Nowy kod przenosi kontrolę do wspólnej logiki tworzenia podpisów Bitcoin Core, więc to samo odrzucenie obowiązuje teraz we wszystkich ścieżkach podpisywania Bitcoin Core, blokując podpisywanie dotkniętych wejść legacy i SegWit v0, a jednocześnie pozwalając na kontynuację innych ważnych wejść w tym samym PSBT.
PSBT są powszechnie używane do koordynowania transakcji między portfelami programowymi, urządzeniami sprzętowymi i podpisującymi offline. Pozwalają twórcom transakcji przekazać informacje osobnemu podpisującemu bez przekazywania temu systemowi kontroli nad kluczami prywatnymi. Poprawka wzmacnia zatem granicę, którą twórcy portfeli muszą egzekwować niezależnie od bezpieczeństwa kluczy: ważny podpis kryptograficzny musi obejmować szczegóły transakcji faktycznie zatwierdzone przez użytkownika.
Bitcoin Improvement Proposal 174, który definiuje PSBT, już nakazuje podpisującym odrzucanie niedopuszczalnych trybów podpisywania i zaleca SIGHASH_ALL, gdy nie określono alternatywy. Zmiana w Bitcoin Core wprost uniemożliwia dotarcie tej konfiguracji z brakującym wyjściem do etapu podpisywania.
Na razie nie ma wydania produkcyjnego z poprawką
Użytkownicy nie mają jeszcze potwierdzonego wydania produkcyjnego zawierającego to zabezpieczenie. Zmiana z 25 września została połączona z gałęzią deweloperską Bitcoin Core, a opublikowane listy wydań projektu nie wskazały na dzień 4 października ani poprawionej wersji, ani potwierdzonego backportu. Backport przeniósłby to samo zabezpieczenie do już wydanego programu; dopóki nie pojawi się na listach, ochrona istnieje wyłącznie w kodzie deweloperskim.
Pozostawia to dostawcom portfeli i integracjom sprzętowego podpisywania bardziej pilną decyzję: przejrzenie własnej obsługi żądań SIGHASH_SINGLE zamiast czekania na wydanie Bitcoin Core, które wyegzekwuje tę samą ochronę w dalszym łańcuchu.\nOryginalny raport opublikowano na CryptoSlate.