2012-06-07 17 views
7

chcę poprzedzić to pytanie z dwóch rzeczy, więc mogę zawęzić gdzie mój rzeczywisty pytanie brzmi:Jak działa weryfikacja aplikacji/podpisu Androida?

a) Zrobiłem oprogramowania dev wcześniej, chociaż nigdy do android

b) Jestem zaznajomiony z PKI i szyfrowaniem oraz hashowaniem i podpisami cyfrowymi i bla bla bla

Z tego powodu mam problem ze znalezieniem dodatkowych informacji o tym, gdzie i jak Android sprawdza twórców aplikacji. Słyszałem wiele różnych informacji, więc próbuję zsyntetyzować, aby uzyskać lepszy obraz przepływu pracy.

Wiem, że każdy programista aplikacji ma swoją własną parę kluczy prywatny/publiczny i podpisuje aplikacje, mieszając pakiet APK (z SHA-1 przez większość czasu, jeśli się nie mylę) i gotowe. Przesyłacie go i (jak sądzę) klucz publiczny trafia do META INF wewnątrz APK. Tyle rozumiem.

Moje pytanie dotyczy tego, w jaki sposób użytkownik pobiera samą aplikację. Wiem, że telefon sprawdza, czy aplikacja jest prawidłowo podpisana i czy podpis zawiera informacje o autorze i itp. Ale przeczytałem też, że aplikacje są podpisywane automatycznie, a Google Play (czy jak tam nazywają rynek) nie wdraża urzędu certyfikacji i nie ma uwierzytelniania tożsamości? Ale moje pytanie brzmi: co powstrzymuje ludzi przed przesyłaniem aplikacji pod inną nazwą programisty (crowdsourcing na bok)?

Jeśli telefon sprawdza tylko poprawne podpisy, czy oznacza to, że jedynym sposobem uwierzytelniania jest wykonanie aplikacji? A jeśli tak, to jak działa rynek aplikacji? Czy to normalne - użyj klucza prywatnego w pliku i zweryfikuj podpis? Czy deweloper musi dostarczyć rynkowi klucz prywatny do uwierzytelnienia?

+0

Po podpisaniu pliku APK należy podać prywatne hasło. Aby ktoś mógł opublikować aplikację "jako ktoś inny", musiałby mieć dostęp do swoich plików kluczy i haseł. I dostęp do konta Google powiązanego z rynkiem. – FoamyGuy

+0

@Tim: Myślę, że pyta: Co ma przeszkodzić, by ktoś inny stworzył własną parę kluczy i samopodpisujący się certyfikat, który również zawiera w sobie "Fewmitz". Czy jest to w jakiś sposób powiązane z kontem? –

Odpowiedz

9

Krótko mówiąc, Android i Google Play zasadniczo nie obchodzą tego, co znajduje się w aktualnym certyfikacie. Google Play potwierdzi ją rzeczywiście i sprawdzi, czy jest ona ważna przez 30 lat lub dłużej, ale tak naprawdę nie używa (przynajmniej obecnie, AFAIK) faktycznych informacji w certyfikacie. Możesz użyć własnego nazwiska/nazwy firmy w CN, ale nikt tego nie potwierdzi, a użytkownicy nie zobaczą tych informacji w ogóle. Co robi jest Android:

  • sprawdzić podpis, aby upewnić się, że APK nie został naruszony
  • następnie porównać certyfikat śpiewu jako binarny blob do jednego z aktualnie zainstalowanej wersji aplikacji aby upewnić się, że obie wersje zostały podpisane tym samym kluczem/certyfikatem (np. przez tę samą osobę/firmę)
  • robi to samo, aby wymusić zezwolenie, jeśli używasz przy użyciu sharedUid lub uprawnień do podpisu z dwoma lub więcej aplikacje.

Aby odpowiedzieć na Twoje pytanie, ktoś może łatwo utworzyć certyfikat z Twoim imieniem i nazwiskiem, ale Android i Google Play tak naprawdę nie obchodzi. Jeśli nie mają Twojego klucza prywatnego, nie będą mogli wygenerować podpisu aplikacji, który jest taki sam jak twój, a zatem nie będą mogli nadpisać/zaktualizować swojej aplikacji, ani uzyskać specjalnych uprawnień. .

+0

Czy oznacza to, że jeśli użyjesz dwóch certyfikatów z tą samą parą klucza publicznego i prywatnego, ale z różnymi nazwami podmiotów, oba będą ważne? Zasadniczo, kiedy podpisuję swoją aplikację kluczem prywatnym, czy moje dane, takie jak nazwa podmiotu itp., Są brane pod uwagę w dowolnym miejscu? – Ashwin

+2

Nie dba o rzeczywiste "szczegóły" (DN, numer seryjny certyfikatu itp.), Ale po prostu porównuje certyfikaty jako bloki binarne. Ponieważ są różne, nie można zaktualizować aplikacji pierwotnie podpisanej za pomocą certyfikatu cert1 z inną podpisaną za pomocą cert2. –

+0

Mówiąc: "Nie obchodzi ich faktyczne" szczegóły "(nazwa DN, numer seryjny itd.)" Czy oznacza to, że dane te nigdy nie są używane? Ponieważ ostatecznie, jak sam powiedziałeś, "porównuje certyfikaty jako bloki binarne" - oznacza to, że bierze pod uwagę szczegóły certyfikatu. – Ashwin