GitHub zaproponował do dyskusji wprowadzenie usługi Sigstore do weryfikacji pakietów za pomocą podpisów cyfrowych oraz prowadzenia publicznego dziennika potwierdzającego autentyczność podczas dystrybucji wydań. Zastosowanie Sigstore wprowadzi dodatkowy poziom zabezpieczeń przed atakami ukierunkowanymi na zamianę komponentów oprogramowania i zależności (łańcuch dostaw). Na przykład, wprowadzone zmiany zabezpieczą kody źródłowe projektów w przypadku kompromitacji konta jednego z deweloperów zależności w NPM i stworzenia przez złośliwego użytkownika aktualizacji pakietu z kodem złośliwym.
Dzięki nowemu poziomowi zabezpieczeń deweloperzy będą mogli powiązać stworzony pakiet z użytym kodem źródłowym i środowiskiem budowania, dając użytkownikowi możliwość upewnienia się, że zawartość pakietu odpowiada zawartości kodu źródłowego w głównym repozytorium projektu. Zastosowanie Sigstore znacznie upraszcza proces zarządzania kluczami i pozwala pozbyć się trudności związanych z rejestracją, unieważnieniem i zarządzaniem kluczami kryptograficznymi. Sigstore przedstawia się jako odpowiednik Let’s Encrypt dla kodu, oferujący certyfikaty do uwierzytelniania kodu podpisami cyfrowymi oraz narzędzia do automatyzacji weryfikacji.
Zamiast stałych kluczy, Sigstore wykorzystuje krótkotrwałe klucze efemeryczne, które są generowane na podstawie uprawnień. Materiał użyty do podpisania jest odzwierciedlany w zabezpieczonym przed modyfikacjami publicznym dzienniku, który pozwala upewnić się, że autor podpisu jest tym, za kogo się podaje, a podpis został utworzony przez tego samego członka, który odpowiadał za wcześniejsze wydania. Aby zapewnić integralność i ochronę przed zniekształceniem danych wstecznie, stosuje się strukturę drzewiastą „drzewo Merkle” (Merkle Tree), w której każda gałąź weryfikuje wszystkie niżej leżące gałęzie i węzły dzięki wspólnemu (drzewiastemu) haszowaniu. Posiadając końcowy hasz, użytkownik może upewnić się o poprawności całej historii operacji, a także o poprawności wcześniejszych stanów bazy danych (korelujący hasz kontrolny nowego stanu bazy obliczany jest z uwzględnieniem poprzedniego stanu).
Źródło: opennet.ru
