0Pricing
Cryptology Academy · Lekcja

libsodium: biblioteka kryptograficzna odporna na błędne użycie

Proszę poznać zorientowane na bezpieczeństwo API libsodium, które utrudnia wybór niebezpiecznych parametrów.

libsodium: biblioteka kryptograficzna odporna na błędne użycie to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 1 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.

Filozofia i pochodzenie libsodium

libsodium zostało stworzone przez Franka Denisa jako przenośna, wieloplatformowa wersja biblioteki NaCl (Networking and Cryptography library), opracowanej przez Daniela Bernsteina, Tanję Lange i Petera Schwabego. Jej podstawową ideą jest maksymalne ułatwienie poprawnego korzystania z kryptografii i maksymalne utrudnienie korzystania z niej w sposób nieprawidłowy. Bezpieczne wartości domyślne, proste interfejsy API i konsekwentnie dobrane algorytmy zapobiegają typowym błędom nękającym biblioteki niskopoziomowe.

Szyfrowanie uwierzytelnione kluczem tajnym

crypto_secretbox zapewnia uwierzytelnione szyfrowanie kluczem tajnym przy użyciu XSalsa20-Poly1305. API przyjmuje wiadomość, 24-bajtowy nonce (generowany losowo) oraz 32-bajtowy klucz. Wynikiem jest szyfrogram, który jest zarówno zaszyfrowany, jak i uwierzytelniony. crypto_secretbox_open atomowo odszyfrowuje dane i weryfikuje tag uwierzytelniający, zwracając błąd w przypadku wykrycia manipulacji. Zapobiega to odszyfrowywaniu uszkodzonych lub złośliwie zmodyfikowanych szyfrogramów.

Szyfrowanie uwierzytelnione kluczem publicznym

crypto_box zapewnia uwierzytelnione szyfrowanie kluczem publicznym między dwiema stronami przy użyciu X25519-XSalsa20-Poly1305. Na podstawie klucza prywatnego nadawcy i klucza publicznego odbiorcy szyfruje oraz uwierzytelnia wiadomość, dzięki czemu tylko zamierzony odbiorca może ją odszyfrować, a także zweryfikować tożsamość nadawcy. crypto_box_seal to wariant anonimowy: nadawca pozostaje ukryty, a zapewniane jest wyłącznie szyfrowanie, bez uwierzytelniania nadawcy.

Podpisy cyfrowe z użyciem Ed25519

crypto_sign implementuje podpisy cyfrowe przy użyciu Ed25519. Generowanie kluczy tworzy 64-bajtowy klucz prywatny (w rzeczywistości ziarno połączone z kluczem publicznym) oraz 32-bajtowy klucz publiczny. Podpisywanie tworzy 64-bajtowy podpis. Weryfikacja jest szybka i wykonywana w czasie stałym. Podpisy Ed25519 są deterministyczne (ta sama wiadomość i ten sam klucz zawsze dają ten sam podpis), co eliminuje podatności wynikające z błędów losowości, które w niektórych implementacjach dotyczyły ECDSA.

Haszowanie z użyciem BLAKE2b

crypto_generichash zapewnia haszowanie ogólnego przeznaczenia przy użyciu BLAKE2b. W przeciwieństwie do SHA-256 BLAKE2b nie wymaga osobnej konstrukcji HMAC do haszowania z kluczem — opcjonalny klucz można przekazać bezpośrednio. Długość wyniku można konfigurować w zakresie od 16 do 64 bajtów. Na współczesnych procesorach 64-bitowych BLAKE2b jest szybszy niż SHA-256 i SHA-512, zapewniając przy tym równoważne lub lepsze właściwości bezpieczeństwa.

Derywacja kluczy z użyciem BLAKE2b

crypto_kdf zapewnia derywację kluczy z klucza głównego przy użyciu BLAKE2b. Na podstawie 32-bajtowego klucza głównego, ciągu kontekstu (8 bajtów identyfikujących przeznaczenie) oraz identyfikatora podklucza (liczby 64-bitowej) funkcja wyprowadza niezależny kryptograficznie podklucz o konfigurowalnej długości. Umożliwia to wyprowadzenie wielu niezależnych kluczy z jednego klucza głównego do różnych zastosowań, bez żadnej korelacji między wyprowadzonymi kluczami.

Haszowanie haseł z użyciem Argon2id

crypto_pwhash zapewnia haszowanie haseł przy użyciu Argon2id, zwycięzcy konkursu Password Hashing Competition. Argon2id łączy obliczenia wymagające dużej ilości pamięci (odporne na ataki z użyciem GPU) z obliczeniami wymagającymi dużej ilości czasu (odporne na ataki z użyciem układów ASIC). Parametry obejmują limit operacji (koszt czasowy) i limit pamięci, które można dostosować do wymagań bezpieczeństwa. crypto_pwhash_str tworzy standardowy ciąg znaków odpowiedni do przechowywania, zawierający algorytm i jego parametry.

Zap sealed boxes do anonimowego szyfrowania

crypto_box_seal szyfruje wiadomość dla odbiorcy bez ujawniania nadawcy. Funkcja generuje tymczasową efemeryczną parę kluczy, przeprowadza wymianę kluczy z użyciem klucza publicznego odbiorcy, a następnie usuwa efemeryczny klucz prywatny. Odbiorca może odszyfrować wiadomość przy użyciu swojego klucza prywatnego, ale nie może zidentyfikować nadawcy. Rozwiązanie to nadaje się do anonimowych systemów przesyłania zgłoszeń i jednokierunkowych szyfrowanych kanałów.

Powiązania libsodium z językami programowania

libsodium ma powiązania z niemal każdym ważnym językiem programowania. PyNaCl zapewnia idiomatyczne powiązanie z Pythonem, wykorzystujące typowe dla tego języka wyjątki i obiekty bytes. libsodium-wrappers zapewnia powiązania z JavaScript/Node.js (w przeglądarkach za pomocą WASM). libsodium.js to port napisany wyłącznie w JavaScript. Jakość powiązań jest różna: należy preferować oficjalne lub szeroko utrzymywane powiązania, które opakowują bibliotekę C, zamiast ponownie implementować algorytmy.

Porównanie z niskopoziomowym API OpenSSL

Niskopoziomowe API OpenSSL wymaga jawnego podejmowania decyzji dotyczących algorytmów, rozmiarów kluczy, trybów, dopełnienia i zarządzania IV. Nieprawidłowe kombinacje są akceptowane bez ostrzeżenia. libsodium udostępnia jedną poprawną implementację dla każdego zastosowania i nie wymaga konfiguracji. Na przykład szyfrowanie za pomocą OpenSSL wymaga wyboru szyfru, trybu, derywacji klucza, generowania IV i dopełnienia; w przypadku crypto_secretbox biblioteki libsodium wystarczy przekazać klucz, nonce i wiadomość, a cała reszta zostanie obsłużona poprawnie.

Wybór libsodium w nowych projektach

libsodium jest zalecanym punktem wyjścia dla każdego projektu wymagającego operacji kryptograficznych w obsługiwanych językach. Niewielki zakres API zmniejsza ryzyko nieprawidłowego użycia, algorytmy są nowoczesne i dokładnie przeanalizowane, a wieloplatformowa implementacja w C została gruntownie przetestowana. Przejście na bibliotekę niskopoziomową, taką jak OpenSSL, powinno być konieczne tylko wtedy, gdy potrzebują Państwo konkretnych algorytmów niedostępnych w libsodium lub wymagają walidacji FIPS 140-2.

Operacje libsodium

Której funkcji libsodium należy użyć do zahaszowania hasła przeznaczonego do przechowywania w bazie danych?

Podsumowanie libsodium

Podsumowanie libsodium: bezpieczne ustawienia domyślne i trudne do nieprawidłowego użycia API, oparte na prymitywach NaCl autorstwa Bernsteina i współpracowników, crypto_secretbox do szyfrowania kluczem tajnym (XSalsa20-Poly1305), crypto_box do szyfrowania kluczem publicznym (X25519), crypto_sign do podpisów Ed25519, crypto_generichash do haszowania BLAKE2b, crypto_pwhash do haszowania haseł za pomocą Argon2id, sealed boxes do anonimowego szyfrowania oraz powiązania z większością głównych platform i języków programowania.

Często zadawane pytania

Czy lekcja „libsodium: biblioteka kryptograficzna odporna na błędne użycie” jest bezpłatna?

Tak — pełny tekst „libsodium: biblioteka kryptograficzna odporna na błędne użycie” 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 „libsodium: biblioteka kryptograficzna odporna na błędne użycie”?

Proszę poznać zorientowane na bezpieczeństwo API libsodium, które utrudnia wybór niebezpiecznych parametrów. Ć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 1 z 4.

Ile czasu zajmuje lekcja „libsodium: biblioteka kryptograficzna odporna na błędne użycie”?

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

  1. libsodium: biblioteka kryptograficzna odporna na błędne użycie
  2. API OpenSSL: podstawowe struktury i pułapki
  3. Google Tink: bezpieczna kryptografia wysokiego poziomu
  4. Audytowanie i wybór zależności kryptograficznych
← Powrót do Cryptology Academy