webbtc.com работает на Bitcoin-рубин, повторной реализации Bitcoin, и, как мы продолжать говорить снова и снова, повторно реализации опасны, потому что они всегда есть ошибки и не дублировать Bitcoin-кварты поведение точно.
Я раздвоенный webbtc.com на testnet вчера, до сих пор не совсем уверен, как я вытащил, что выключен, но я играл с нестандартными операциями.
Я также раздвоенный webbtc.com на mainnet сегодня с транзакцией 315ac7d4c26d69668129cc352851d9389b4a6868f1509c6c8b66bead11e2619f Она имеет два входа, как с помощью SIGHHASH_SINGLE, и только один выход. SignatureHash () в script.cpp имеет следующий код:
если (ноут >= TxTmp.vout.size ())
{
Е ("ОШИБКА: SignatureHash (): Nout =% d вне диапазона \ п", Nout);
возвращает 1;
}
Дело в том, что это на самом деле не ошибка. SignatureHash () возвращает хеш подписи, и CheckSig () не проверяет код возврата, поэтому он действует, как если бы хэш подпись подписанного был 0000000000000000000000000000000000000000000000000000000000000001 Вы можете создать подпись для этого, и она работает просто отлично, и сделка считается действительным.
Bitcoin-рубина и libbitcoin, и, вероятно, несколько больше, все рассматривать этот случай как фактическую ошибку и потерпеть неудачу, поэтому они получают раздвоенный от основной сети и уязвимы для атакующего, создавая поддельные подтверждения.
Я аудит litecoin в этих выходных, и в процессе обнаружил полдюжины неясных случаев краев в скриптовом коде Bitcoin, что я не знал об этом, и я уже эксперте о том, как работает Bitcoin. Откровенно наука программной инженерии только не в том месте, где мы знаем, как повторно реализовать Bitcoin и получить это право. Это проблема, по крайней мере, столь же трудно, как написание безопасности критически важных полетов авионики программного обеспечения; на мой взгляд, это, вероятно, Сильнее.
НЕ ВЕРЬТЕ RE-Реализации Bitcoin с деньгами
НЕ ПИШИТЕ FULL-NODE RE-Реализации Bitcoin
ВЫ НЕ SMART достаточно, чтобы сделать их безопасными, НИКТО НЕ