Inteligencja danych Platona.
Wyszukiwanie w pionie i AI.

Jak Kraken Wallet radzi sobie z wyzwaniami związanymi z bezpieczeństwem kryptowalut mobilnych

Data:

Wierzymy, że najbezpieczniejszy mobilny portfel kryptowalut to taki, który pokonuje nieodłączne ograniczenia mobilnego systemu operacyjnego. Na przykład w systemie iOS zestaw CryptoKit firmy Apple nie obsługuje krzywa eliptyczna secp256k1, standard dla Bitcoin, Ethereum i wielu innych łańcuchów bloków.

To ograniczenie uniemożliwia programistom korzystanie z bezpiecznego elementu urządzeń do przechowywania kluczy i podpisywania transakcji. W rezultacie mobilne portfele kryptograficzne są klasyfikowane jako gorące portfele, ponieważ oba są podłączone do Internetu i podpisują transakcje poza bezpiecznym elementem przy użyciu programowej implementacji algorytmów kryptograficznych.

Oznacza to, że klucze prywatne muszą zostać ujawnione – przynajmniej podczas podpisywania – w pamięci środowiska aplikacji w trybie piaskownicy. To sprawia, że ​​są one bardziej narażone na potencjalne zagrożenia niż portfel wykorzystujący bezpieczny element do podpisywania transakcji.

Pomimo braku możliwości bezpośredniego podpisania bezpiecznych elementów, co zapewniałoby zwiększoną ochronę, zobowiązaliśmy się do zapewnienia open-source mobilny portfel kryptowalutowy, dla którego priorytetem jest bezpieczeństwo, przejrzystość i kontrola użytkownika.

Nasza architektura zabezpieczeń została zaprojektowana tak, aby:

  • Obsługuj wiele łańcuchów bloków
  • Generuj klucze prywatne o wysokiej entropii, co jest miarą nieprzewidywalności, która zwiększa bezpieczeństwo
  • Wykorzystaj sprawdzoną w boju kryptografię, aby bezpiecznie szyfrować klucze prywatne użytkowników, wykorzystując sprzęt zabezpieczający telefony komórkowe i funkcje bezpieczeństwa systemu operacyjnego
  • Oferuj większe bezpieczeństwo dzięki hasłu generowanemu przez użytkownika dla zaawansowanych użytkowników, którzy chcą dodatkowego poziomu szyfrowania (oprócz ochrony pęku kluczy systemu operacyjnego dla klucza deszyfrującego)
  • Stwórz solidną podstawę do przyszłego włączania nowych typów zarządzania kluczami, takich jak portfele sprzętowe i systemy oparte na kworum MPC

Zaleta open source

Jako jedną z podstawowych zasad bezpieczeństwa, Portfel Kraken jest oprogramowaniem bezpłatnym i otwartym, dystrybuowane pod licencję MIT. Budując nowy portfel od podstaw, ważna była dla nas pomoc w rozwijaniu otwartego i rozproszonego ekosystemu.

Bez kodu open source Kraken Wallet wymagałby dużego zaufania bez przejrzystości. Zapewniłoby to klientom mniejszą ochronę; nie możesz sam zweryfikować, zmodyfikować ani uruchomić klienta, jeśli chcesz. „Nie ufaj, sprawdź!” to nie tylko maksyma branżowa, to jedna z naszych zasad przewodnich.

Otwarte pozyskiwanie naszego oprogramowania spełnia dwa podstawowe cele, które początkowo wyznaczyliśmy temu produktowi: weryfikowalna, możliwa do audytu minimalizacja zaufania:

  • Sprawdzalność: Możliwość sprawdzenia, czy założenia bezpieczeństwa przedstawione w tym wpisie na blogu są prawdziwe. Każdy może spójrz na kod źródłowy aby dokładnie zrozumieć, co jest, a czego nie robi się w tym portfelu. 
  • Możliwość kontroli: Możliwość sprawdzenia, czy wyniki naszej implementacji zabezpieczeń są prawidłowe i zwrócenia uwagi, gdy tak nie jest. Wielokrotnie angażowaliśmy zespoły wewnętrzne i zewnętrzne do przeprowadzenia audytów bezpieczeństwa przed wydaniem. W przyszłości każdy będzie mógł przeprowadzić audyt kodu i sporządzić raport na temat swoich ustaleń.

Generowanie kluczy i import kluczy

React Native, choć jest potężnym narzędziem, nie posiada wbudowanego modułu kryptograficznego. Aby obejść ten problem, użyliśmy implementacji pure-js (crypto-browserify) modułu kryptograficznego NodeJS. Metoda crypto.randomBytes() – która generuje rzeczywiste losowe bajty potrzebne nam podczas generowania klucza – jest obsługiwana przez reaguj-native-get-random-values wypełnienie.

React-native-get-random-values ​​wykorzystuje natywny kod do korzystania z kryptograficznie bezpiecznego generatora liczb pseudolosowych (CSPRNG) dostępnego na urządzeniu w celu generowania liczb losowych. Praktycznie na wszystkich nowoczesnych urządzeniach ten generator liczb losowych jest wspierany przez bezpieczny sprzętowy generator liczb losowych.

Podczas inicjalizacji portfela pobieramy entropię z CSPRNG i konwertujemy ją na ziarno mnemoniczne przy użyciu dobrze ugruntowanych pakietów npm (BIP32, BIP39).

Klucze są konwertowane, przechowywane i prezentowane użytkownikowi zgodnie ze standardem BIP39, który oferuje łatwą do wykonania kopię zapasową metodę mnemoniczną z interoperacyjnością dla większości portfeli w ekosystemie. Funkcja importu obsługuje odzyskiwanie nasion zgodnych z BIP39, które zapewniają najlepszą interoperacyjność w ekosystemie. 

Zarządzanie kluczami 

Kraken Wallet przechowuje dwie tajne wartości – źródło i mnemonik – oraz wiele jawnych (ale wciąż prywatnych) wartości, takich jak adresy portfeli, nazwy portfeli i opisy transakcji.

Materiał klucza prywatnego (nasiono/mnemonik) jest przechowywany w Keychain (na iOS) i Keystore (na Androidzie). Materiał klucza publicznego oraz dane niewrażliwe (rozszerzone klucze publiczne, adresy i opisy) przechowywane są w zaszyfrowanej bazie danych aplikacji (przy użyciu Dziedzina).

Istnieje wiele mechanizmów kontroli bezpieczeństwa chroniących dane:

  • Blokada aplikacji: Losowo wygenerowany ciąg 64-bajtowy przechowywany w pęku kluczy lub magazynie kluczy. Dostęp do sekretu chroniony jest wymogami obecności użytkownika – uwierzytelnianiem biometrycznym lub hasłem.
  • Hasło: dostarczane przez użytkownika i nie przechowywane na urządzeniu. Zamiast tego użytkownik musi podać hasło ręcznie, gdy aplikacja o to poprosi. Portfel określa, czy hasło jest potrzebne, sprawdzając dwie flagi (is_storage_encrypted i is_seed_encrypted) przechowywane w Keychain lub Keystore. Algorytm Argon2 jest używany jako funkcja wyprowadzania klucza.
  • Szyfrowanie bazy danych: Baza danych (Realm) służy do przechowywania jawnych danych. Dane są szyfrowane losowym kluczem 64-bajtowym.
  • Mechanizm blokady: Wprowadzenie nieprawidłowego hasła powoduje opóźnienia przed podjęciem kolejnych prób wprowadzenia hasła. Mechanizm ten skutecznie powstrzymuje ataki typu brute-force na hasło. Informacje dotyczące parametrów blokady, takich jak liczba prób i czas trwania opóźnień, są bezpiecznie przechowywane w Keychain lub Keystore.

Klucz szyfrujący, klucz mnemoniczny i baza danych są zawsze przechowywane w formie zaszyfrowanej

  • Gdy nie są włączone żadne zabezpieczenia: Klucz szyfrujący, mnemonik i dziedzina są przechowywane bezpośrednio w pęku kluczy lub magazynie kluczy bez kontroli dostępu na podstawie obecności użytkownika.
  • Gdy włączona jest blokada aplikacji: Mnemonik i materiał siewny są najpierw szyfrowane za pomocą tajnego klucza blokady aplikacji, a następnie bezpiecznie przechowywane w pęku kluczy lub magazynie kluczy. Klucz szyfrujący Realm jest również przechowywany bezpośrednio w pęku kluczy lub magazynie kluczy.
  • Gdy włączona jest ochrona hasłem: Mnemonik i ziarno są szyfrowane hasłem, podczas gdy klucz szyfrowania Realm jest szyfrowany hasłem tylko wtedy, gdy is_storage_encrypted ma wartość true.
  • Gdy włączona jest zarówno blokada aplikacji, jak i ochrona hasłem: Mnemonik i materiał siewny są szyfrowane zarówno za pomocą hasła (pierwsze), jak i blokady aplikacji (drugie). Klucz szyfrujący Realm jest szyfrowany tylko przy użyciu hasła i tylko wtedy, gdy opcja is_storage_encrypted została ustawiona na wartość true.

Zastosowanie klucza

Materiał siewny/mnemonik jest przechowywany w Keychain lub Keystore i odgrywa kluczową rolę w operacjach kryptograficznych. Kiedy trzeba wygenerować nowy adres portfela lub podpisać transakcję, z tego materiału siewnego uzyskujemy niezbędne informacje, takie jak klucz prywatny.

Należy jednak pamiętać, że podczas tych operacji klucz prywatny musi zostać załadowany do pamięci. Konieczność ta wynika z ograniczeń, o których wspominaliśmy wcześniej, dotyczących portfeli mobilnych i braku bezpośredniego dostępu do bezpiecznego elementu w celu podpisywania transakcji.

  • Podpisywanie transakcji (wysyłanie tokenów)
  • Podpisywanie danych WalletConnect (obsługa żądań sesji)
  • Dodanie nowego portfela
  • Włączanie łańcuchów testnetowych (dodawanie portfeli testnetowych)
  • Wyświetlanie mnemonika
  • Weryfikacja mnemonika
  • Włączanie i wyłączanie blokady aplikacji
  • Włączanie i wyłączanie hasła

Dodatkowe uwierzytelnianie biometryczne przeprowadzane jest dla następujących funkcjonalności:

  • Włączanie blokady aplikacji
  • Czyszczenie wszystkich danych
  • Usuwanie portfela (konta)
  • Włączanie lub wyłączanie hasła (oprócz odzyskiwania blokady aplikacji)
  • Otwieranie aplikacji
  • Przeniesienie aplikacji na pierwszy plan
  • Przeglądanie rozszerzonych kluczy publicznych
  • Łączenie się ze zdecentralizowaną aplikacją (dApp)

Dodatkowo do otwarcia aplikacji może być wymagane hasło. Pęk kluczy i magazyn kluczy są zawsze używane przez Reaguj natywny pęk kluczy obwoluta:

  • Opakowanie generuje nowy klucz w pęku kluczy lub magazynie kluczy dla każdego elementu
  • Opakowanie jest odpowiedzialne za przekazanie poprawnych flag konfiguracyjnych dla pęku kluczy i magazynu kluczy
  • Portfel zawsze żąda od opakowania skonfigurowania flag tak, aby urządzenie musiało zostać odblokowane, aby uzyskać dostęp do klucza
  • Kontrola obecności użytkownika (biometryczna) jest skonfigurowana w oparciu o czas i jest ważna przez 5 sekund; sprawdzanie obecności użytkownika nie jest przeprowadzane przy każdym dostępie

Algorytm szyfrowania jest taki sam dla wszystkich elementów:

  • Klucz jest wyprowadzany za pomocą Argon2id z sekretu znormalizowanego przez NFC
  • Sól dla Argon2id to unikalny identyfikator urządzenia
  • Tryb szyfrowania to AES-GCM
  • Wektor inicjujący (IV) dla AES to 16 losowych bajtów
  • Znacznik autoryzacji dla AES musi mieć długość 16 bajtów

Podpisanie transakcji

Oprócz wspomnianych wcześniej środków dotyczących przechowywania kluczy, danych biometrycznych i ochrony haseł, podpisywanie transakcji pozostaje kluczowym obszarem ciągłego doskonalenia. Na początek wdrożyliśmy kilka godnych uwagi działań w tej dziedzinie, w tym:

Symulacja transakcji

Korzystamy z zewnętrznych usług API (takich jak Blowfish i inne), aby sprawdzić możliwy poziom „dotkliwości”, jaki transakcja może przynieść użytkownikowi (wskaźnik ryzyka). Dotyczy to zarówno pełnego ekranu blokowania potencjalnych złośliwych transakcji (lub podpisywania wiadomości), jak i ostrzeżeń o różnych poziomach ostrożności, jakie użytkownik powinien zachować przed podpisaniem lub potwierdzeniem transakcji. 

Inne środki obejmują:

  • Weryfikacja adresu, aby upewnić się, że nie wysyłasz na zły adres
  • Adresy, które są zawsze widoczne w całości, aby mieć pewność, że użytkownik nie będzie celem konkretnych ataków związanych ze składem adresów
  • Sprawdzanie poprawności sieci i ostrzeżenia, aby upewnić się, że użytkownik nie wysyła wiadomości do niewłaściwej sieci
  • Sprawdzane są opłaty, aby upewnić się, że użytkownik nie przepłaca za transakcję

Prywatność w sieci

Aby chronić prywatność i dane osobowe użytkowników w sposób uniemożliwiający wyciek tych danych w ramach żądań sieciowych – zwłaszcza do usług stron trzecich – opracowaliśmy bramę API do żądań proxy. Ten serwer proxy pozwala nam nie przekazywać żądań użytkowników do usług stron trzecich i nie ujawnia adresu IP klienta dostawcom zewnętrznym lub publicznym. 

Ta usługa backendu jest w zasadzie interfejsem API do wysyłania zapytań do publicznych danych blockchain. W architekturze bezpieczeństwa portfela jego celem jest hermetyzacja tej funkcjonalności za wspólnym API we wszystkich łańcuchach bloków, tak aby Kraken Wallet nie musiał wdrażać zachowań specyficznych dla łańcucha bloków w celu wysyłania zapytań o dane.

Ta usługa zaplecza definiuje ten wspólny interfejs API. Ostatecznie przekazuje żądania innym stronom, od których pobiera rzeczywiste dane. Nie indeksuje samych łańcuchów bloków ani nie utrzymuje stanu.

Założenia bezpieczeństwa

Nasza architektura bezpieczeństwa opiera się na kilku kluczowych założeniach zapewniających optymalną ochronę. Zakładamy:

  • Urządzenie użytkownika nie jest zrootowane, a system operacyjny nie jest przestarzały i podatny na krytyczne luki, które mogłyby zapewnić atakującemu dostęp do pamięci urządzenia
  • Pakiet Keychain lub Keystore zapewnia wystarczająco silną ochronę
  • Mobilny system operacyjny oferuje solidną piaskownicę pomiędzy procesami aplikacji, zapewniając prawidłowe zarządzanie pamięcią zawierającą wrażliwe dane, takie jak nasiona

Dodatkowa funkcjonalność

  • Aplikacja działa na zasadzie przechowywania jedynie minimalnej ilości danych potrzebnych do uruchomienia portfela
  • Na kliencie nie są używane żadne narzędzia analityczne innych firm ani zestawy programistyczne do raportowania awarii (SDK).
    • Biorąc pod uwagę nasze wysiłki, aby nie ujawniać żadnych danych stronom trzecim, nie miałoby sensu uwzględnianie dodatkowego śledzenia danych – co oznacza, że ​​w kliencie nie znajdziesz żadnego oprogramowania analitycznego ani raportującego o awariach
  • Żadne aktualizacje bezprzewodowe (poza zwykłym procesem aktualizacji AppStore/Sklep Play) nie są dozwolone ani wdrażane w bazie kodu
    • Użytkownik może spodziewać się skompilowanego oprogramowania, którego nie można zaktualizować bez jego zgody
  • Lista tokenów i system reputacji
    • Aby pomóc użytkownikom zarządzać swoimi tokenami, wdrożyliśmy system list i reputacji oparty na zasobach dostarczonych przez Kraken i inne strony trzecie
  • Spam NFT
    • Początkowym działaniem, które planujemy dalej udoskonalać, jest wykrywanie spamu i ataków związanych ze spamem, w ramach którego spam jest automatycznie archiwizowany w folderze użytkownika

Zewnętrzny audyt bezpieczeństwa

Bezpieczeństwo naszego portfela samoobsługowego zostało rygorystycznie ocenione w drodze audytu przeprowadzonego przez Szlak Bitów, cenioną w branży firmę zajmującą się audytem bezpieczeństwa. Audyt ten obejmował szczegółowe badanie naszego kodu i architektury klienta, mające na celu identyfikację i usunięcie potencjalnych luk w zabezpieczeniach.

Aby zapewnić przejrzystość i zapewnić wgląd w bezpieczeństwo naszej platformy, wyniki tego audytu są publicznie dostępne. Ten otwarty dostęp umożliwia użytkownikom i zainteresowanym stronom przeglądanie wyników analizy bezpieczeństwa przeprowadzonej przez Trail of Bits. Raport stanowi ważne źródło wiedzy na temat stosowanych przez nas środków bezpieczeństwa i naszego zaangażowania w utrzymanie bezpiecznego środowiska dla naszych użytkowników.

Priorytetowe traktowanie bezpieczeństwa, przejrzystości i kontroli użytkownika

Kraken Wallet zapewnia delikatną równowagę pomiędzy wygodą i solidną ochroną w obliczu nieodłącznych ograniczeń platformy. Nasze podejście zawsze zaczynało się od powszechnie uznawanej, interoperacyjnej struktury portfela. Ten solidny fundament stanowi dla nas grunt pod wprowadzanie innowacji i dodawanie nowych możliwości, mając na celu zaoferowanie naszym użytkownikom stale rozwijającego się, najwyższej klasy rozwiązania zabezpieczającego do samodzielnego przechowywania swoich zasobów kryptograficznych.

Materiały te służą wyłącznie celom informacyjnym i nie stanowią porady inwestycyjnej ani rekomendacji ani zachęty do kupna, sprzedaży, postawienia lub posiadania jakiegokolwiek kryptoaktywa ani do zaangażowania się w jakąkolwiek konkretną strategię handlową. Kraken nie działa i nie będzie działać w celu zwiększania lub zmniejszania ceny żadnego konkretnego udostępnianego przez siebie kryptoaktywu. Niektóre produkty i rynki kryptowalut są nieuregulowane i możesz nie być chroniony przez rządowe programy kompensacji i/lub ochrony regulacyjnej. Nieprzewidywalny charakter rynków kryptowalut może prowadzić do utraty środków. Podatek może zostać naliczony od każdego zwrotu i/lub wzrostu wartości Twoich kryptowalut, dlatego powinieneś zasięgnąć niezależnej porady na temat swojej sytuacji podatkowej. Mogą obowiązywać ograniczenia geograficzne.

spot_img

Najnowsza inteligencja

spot_img

Czat z nami

Cześć! Jak mogę ci pomóc?