Keychain abstrakcyjnie ujmuje backend podpisujący, jednak obsługa podpisującego w środowisku produkcyjnym nadal należy do Twoich obowiązków. Poniższe praktyki mają zastosowanie do wszystkich backendów; zapoznaj się z Wybieraniem backendu, aby wybrać odpowiedni.
Oddziel sygnatariuszy hot i cold
Używaj operacyjnego sygnatariusza z niskim saldem ("hot") do częstych, zautomatyzowanych transakcji oraz oddzielnego sygnatariusza wysokiej wartości ("cold") do operacji skarbcowych. Zabezpiecz sygnatariusza cold za pomocą MPC custody lub sprzętowego modułu HSM w chmurze i wymagaj polityk zatwierdzania przed podpisaniem. Ponieważ interfejs jest identyczny, każda rola może korzystać z innego backendu bez zmiany miejsc wywołań.
Rotuj klucze w sposób przemyślany
W Solanie klucz podpisujący jest adresem konta, więc rotacja klucza tworzy nowy adres. Planuj rotację jako migrację: zaopatrz się w nowy klucz, przypisz ponownie odpowiednie uprawnienia (lub przenieś środki) na nowy adres, a następnie wycofaj stary. Używaj odrębnych kluczy dla każdego środowiska, aby klucze devnet nigdy nie były ponownie używane w sieci mainnet.
Przyznawaj dostęp z minimalnymi uprawnienieniami
Ogranicz poświadczenia każdego backendu do minimum niezbędnego do podpisywania. W przypadku AWS KMS
są to kms:Sign, kms:DescribeKey i kms:GetPublicKey dla konkretnego klucza
(sprawdzenie dostępności korzysta z dwóch ostatnich); preferuj role IAM zamiast statycznych
poświadczeń. Zastosuj tę samą zasadę do polityk Vault oraz kluczy API zarządzanych portfeli.
Planuj dostępność
Zdalne backendy zależą od usługi sieciowej. Sprawdź dostępność, zanim zaczniesz polegać
na podpisującym (isAvailable() w TypeScript, is_available() w Rust i Pythonie,
IsAvailable(ctx) w Go), ponawiaj nieudane operacje wyłącznie podpisywania z użyciem backoffu i zdefiniuj
awaryjną ścieżkę na wypadek przerw w działaniu. Nie ponawiaj na ślepo prób w backendzie, który rozgłasza transakcje
(Crossmint, natywny tryb auto Fordefi): zobacz
Obsługa niepotwierdzonych rozgłoszeń. Keychain
wymusza HTTPS dla skonfigurowanych bazowych adresów URL, odrzuca przekierowania i stosuje domyślny
limit czasu żądania.
Obsługa niepotwierdzonych rozgłoszeń
Crossmint i natywny tryb auto Fordefi podpisują i rozgłaszają transakcje po stronie serwera, więc
nieudane wywołanie nie oznacza, że nic nie zostało wysłane. Gdy dostawca mógł przyjąć
transakcję, Keychain zgłasza BROADCAST_UNCONFIRMED
(SignerError::BroadcastUnconfirmed w Rust). Błąd zawiera identyfikator transakcji
dostawcy, jeśli utworzenie zostało przyjęte, i zawsze zawiera klucz idempotentności,
pod którym wysłano żądanie utworzenia, wyprowadzony z wiadomości.
- Zanim zrobisz cokolwiek innego, uzgodnij stan z dostawcą, używając identyfikatora transakcji.
- Ponowne wysłanie identycznej bajt po bajcie transakcji jest bezpieczne: klucz idempotentności deduplikuje ją.
- Odbudowanie transakcji (na przykład z nowym blockhashem) tworzy nowy klucz i tym samym nowy transfer.
Chroń sekrety i transport
- Zdalne backendy wymuszają HTTPS dla skonfigurowanych bazowych adresów URL i odrzucają przekierowania.
Jedynym wyjątkiem jest Vault, który akceptuje zwykły HTTP na adresie loopback, dzięki czemu lokalne
vault server -devdziała. - Dostarczaj klucze API, tokeny i poświadczenia z menedżera sekretów lub zmiennych środowiskowych — nigdy nie koduj ich na stałe ani nie umieszczaj w kontroli wersji.
- Keychain oczyszcza odpowiedzi błędów, aby uniknąć wycieków sekretów do logów; dbaj o to, aby Twoje własne logi były wolne od surowych poświadczeń i materiału klucza.
Monitoruj i audytuj podpisywanie
Śledź wskaźnik sukcesu podpisywania, opóźnienia i liczbę błędów oraz alertuj o skokach — zapoznaj się z metrykami w Production Readiness. Włącz logi audytu po stronie dostawcy (KMS, Vault lub powiernik) i uzgadniaj je z transakcjami przesyłanymi przez Twoją aplikację.
Co sprawdza Keychain
- Keychain waliduje etap podpisywania, a nie Twoją transakcję: nie ma symulacji, sprawdzania zawartości transakcji ani silnika polityk. Egzekwuj to we własnej aplikacji lub w kontrolach polityk dostawcy.
- Natywny tryb manualny Fordefi przepisuje transakcję (blockhash, instrukcje opłat Compute Budget) przed jej podpisaniem. Kontynuuj od zwróconej transakcji, nigdy od tej, którą wysłano, i uruchom ją przed jakimkolwiek innym podpisującym.
- Rust zeruje pośrednie bufory kluczy; Python i Go nie potrafią tego zrobić. W przypadku backendu Memory w tych językach traktuj całą pamięć procesu jako wrażliwą.
- W przypadku Ledgera ekran urządzenia jest jedynym wiarygodnym opisem tego, co
jest podpisywane. Nie włączaj funkcji
unsafe-debugani logowaniaTRACEdlasolana_remote_walletw środowisku produkcyjnym, ponieważ oba zapisują w logach szczegóły urządzenia i transakcji.
Pełny obraz znajdziesz w modelu bezpieczeństwa.
Is this page helpful?