Generative Data Intelligence

Як гаманець Kraken вирішує проблеми безпеки мобільних криптовалют

Дата:

Ми вважаємо, що найбезпечніший мобільний криптогаманець – це той, який долає внутрішні обмеження мобільної операційної системи. Наприклад, на iOS CryptoKit від Apple не підтримує secp256k1 еліптична крива, стандарт для Bitcoin, Ethereum та багатьох інших блокчейнів.

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

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

Despite the inability to perform the signing on the secure elements directly, which would offer increased protection, we have committed to providing an open-source mobile crypto wallet that prioritizes security, transparency and user control.

Наша архітектура безпеки спеціально створена для:

  • Підтримка кількох блокчейнів
  • Генеруйте приватні ключі з високою ентропією, мірою непередбачуваності, яка підвищує безпеку
  • Використовуйте перевірену в боях криптографію для надійного шифрування особистих ключів користувачів, використовуючи апаратне забезпечення безпеки мобільних телефонів і функції безпеки ОС
  • Пропонуйте покращений захист із створеним користувачем паролем для досвідчених користувачів, яким потрібен додатковий рівень шифрування (на додаток до захисту брелока ОС для ключа дешифрування)
  • Створіть міцну основу для майбутнього впровадження нових типів керування ключами, таких як апаратні гаманці та системи на основі кворуму MPC

Перевага відкритого коду

Як один із фундаментальних принципів безпеки, Гаманець Kraken це безкоштовне програмне забезпечення з відкритим кодом, поширюється під ліцензія MIT. Створюючи новий гаманець з нуля, для нас було важливо сприяти розвитку екосистеми з відкритим вихідним кодом і розподіленої екосистеми.

Без відкритого коду гаманець Kraken потребував би великої довіри без прозорості. Це дасть клієнтам менший захист; ви не можете перевірити, змінити або запустити клієнт самостійно, якби захотіли. «Не довіряй, перевіряй!» це не просто максима галузі, це один із наших керівних принципів.

Наше програмне забезпечення з відкритим кодом відповідає двом основним цілям, які ми спочатку поставили перед цим продуктом: мінімізація довіри, яку можна перевірити та перевірити:

  • Перевірка: Можливість перевірки правдивості припущень щодо безпеки, наведених у цій публікації блогу. Кожен може подивіться вихідний код щоб конкретно зрозуміти, що в цьому гаманці робиться, а що ні. 
  • Аудитируемость: Можливість перевірити, чи результати нашої реалізації безпеки є правильними, і звітувати, якщо це не так. Ми залучили внутрішні та зовнішні команди для проведення багаторазових перевірок безпеки перед випуском. У майбутньому кожен може перевірити код і створити звіт про свої висновки.

Генерація та імпорт ключів

Хоча React Native є потужним інструментом, він не має вбудованого модуля шифрування. Щоб розібратися в цьому, ми використали реалізацію чистого js (crypto-browserify) криптомодуля NodeJS. Метод crypto.randomBytes(), який генерує фактичні випадкові байти, які нам потрібні під час генерації ключа, обробляється react-native-get-random-values поліфіл.

React-native-get-random-values ​​використовує рідний код для використання генератора криптографічно захищених псевдовипадкових чисел (CSPRNG), доступного на пристрої, для генерації випадкових чисел. Практично на всіх сучасних пристроях цей генератор випадкових чисел підтримується безпечним апаратним генератором випадкових чисел.

Під час ініціалізації гаманця ми отримуємо ентропію з CSPRNG і перетворюємо її на мнемонічне початкове число за допомогою добре встановлених пакетів npm (BIP32, BIP39).

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

Керування ключами 

Гаманець Kraken зберігає два секретні значення – початкове значення та мнемоніку – і кілька несекретних (але все ще приватних) значень, таких як адреси гаманців, назви гаманців та описи транзакцій.

Матеріал закритого ключа (засіб/мнемоніка) зберігається в Keychain (на iOS) і Keystore (на Android). Матеріал відкритого ключа та неконфіденційна інформація (розширені відкриті ключі, адреси та описи) зберігаються в зашифрованій базі даних програми (за допомогою Область).

Існує кілька засобів захисту даних:

  • Блокування програми: випадково згенерований 64-байтовий рядок, що зберігається в Keychain або Keystore. Доступ до секрету захищено вимогами до присутності користувача – біометричною або паролем.
  • Пароль: надається користувачем і не зберігається на пристрої. Замість цього користувач повинен вводити пароль вручну щоразу, коли запитує програма. Гаманець визначає, чи потрібен пароль, перевіряючи два прапорці (is_storage_encrypted і is_seed_encrypted), збережені в Keychain або Keystore. Алгоритм Argon2 використовується як ключова функція виведення.
  • Шифрування бази даних: База даних (Realm) використовується для зберігання несекретних даних. Дані шифруються випадковим 64-байтовим ключем.
  • Механізм блокування: введення неправильного пароля викликає затримки перед наступними спробами пароля. Цей механізм ефективно відлякує атаки шляхом підбору пароля. Інформація щодо параметрів блокування, таких як кількість спроб і тривалість затримок, надійно зберігається в Keychain або Keystore.

Начальний код, мнемоніка та ключ шифрування бази даних завжди зберігаються в зашифрованому вигляді

  • Коли захист не ввімкнено: Начальний код, мнемоніка та ключ шифрування Realm зберігаються безпосередньо в Keychain або Keystore без контролю доступу присутності користувача.
  • Коли активовано блокування програми: Мнемоніка та початкове значення спочатку шифруються секретом блокування програми, а потім надійно зберігаються в Keychain або Keystore. Ключ шифрування Realm також безпосередньо зберігається в Keychain або Keystore.
  • Коли захист паролем увімкнено: Мнемоніка та початкове значення шифруються паролем, тоді як ключ шифрування Realm шифрується паролем, лише якщо для is_storage_encrypted встановлено значення true.
  • Коли ввімкнено блокування програм і захист паролем: Мнемоніка та початковий код зашифровані паролем (перший) і блокуванням програми (другий). Ключ шифрування Realm шифрується лише паролем і лише якщо для is_storage_encrypted встановлено значення true.

Використання ключа

Початковий код/мнемоніка зберігається в Keychain або Keystore і відіграє вирішальну роль у криптографічних операціях. Коли потрібно згенерувати нову адресу гаманця або підписати транзакцію, ми отримуємо необхідну інформацію, наприклад закритий ключ, із цього початкового числа.

Однак важливо зазначити, що закритий ключ має бути завантажений у пам’ять під час цих операцій. Ця необхідність випливає з обмежень, про які ми згадували раніше щодо мобільних гаманців, і відсутності прямого доступу до захищеного елемента для підписання транзакцій.

  • Підписання транзакцій (надсилання токенів)
  • Підпис даних WalletConnect (обробка запитів на сеанс)
  • Додавання нового гаманця
  • Увімкнення ланцюжків testnet (додавання гаманців testnet)
  • Відображення мнемосхеми
  • Перевірка мнемосхеми
  • Увімкнення та вимкнення блокування програми
  • Включення та відключення пароля

Додаткова біометрична автентифікація виконується для таких функцій:

  • Увімкнення блокування програми
  • Видалення всіх даних
  • Видалення гаманця (облікового запису)
  • Увімкнення або вимкнення пароля (на додаток до отримання блокування програми)
  • Відкриття програми
  • Переміщення програми на передній план
  • Перегляд розширених відкритих ключів
  • Підключення до децентралізованої програми (dApp)

Крім того, для відкриття програми може знадобитися пароль. Keychain і Keystore завжди використовуються через react-native-keychain обгортка:

  • Обгортка генерує новий ключ у Keychain або Keystore для кожного елемента
  • Обгортка відповідає за передачу правильних позначок конфігурації для Keychain і Keystore
  • Гаманець завжди запитує оболонку, щоб налаштувати прапори, щоб пристрій потрібно було розблокувати, щоб отримати доступ до ключа
  • Перевірка присутності користувача (біометрична) налаштована на основі часу, і перевірка дійсна протягом 5 секунд; перевірка присутності користувача не виконується для кожного доступу

Алгоритм шифрування однаковий для всіх елементів:

  • Ключ отримано за допомогою Argon2id із нормалізованого NFC секрету
  • Сіль для Argon2id є унікальним ідентифікатором пристрою
  • Режим шифрування AES-GCM
  • Вектор ініціалізації (IV) для AES становить 16 випадкових байтів
  • Тег автентифікації для AES має мати довжину 16 байтів

Підписання угоди

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

Симуляція транзакцій

Ми використовуємо зовнішні служби API (такі як Blowfish та інші), щоб перевірити можливі рівні «серйозності», які транзакція може принести користувачеві (оцінка ризику). Від повного блокування екрана для можливих зловмисних транзакцій (або підписання повідомлень) до попереджень про різні рівні обережності, які користувач повинен мати перед підписанням або підтвердженням транзакції. 

Інші заходи включають:

  • Перевірка адреси, щоб переконатися, що ви не надсилаєте на неправильну адресу
  • Адреси, які завжди видимі повністю, щоб переконатися, що користувач не націлений на конкретні атаки, пов’язані з композицією адреси
  • Перевірка мережі та попередження, щоб переконатися, що користувач не надсилає повідомлення до неправильної мережі
  • Перевірка платності, щоб переконатися, що користувач не переплачує за транзакцію

Конфіденційність мережі

Щоб захистити конфіденційність і особисті дані користувачів таким чином, щоб ці дані не витікали через мережеві запити, особливо до сторонніх служб, ми розробили шлюз API для запитів проксі. Цей проксі-сервер дозволяє нам не передавати запити користувачів до сторонніх служб і не розкриває IP-адресу клієнта зовнішнім або публічним постачальникам. 

Ця серверна служба в основному є API для запиту загальнодоступних даних блокчейну. В рамках архітектури безпеки гаманця його метою є інкапсуляція цієї функції за загальним API для всіх блокчейнів, щоб Kraken Wallet не доводилося впроваджувати поведінку, специфічну для блокчейну, для запиту даних.

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

Припущення безпеки

Наша архітектура безпеки ґрунтується на кількох ключових припущеннях для оптимального захисту. Ми припускаємо:

  • Пристрій користувача не рутований, а також ОС не застаріла та чутлива до критичних уразливостей, які можуть надати зловмиснику доступ до пам’яті пристрою
  • Пакет Keychain або Keystore забезпечує досить надійний захист
  • Мобільна ОС пропонує надійну пісочницю між процесами програм, забезпечуючи належне керування пам’яттю, що містить конфіденційні дані, як-от вихідні дані

Додаткова функціональність

  • Додаток працює за принципом зберігання лише мінімуму даних, необхідних для роботи гаманця
  • На клієнті не використовуються інструменти аналітики чи звіти про збої (SDK).
    • Оскільки ми докладаємо всіх зусиль щодо запобігання витоку даних третім сторонам, не має сенсу включати додаткове відстеження даних, а це означає, що ви не знайдете програмне забезпечення для аналітики чи звітів про збої в клієнті
  • Жодне оновлення по повітрю (поза звичайним потоком оновлення AppStore/Play Store) не дозволяється та не реалізується в кодовій базі
    • Користувач може очікувати скомпільоване програмне забезпечення, яке не можна оновити без його згоди
  • Список токенів і система репутації
    • Щоб допомогти користувачам керувати своїми токенами, ми запровадили систему списку та репутації на основі активів, наданих Kraken та іншими третіми сторонами
  • Спам NFT
    • Початкова спроба, яку ми плануємо продовжувати вдосконалювати, це виявлення спаму та пов’язаних зі спамом атак, коли спам автоматично архівується в папку користувача

Зовнішній аудит безпеки

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

Щоб забезпечити прозорість і надати розуміння безпеки нашої платформи, результати цього аудиту є загальнодоступними. Цей відкритий доступ дозволяє користувачам і зацікавленим сторонам переглядати результати аналізу безпеки, проведеного Trail of Bits. Звіт є важливим ресурсом для розуміння заходів безпеки, які ми використовуємо, і нашого зобов’язання підтримувати безпечне середовище для наших користувачів.

Пріоритет безпеки, прозорості та контролю користувача

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

Ці матеріали призначені лише для загальних інформаційних цілей і не є інвестиційними порадами чи рекомендаціями чи закликами купувати, продавати, робити ставки чи утримувати будь-які криптоактиви чи брати участь у будь-якій конкретній торговій стратегії. Kraken не працює і не працюватиме над підвищенням або зниженням ціни будь-якого конкретного криптоактиву, який він надає. Деякі криптопродукти та ринки нерегульовані, і ви можете не бути захищені державною компенсацією та/або регуляторними схемами захисту. Непередбачуваний характер ринків криптоактивів може призвести до втрати коштів. Податок може бути сплачений за будь-яке повернення та/або будь-яке збільшення вартості ваших криптоактивів, тому вам слід отримати незалежну консультацію щодо вашої податкової позиції. Можуть застосовуватися географічні обмеження.

spot_img

Остання розвідка

spot_img