Deweloperzy systemu operacyjnego , przy użyciu języka Rust oraz koncepcji mikrojądra, nowego menedżera pakietów . W ramach projektu rozwijany jest nowy format pakietów, biblioteka z funkcjami zarządzania pakietami oraz narzędzie wiersza poleceń do tworzenia i wydobywania kryptograficznie zweryfikowanej kolekcji plików. Kod pkgar został napisany w języku Rust i na licencji MIT.
Format pkgar nie ma na celu uniwersalności i jest zoptymalizowany pod kątem specyfiki systemu operacyjnego Redox OS. Menedżer pakietów wspiera weryfikację źródła za pomocą podpisu cyfrowego oraz kontrolę integralności. Sumy kontrolne obliczane są przy użyciu funkcji haszującej . Funkcjonalność pkgar związana z weryfikacją może być dostępna bez faktycznego zapisywania archiwum pakietu, manipulując jedynie częścią nagłówkową. W szczególności pakiet składa się z pliku nagłówkowego (.pkgar_head) i pliku z danymi (.pkgar_data). Poprawnie podpisany kompletny pakiet zbiorczy (.pkgar) można uzyskać poprzez proste dołączenie pliku nagłówka do pliku danych („cat example.pkgar_head example.pkgar_data > example.pkgar”).
Plik z nagłówkiem zawiera osobne sumy kontrolne dla nagłówka i struktur z parametrami z pliku z danymi, a także podpis cyfrowy do weryfikacji pakietu. Plik z danymi zawiera sekwencyjny wykaz wszystkich plików i katalogów dostarczanych w pakiecie. Przed każdym elementem danych umieszczana jest struktura z metadanymi, które zawierają sumę kontrolną dla samych danych, rozmiar, prawa dostępu, względną ścieżkę instalowanego pliku oraz przesunięcie parametrów kolejnego elementu danych. Jeżeli podczas aktualizacji niektóre pliki nie uległy zmianie i suma kontrolna się zgadza, są one pomijane i nie są ładowane.
Sprawdzić integralność źródła można uzyskując jedynie plik nagłówkowy, a poprawność wybranego pliku z danymi — pobierając jedynie struktury z parametrami tego pliku i upewniając się w ich zgodności z sumą kontrolną zatwierdzoną w pliku nagłówkowym. Same dane można zweryfikować po ich pobraniu, używając sumy kontrolnej ze struktury z parametrami, która preceduje dane.
Pakiety pierwotnie zakładają możliwość wielokrotnej budowy, co oznacza, że stworzenie pakietu dla określonego katalogu zawsze prowadzi do utworzenia identycznego pakietu. Po zainstalowaniu w systemie zachowywane są jedynie metadane, które wystarczają do rekonstrukcji pakietu z zainstalowanych danych (zawartość pakietu, sumy kontrolne, ścieżki i prawa dostępu znajdują się w metadanych).
Podstawowe cele pkgar:
- Atomowość — aktualizacje są stosowane automatycznie, jeśli to możliwe.
- Osobność transferu — dane są przesyłane przez sieć tylko przy zmianie hasha (podczas aktualizacji pobierane są tylko zmienione pliki).
- Wysoka wydajność, wykorzystane są szybkie algorytmy kryptograficzne (blake3 obsługuje równoległe przetwarzanie danych przy obliczaniu hasha). Jeśli dane z repozytorium nie były wcześniej skanowane, hash dla pobieranych danych może być obliczany w czasie przetwarzania.
- Minimalizm — w przeciwieństwie do innych formatów, pkgar zawiera jedynie metadane niezbędne do wydobycia pakietu.
- Niezależność od katalogu instalacji — pakiet może być zainstalowany w dowolnym katalogu przez dowolnego użytkownika (użytkownik musi mieć prawo do zapisu w wybranym katalogu).
- Bezpieczeństwo — pakiety zawsze są weryfikowane kryptograficznie, a weryfikacja jest przeprowadzana przed dokonaniem faktycznych operacji na pakiecie (najpierw ładowany jest nagłówek, a jeśli podpis cyfrowy jest poprawny, dane są ładowane do katalogu tymczasowego, które są przenoszone do katalogu docelowego po weryfikacji).
Źródło: opennet.ru
