Google Tink: bezpieczna kryptografia wysokiego poziomu
Proszę używać opartego na keyset API Tink do wykonywania typowych operacji kryptograficznych bez specjalistycznej wiedzy kryptograficznej.
Google Tink: bezpieczna kryptografia wysokiego poziomu to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Omówienie Tink i jego motywacja
Tink to biblioteka kryptograficzna o otwartym kodzie źródłowym, opracowana przez zespół kryptografii firmy Google, zaprojektowana z myślą o bezpiecznej i łatwej w użyciu kryptografii. Jej głównym celem jest zapobieganie typowym błędom w użyciu kryptografii, które zdarzają się nawet doświadczonym programistom korzystającym z bibliotek niskopoziomowych. API Tink zaprojektowano tak, aby poprawne działanie było najłatwiejszym wyborem, co utrudnia przypadkowe tworzenie niebezpiecznych konfiguracji.
Abstrakcja oparta na zestawach kluczy
Tink organizuje klucze w zestawy kluczy zamiast udostępniać pojedyncze obiekty kluczy. Aplikacje pracują z uchwytami zestawów kluczy, a nie z surowymi bajtami kluczy. Ta abstrakcja zapobiega przypadkowemu ujawnieniu kluczy, umożliwia płynną rotację kluczy oraz pozwala przechowywać klucze w zdalnych systemach zarządzania kluczami bez bezpośredniego udostępniania aplikacji materiału kluczowego. Koncepcja zestawu kluczy ma kluczowe znaczenie dla bezpiecznej konstrukcji Tink.
Interfejs AEAD
Interfejs AEAD (Authenticated Encryption with Associated Data) w Tink udostępnia operacje szyfrowania i deszyfrowania. AeadFactory.getPrimitive(keyset) zwraca obiekt Aead, a wywołanie aead.encrypt(plaintext, associatedData) zwraca szyfrogram. Tink automatycznie wybiera algorytm szyfrowania na podstawie zestawu kluczy (np. AES-256-GCM) i generuje losowy nonce. Interfejs ukrywa wszystkie szczegóły algorytmu, zarządzanie nonce oraz kodowanie formatu.
Interfejs MAC
Interfejs MAC biblioteki Tink udostępnia operacje obliczania i weryfikowania kodów uwierzytelniających wiadomości. MacFactory.getPrimitive(keyset) zwraca obiekt Mac. mac.computeMac(data) zwraca znacznik uwierzytelniający, a mac.verifyMac(tag, data) go weryfikuje, zgłaszając wyjątek bezpieczeństwa, jeśli weryfikacja się nie powiedzie. Domyślnym algorytmem jest HMAC-SHA256. Interfejs zapobiega typowym błędom, takim jak porównywanie kodów MAC za pomocą zwykłego porównania ciągów znaków zamiast porównania w czasie stałym.
Interfejs podpisu cyfrowego
Tink udostępnia osobne interfejsy PublicKeySign i PublicKeyVerify do obsługi podpisów cyfrowych. Obiekty sign i verify są tworzone na podstawie różnych uchwytów zestawów kluczy — odpowiednio prywatnego i publicznego — co zapobiega przypadkowemu użyciu klucza prywatnego do weryfikacji lub odwrotnie. Domyślnie używane są implementacje Ed25519 i ECDSA P-256, a dostępny jest także deterministyczny ECDSA, który pozwala uniknąć podatności związanych z losowością.
Interfejs szyfrowania hybrydowego
Interfejsy HybridEncrypt i HybridDecrypt biblioteki Tink implementują ECIES (schemat zintegrowanego szyfrowania z użyciem krzywych eliptycznych). Szyfrowanie hybrydowe łączy asymetryczną wymianę kluczy z szyfrowaniem symetrycznym: nadawca generuje klucz efemeryczny, wykonuje ECDH z użyciem klucza publicznego odbiorcy, wyprowadza klucz symetryczny i szyfruje dane za pomocą AEAD. Umożliwia to szyfrowanie dużych wiadomości przy użyciu kluczy asymetrycznych bez narzutu charakterystycznego dla wyłącznie asymetrycznego szyfrowania.
Proces rotacji zestawu kluczy
Rotacja kluczy w Tink jest bezpieczna i zgodna wstecz. Aby przeprowadzić rotację: wygeneruj nowy klucz i dodaj go do zestawu kluczy, oznacz nowy klucz jako główny, aby był używany przy przyszłym szyfrowaniu, a stare klucze pozostaw w zestawie do odszyfrowywania istniejących szyfrogramów. Stare szyfrogramy nadal można odszyfrowywać, ponieważ klucze niegłówne pozostają dostępne do tego celu. Gdy wszystkie stare szyfrogramy zostaną ponownie zaszyfrowane lub wygasną, usuń stare klucze z zestawu.
Serializacja zestawu kluczy
Zestawy kluczy Tink są serializowane w formacie JSON lub binarnym formacie Protocol Buffers. Format JSON jest czytelny dla człowieka i przydatny podczas debugowania. Format binarny jest bardziej kompaktowy w środowisku produkcyjnym. Zserializowane zestawy kluczy zawierające klucze prywatne należy zaszyfrować przed zapisaniem. Tink obsługuje przechowywanie zaszyfrowanych zestawów kluczy przy użyciu standardowego symetrycznego szyfrowania AEAD albo przekazanie ich przechowywania do systemu KMS.
Integracja z KMS na potrzeby szyfrowania zestawów kluczy
Tink integruje się z najważniejszymi dostawcami KMS: AWS KMS, Google Cloud KMS i HashiCorp Vault. Zamiast szyfrować zestawy kluczy lokalnym kluczem AEAD, Tink opakowuje klucz szyfrowania zestawu kluczy za pomocą KMS. Właściwe szyfrowanie zestawu kluczy wykorzystuje lokalnie wygenerowany klucz szyfrowania danych (DEK), a DEK jest szyfrowany przez klucz szyfrowania kluczy (KEK) systemu KMS. Jest to zgodne ze wzorcem szyfrowania kopertowego stosowanym przez dostawców usług chmurowych.
Streamingowe AEAD dla dużych plików
Standardowe AEAD wymaga wczytania całej wiadomości do pamięci podczas szyfrowania i deszyfrowania. Interfejs Streaming AEAD biblioteki Tink szyfruje duże pliki segmentami, umożliwiając szyfrowanie i deszyfrowanie strumieniowe bez buforowania całego tekstu jawnego. Każdy segment jest uwierzytelniany niezależnie, a podczas deszyfrowania weryfikowana jest kolejność i kompletność segmentów. Jest to niezbędne przy szyfrowaniu kopii zapasowych, filmów i innych dużych plików.
Obsługa języków i ekosystem
Tink jest dostępny dla języków Java, Python, Go i C++, a dla każdego z nich oferuje idiomatyczne interfejsy API. Interoperacyjność między językami jest gwarantowana: plik zaszyfrowany za pomocą Tink w języku Python można odszyfrować za pomocą Tink w języku Java. Dzięki temu Tink nadaje się do systemów składających się z wielu usług napisanych w różnych językach, które muszą wymieniać zaszyfrowane dane. Tink integruje się także z Protocol Buffers na potrzeby bezpiecznej typowo konfiguracji zestawów kluczy.
Rotacja zestawu kluczy Tink
Podczas rotacji kluczy Tink co dzieje się z szyfrogramami zaszyfrowanymi przy użyciu starego (niegłównego) klucza?
Podsumowanie Google Tink
Podsumowanie Tink: abstrakcja oparta na zestawach kluczy zapobiega ujawnieniu surowych kluczy, interfejs AEAD ukrywa zarządzanie nonce i wybór algorytmu, interfejs MAC wewnętrznie stosuje weryfikację w czasie stałym, interfejsy podpisu cyfrowego i szyfrowania hybrydowego zapobiegają nieprawidłowemu użyciu, rotacja kluczy jest zgodna wstecz (stare klucze umożliwiają deszyfrowanie do momentu ich usunięcia), integracja z KMS wykorzystuje wzorzec szyfrowania kopertowego, streamingowe AEAD obsługuje duże pliki, a interoperacyjność między językami jest gwarantowana.
Często zadawane pytania
Czy lekcja „Google Tink: bezpieczna kryptografia wysokiego poziomu” jest bezpłatna?
Tak — pełny tekst „Google Tink: bezpieczna kryptografia wysokiego poziomu” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Google Tink: bezpieczna kryptografia wysokiego poziomu”?
Proszę używać opartego na keyset API Tink do wykonywania typowych operacji kryptograficznych bez specjalistycznej wiedzy kryptograficznej. Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Google Tink: bezpieczna kryptografia wysokiego poziomu”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- libsodium: biblioteka kryptograficzna odporna na błędne użycie
- API OpenSSL: podstawowe struktury i pułapki
- Google Tink: bezpieczna kryptografia wysokiego poziomu
- Audytowanie i wybór zależności kryptograficznych