Апаратний гаманець мав би бути найбезпечнішим місцем для приватного ключа. Сім років один популярний застосунок поверх пристроїв Ledger непомітно підривав цю обіцянку.
Проблема ховалася в застосунку Ledger для мережі Zilliqa, доступному з 2019 року для підпису нативних, не-EVM транзакцій. Щоразу під час формування підпису програма брала не ті 32 байти даних: замість восьми байтів справжньої випадковості залишалися вісім байтів технічного заповнювача. Це випадкове число називають nonce — воно має бути непередбачуваним щоразу. Коли це не так, достатньо порівняти кілька підписів одного акаунта, щоб математично відновити приватний ключ — без вірусів, без доступу до пристрою, лише за публічними даними, які й так лежать у блокчейні. За оцінкою Zilliqa, вистачає приблизно п'яти таких підписів, а обчислення займає секунди на звичайному комп'ютері.
19 липня біржа KuCoin помітила підозрілу активність у мережі й почала розслідування. За два дні причину підтвердили, а 22 липня Zilliqa оприлюднила деталі. Тим часом холодний гаманець біржі-партнера спорожнів на нерозкриту суму ZIL. Zilliqa негайно зупинила всі нативні транзакції в мережі — EVM-сумісні перекази не постраждали, — а Upbit заморозив ввід і вивід ZIL. За тиждень токен подешевшав приблизно на 17–19%, торгуючись біля $0,0024.
Самі пристрої Ledger не було зламано: помилка жила в коді стороннього застосунку, а не в захищеному чипі. Це слабка втіха для тих, хто з 2019 року підписував нативні ZIL-перекази через Ledger: підпис, опублікований у блокчейні, залишається там назавжди, і виправлений застосунок не може скасувати вже розкритий ключ. Єдиний реальний вихід, за словами Zilliqa, — перевести кошти на нову адресу.
Історія нагадує просту річ: апаратний гаманець захищає лише те, що правильно робить програмне забезпечення на ньому, а якщо воно помиляється, ідеальний чип тут не рятує.



