Истощение выборки памяти операций Устанавливаются атака (TFMEA)
Я публикую эту атаку, так как:
1. Это не по-настоящему практичным (только если это спонсируемых правительством)
2. Я не уверен, если это действительно может быть сделано, так как я не проверял.
3. Сеть может восстановить, просто установив новую версию, которая предлагает какую-то защиту.
обзор
Предположим, что большинство клиентов Bitcoin установлены в операционных системах Windows. Предположим, что большинство людей, которые используют Windows, не компилировать исходный код,
но скачать 32 битный исполняемый файл из Sourceforge, который является 32-разрядным приложением. Это предположение представляется вероятным на практике.
Для обработки транзакции клиент загружает Satoshi все упоминаемые транзакции входы в ОЗУ (см CTransaction :: FetchInputs ()).
Атака
Атакующие мины 2000 блоков. Каждый содержащий транзакцию на 1 Мбайт.
Затем злоумышленник может построить сделку, которая требует 2 Гб оперативной памяти для обработки, то ссылки на каждый из 2000 крупных сделок.
Все клиенты Windows, обработка этой транзакции будут сегментация. Узлы должны обновить восстановить.
Как долго?
Быстро атака может быть является добыча 2000 блоков, как быстро, как это возможно. 2000 блоков в 10-минутных интервалах представляют 14 дней.
Из-за трудностью повторно компьютера каждые 2016 блоков, злоумышленник может также увеличить общую мощность хеширования, чтобы уменьшить интервал блока.
Сколько стоит атаковать?
Текущий Bitcoin хэширования мощность 20000 GHash / с.
Возьмите Bitforce сингл 'SC', что делает 60 GH / с 1300 USD. Тогда 50% мощности хеширования можно купить
20000/60 * 1300 = 433K USD.
С 50% мощности хеширования, первые блоки 2000 будут содержать половина блоков атакующих, и будут добыты на скорости 2x.
Это 7 дней. Остальные блоки (2000, содержащие другую половину) будет добыто на нормальной скорости 1x.
Общее время Атак поэтому 21 дней.
Если нападающий готов инвестировать больше?
Инвестиции четыре раза больше, или 1.ой USD, атакующий получает 80% мощность хеширования.
Первые 2000 блоков будет содержать 80% блоков нападающих, добывали всего 2,8 дней.
Оставшиеся 400 взломщик блоки будут принимать дополнительные 3 дней.
Общее время Атак поэтому 5,8 дней.
Что делать, если злоумышленник шахтер, который уже имеет 10% от сети хэширования власти?
Мы полагаем, что шахтер уже амортизируется его добыча оборудования.
Мы предполагаем, чем добыча платы очень низки по сравнению с вознаграждением BTC блока 25.
Если предположить, что добыча является прибыльной, то добыча каждый затрат блоков, в среднем, менее чем на 25 BTC.
Тогда атака не имеет стоимости, и это занимает 140 дней для хранения 2000 1MB сделок в blockchain.
Предлагаемые решения
1. Ограничение количества байтов транзакции, что транзакция может запросить (TxSizeRequested (Tx)<1 Мб).
TxSizeRequested () может быть вычислена как
TxSizeRequested (Tx) = Sum (для каждого отдельного tx2 в tx.previns: Размер (Tx2.Size))
(Это трудно вилка, но, скорее всего, что существует транзакция в текущем блок-цепи которого TxSizeRequested (Tx)>10 Кбайт)
ИЛИ
2. Свободные старые транзакции при выборке новых сделок, как в скользящем окне, в FetchInputs ().
Обновить операции в ConnectInputs (), и утилизировать после проверки сценария.
Комментарии приветствуются!
Edit: Piuk обнаружил худшую проблему: атака может быть выполнена во время blockchain загрузки, где сложность является ниже. не проверял, пока.