SHARE THE PERSPECTIVE
Suma kontrolna porównuje bajty z wartością odniesienia. Podpis wiąże integralność z kluczem. Żadne z nich samo w sobie nie dowodzi, że oprogramowanie jest bezpieczne.

Przed zainstalowaniem pliku APK na Androidzie rozróżnij trzy rodzaje kontroli: Czy ten plik odpowiada oczekiwanemu wydaniu? Czy podpisano go oczekiwanym kluczem? Czy niezależne osoby mogą odtworzyć go z podanego kodu źródłowego? Suma kontrolna SHA-256, podpis APK i odtwarzalna kompilacja odpowiadają na te pytania w różny sposób.

Żadna z tych kontroli sama w sobie nie rozstrzyga, czy program jest złośliwy. Poprawnie podpisany program, którego kompilację można odtworzyć, nadal może zawierać lukę bezpieczeństwa lub celowo szkodliwe funkcje.

Co wykazuje każda metoda weryfikacji

Kontrola Przydatny wynik Istotne ograniczenie
Skrót SHA-256 pliku Twoje bajty odpowiadają konkretnemu zaufanemu skrótowi Atakujący, który podmieni zarówno plik, jak i skrót, może obejść tę kontrolę
Weryfikacja podpisu APK Podpis pakietu jest poprawny względem jego certyfikatu podpisującego Trzeba ustalić, który klucz podpisujący jest oczekiwany; sama poprawność nie potwierdza tożsamości wydawcy
Porównanie odtwarzalnych kompilacji Określony artefakt można ponownie utworzyć na podstawie udokumentowanych danych wejściowych Zgodność kodu źródłowego z plikiem binarnym nie dowodzi, że kod źródłowy jest bezpieczny
Przegląd bezpieczeństwa Oceniono konkretne kwestie projektowe lub implementacyjne Znaczenie mają zakres, wersja, ustalenia i nierozwiązane problemy

Android wymaga podpisania plików APK na potrzeby instalacji i aktualizacji. W ramach Play App Signing Google może zarządzać kluczem podpisywania aplikacji i generować z pakietu app bundle pliki APK do dystrybucji. Są to udokumentowane zasady zaufania, a nie dowód, że dowolni pośrednicy mogą niezauważalnie zmieniać pakiet, zachowując jego poprawny podpis. Zobacz przewodnik Androida po podpisywaniu aplikacji.

Krok 1: ustal dokładnie, o jaki artefakt chodzi

Zapisz wersję aplikacji, kanał wydania, nazwę pliku i docelowy wariant platformy. Korzystaj z oficjalnej strony dystrybucji wydawcy, a nie z sumy kontrolnej skopiowanej z tej samej niezamówionej wiadomości, w której otrzymano APK.

APK pobrany bezpośrednio od wydawcy może różnić się od APK wygenerowanego dla danego urządzenia przez sklep z aplikacjami. Różne wersje, architektury, sposoby pakowania lub zasady podpisywania mogą w uzasadniony sposób prowadzić do różnych skrótów plików. Porównuj odpowiadające sobie artefakty, zanim uznasz niezgodność za dowód manipulacji.

Praktyczne pytanie brzmi: Skąd pochodzi oczekiwana wartość i dlaczego ufam temu źródłu? Obliczenie skrótu offline nie rozwiązuje problemu zaufania do skrótu odniesienia uzyskanego online.

Krok 2: oblicz SHA-256 lokalnie

Zastąp messenger.apk nazwą pobranego pliku. Poniższe przykłady odczytują plik; nie instalują go.

Linux:

sha256sum messenger.apk

macOS:

shasum -a 256 messenger.apk

Wiersz polecenia systemu Windows:

certutil -hashfile messenger.apk SHA256

Porównaj cały skrót, pomijając jedynie odstępy w sposobie wyświetlania i wielkość liter. Nie porównuj wyłącznie kilku pierwszych lub ostatnich znaków. Zachowaj oczekiwany skrót wraz z informacjami o wydaniu i wersji, aby można było powtórzyć porównanie.

Jeśli wartości się różnią, zatrzymaj się przed instalacją. Sprawdź artefakt i wersję, w razie potrzeby pobierz plik ponownie z zaufanego źródła, a niewyjaśnioną niezgodność zgłoś wydawcy. Nie „poprawiaj” oczekiwanej sumy kontrolnej tak, aby pasowała do otrzymanego pliku.

Krok 3: sprawdź podpis APK

Użytkownikom dysponującym Android SDK Build Tools dokumentacja narzędzia apksigner od Google wyjaśnia weryfikację podpisów i wyświetlanie informacji o certyfikacie:

apksigner verify --verbose --print-certs messenger.apk

Weryfikacja powinna zakończyć się powodzeniem dla platform obsługiwanych przez dany APK. Porównaj informacje o certyfikacie podpisującym z zaufanym zapisem danych wydania lub udokumentowaną przez wydawcę historią następujących po sobie kluczy podpisujących. Podpis złożony nieznanym kluczem nie staje się godny zaufania tylko dlatego, że pojawia się słowo „zweryfikowano”. Również prawidłowa rotacja klucza podpisującego wymaga dowodów, a nie polecenia zignorowania niezgodności.

Skrót SHA-256 pliku APK i odcisk SHA-256 jego certyfikatu podpisującego to różne wartości. Nie porównuj jednej z drugą.

Krok 4: poszukaj dowodów na odtwarzalność kompilacji

Deklaracja odtwarzalnej kompilacji wymaga określonej rewizji kodu źródłowego, środowiska kompilacji, instrukcji i artefaktu docelowego. Niezależne podmioty powinny móc odtworzyć ten artefakt i porównać wynik. Definicja projektu Reproducible Builds uwzględnia te dane wejściowe jako część takiej deklaracji.

W przypadku komunikatora przydatne dowody dotyczące wydania obejmują tag kodu źródłowego, ustalone wersje zależności i zestawu narzędzi, instrukcje kompilacji oraz wyniki niezależnych porównań. Zapytaj, co dokładnie porównano: niepodpisany artefakt, podpisany APK czy wybrane elementy zawartości pakietu. Nie wnioskuj o odtwarzalności tylko dlatego, że opublikowano kod źródłowy i skrót pliku do pobrania.

Odtwarzalność wzmacnia powiązanie między kodem źródłowym poddanym przeglądowi a rozpowszechnianym kodem. Nie zmienia implementacji niepoddanej przeglądowi w bezpieczny protokół ani nie dowodzi, że działający telefon nie został przejęty lub naruszony.

Gdzie w tym wszystkim jest Proof Lab Livary

Proof Lab Livary umożliwia lokalne obliczenie skrótu APK i porównanie go z opublikowanym skrótem. Jego demonstracje kryptograficzne mają węższy zakres niż audyt całego protokołu komunikatora. Korzystaj z kontroli skrótu zgodnie z jej przeznaczeniem, wraz z oczekiwanymi informacjami o wydaniu i podpisie; nie traktuj jej jako niezależnego dowodu odtwarzalności kompilacji lub braku tylnych furtek.

Model zagrożeń wyraźnie wskazuje ograniczenie występujące wtedy, gdy można podmienić zarówno APK, jak i wyświetlany skrót. Dlatego pochodzenie wartości odniesienia jest równie ważne jak poprawne wykonanie obliczenia.

Często zadawane pytania

Czy zgodna suma kontrolna dowodzi, że APK jest bezpieczny?

Nie. Potwierdza zgodność ze skrótem odniesienia przy założeniu, że źródło odniesienia jest wiarygodne i zachodzą właściwości bezpieczeństwa funkcji skrótu. Nie ocenia zachowania programu.

Czy weryfikacja podpisu jest zbędna, jeśli suma kontrolna się zgadza?

Nie. Te kontrole dostarczają różnych dowodów. Podpis wiąże integralność pakietu z kluczem; skrót pliku identyfikuje konkretną sekwencję bajtów.

Czy plik pobrany ze sklepu musi mieć taki sam skrót jak APK na stronie internetowej?

Tylko jeśli powinien to być ten sam artefakt. Najpierw sprawdź kanał wydania, wersję i sposób pakowania. Niewyjaśniona niezgodność wymaga zbadania, a nie automatycznego oskarżenia ani automatycznego zatwierdzenia.

Czy te kontrole mogą wykryć oprogramowanie szpiegujące już obecne na telefonie?

Nie. Oceniają artefakt instalacyjny, a nie każdy element bieżącego stanu działającego urządzenia.

Zweryfikuj swoją kompilację w Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗