Чи варто турбуватися про безпеку біткоіни-адреси?

  1. приклад
  2. Куіндіцілліон

Як відомо, Bitcoin побудований на принципах криптографії - науки про шифри. Напевно всі чули про злом шифрувальної машини Enigma , Що дозволила союзникам розшифровувати перехоплені повідомлення для німецьких підводних човнів під час Великої Вітчизняної війни. Саме з Енігми, а так само робіт Шеннона і Тьюринга почалася історія сучасної криптографії.

Шеннон був одним з перших, хто розвіяв міф про " безпеки через приховування ". До цього намагалися зберегти в таємниці саме алгоритми шифрування в надії на те, що не знаючи деталей реалізації, ворог не зможе перехоплювати шифровані повідомлення. Досить було шпигунськими методами викрасти опис алгоритму і вся система ставала скомпрометованої. Крім того, подібні алгоритми, як правило, не мали вдалим дизайном, містили уразливості і погано протистояли атакам так, що часом навіть не було необхідності в впізнаванні деталей їх реалізації.

Шеннон сформулював принцип "ворог знає систему", а це означало, що не було сенсу ховати алгоритм, а навіть навпаки, слід було відкрити його для всіх бажаючих. Але щось приховане все одно має бути, адже шифр за визначенням - це повідомлення, прочитати яке в ідеалі може лише одна людина - володар секрету шифру. При підході "ворог знає систему" подібним секретом став так званий "ключ".

Саме знання правильного ключа і робить розшифрування повідомлення можливим. Логічно, що в ідеалі, ключ повинен бути відомий лише довіреною сторонам. "Уплившій" ключ, в залежності від обраної криптографічного системи, дає ворогові можливість перехоплювати і навіть підробляти повідомлення власника. В основі Bitcoin все ті ж принципи, ось чому так важливо тримати ключі від гаманців в безпечному сховищі.

Коли ми говоримо про ключі, ми як правило згадуємо і його довжину. Довжина ключа в будь-який криптографічного системі вимірюється в бітах, але в різних системах "безпечна" довжина ключа так само різна. Для симетричних алгоритмів, на зразок AES - це сотні бітів, а для систем з публічним ключем на зразок RSA - це тисячі. Об'єднує їх одне - за задумом зломщикові потрібні величезні обчислювальні потужності і дуже багато часу для лобової атаки шифру. До моменту, коли атакуючий знайде правильний ключ, інформація швидше за все буде вже неактуальною, а електрики він витратить більше, ніж зможе виручити від продажу цієї інформації.

Вважаючи, що ключі мають вигляд статистично рівномірного розподілу, тобто будь-яка комбінація бітів равновероятности, ворогові належить випробувати в середньому половину з усіх комбінацій навіть в разі, якщо він буде перебирати не один за іншим, а таким собі випадковим чином. Значить, можна сказати, що безпека ключа заснована на комбінаторики і ми маємо справу з вірогідністю. Якщо ймовірність знайти ключ за розумний час, володіючи розумними потужностями нижче деякого порогового значення, то ми говоримо, що шифр криптографически стійкий, за умови, що у дано ¿алгоритму не існує будь-яких "вроджених" вразливостей.

приклад

У Bitcoin використовується ECDSA secp256k1, криптографія на основі еліптичних кривих, з довжиною ключа 256 біт. Алгоритм лобової атаки полягає в наступному:

  1. Згенерувати нову пару ключів.
  2. обчислити 160-ти бітний хеш публічного ключа і таким чином отримати Bitcoin-адреса.
  3. Перевірити вміст отриманого адреси на предмет наявності коштів, і якщо гаманець не зайнятий (порожній) - повернутися в пункт номер 1.
  4. Вивести кошти.

За допомогою наступної команди виміряємо час генерації ключа secp256k1 на моєму 2.3 Ghz Core i7 (на одному ядрі):

$ Time for i in {1..10000}; do openssl ecparam -genkey -name secp256k1 -noout -out myprivatekey.pem; openssl ec -in myprivatekey.pem -pubout -out mypubkey.pem; done

Тут, для точності експерименту я зробив 10 тис. Вимірів, що зайняло 1 хвилину і 40 секунд (user time) або 10 мілісекунд на операцію. Далі ми зробимо такі припущення:

Далі ми зробимо такі припущення:

Коридори Tianhe-2

  1. Припустимо етап обчислення 160-ти бітного хешу, який звичайно ж теж займе якийсь час. Перевірку балансу так само опустимо.
  2. Так як 160 біт адреси менше, ніж 256 біт ключа, існують колізії, тобто кілька пар ключів однаково підходять до одного і того ж гаманцю. Припустимо, що атакуючий знайшов спосіб генерувати тільки 2 ^ 160 пар ключів, відповідних кожному однією адресою, а не 2 ^ 256.
  3. Так само припустимо, що атакуючий отримує доступ до найшвидшого суперкомп'ютера на Землі - китайському Tianhe-2 з потужністю 33,86 petaFLOPS (кількість операцій з плаваючою комою в секунду). Цей комп'ютер, а вірніше кластер з 16-ти тисяч машин становить 3,120,000 процесорних ядер.

отримаємо:

  • 1 / 0.01 = 100 пар ключів в секунду на одному ядрі.
  • 312,000,000 = близько 312 млн пар ключів в секунду на суперкомп'ютері Tianhe-2.
  • 2 ^ 160 = 1461501637330902918203684832716283019655932542976 = 1,46 * 10 ^ 48 - куіндіцілліон, саме стільки комбінацій ключів доведеться перебрати, щоб отримати доступ до всіх гаманцях Bitcoin.
  • Все це становить приблизно 1,48 * 10 ^ 32 років.

Мхм, занадто багато, попротикаємо ще припущень.

  1. Зараз в системі біткоіни зарегестрировано приблизно 2,5 мільйона адрес з ненульовим балансом. Припустимо, що атакуючий хоче отримати доступ хоча б до одного з них (неодмінно вашому).
  2. Китайський монстр виявився не таким вже й потужним? Візьмемо всю потужність мережі Bitcoin - 445641 petaFLOPS, що в 13161 разів могутніше Tianhe-2.

Отримаємо: 4,5 * 10 ^ 21 років. Все одно занадто і занадто багато.

Ще в наші обчислення можна включити закон Мура , Прикинути потужності квантових комп'ютерів майбутнього, знайти помилку в моїх розрахунках і т.д., але все одно - до 2140-року, кінця епохи біткоіни, ну ніяк не встигнути.

Куіндіцілліон

Окремо хочу зупинитися на числі з 48-ю нулями і красивою назвою куіндіцілліон і щоб така величезна кількість могло вміститися в голові, пропоную кілька порівнянь від маленького до великого:

Маса Місяця - 0,0123 земної. Таким чином, ймовірність випадково знайти ключ від Bitcoin-гаманця - це навіть не голка в стозі сіна, насправді це те ж саме, що знайти одну єдину заповітну молекулу всередині Місяця.

Запевняю вас, можете спати спокійно.

Китайський монстр виявився не таким вже й потужним?