2011-07-22 14 views
5

Aktualnie tworzę aplikację, która pobiera informacje z serwisu internetowego, który napisałem (w .net) i chcę zabezpieczyć połączenie, aby tylko moja aplikacja mogła pobierać dane z usługa. Jaki jest najlepszy sposób na zrobienie tego?Bezpieczne podłączanie do usługi internetowej z aplikacji na Androida

Nie chcę, aby ktokolwiek mógł uzyskać dostęp do szczegółów, jeśli dekompiluje/odtwarza moją aplikację. Czy istnieje sposób, w jaki mogę zweryfikować integralność aplikacji, która żąda danych przed ich odesłaniem?

Nie obchodzi mnie, że są w stanie śledzić ruch, aby zobaczyć, co zawiera, po prostu nie chcę, aby cokolwiek innego niż moja aplikacja było w stanie składać wnioski w celu ochrony przed zdrapaniem wszystkich danych.

Jestem nowicjuszem w dziedzinie bezpieczeństwa, więc jest to bardzo proste, proszę!

Odpowiedz

2

Chris

można przeczytać na mechanizmie o nazwie One Time hasła (OTP). http://en.wikipedia.org/wiki/One-time_password

Możesz zaprojektować swoją aplikację do generowania OTPs za każdym razem, gdy próbuje połączyć się z twoją usługą sieciową. Odpowiedzialność za weryfikację autentyczności OTP spoczywa na serwisie internetowym.

Pozwól mi teraz przejść do małego szczegółu. Wyobraź sobie, że aplikacja zawiera w sobie algorytm, który generuje i dostarcza 256-bitowy numer za każdym razem, gdy łączy się z usługą internetową. Zaprojektowana przez Ciebie usługa sieciowa implementuje również funkcję sprawdzania poprawności w OTP. Zwykle algorytm OTP uwzględnia w swojej implementacji "Pora dnia" (proponuję Google na kilku darmowych implementacjach). Tak więc koniec serwera (OTP Validator) działa tylko wtedy, gdy czas na Serwerze i kliencie znajduje się w oknie (np. + - n sek) czasu odświeżania n. Zazwyczaj walidator OTP generuje również OTP na samym końcu i po prostu porównuje otrzymany. Możesz dodatkowo HASH OTP przed wysłaniem i porównać HASHes wygenerowanego OTP na serwerze (nie pomaga lub jest bezpieczniejszy).

Teraz powstaje pytanie, co jeśli ktoś uzyska algorytm (może to być po prostu użycie OTP typu open source). Cóż, tak miało być. Dobra implementacja zabezpieczeń jest dostępna tylko z poprawnym hasłem, nawet jeśli wszystko inne jest dostępne dla atakującego. Aby to zrobić, być może trzeba będzie dodać logikę, aby udostępnić swoje aplikacje przy pierwszym połączeniu, co OTP mogłoby się spodziewać. Tutaj zakładam zaufanie przy pierwszym użyciu. Możesz dodać logikę do przechowywania unikalnego identyfikatora aplikacji rezydenta, który jest używany podczas obliczania OTP. Dodatkowo będziesz utrzymywać mapowanie "resident-id" na "public-id" na serwerze. Jest to "identyfikator publiczny", który możesz dołączyć do OTP i wysłać do serwera, aby sprawdzić, czy wysyłanie aplikacji jest rzeczywiście tym, które dostarczyłeś. Wymaga to zmapowania "public-id" na "resident-id" na serwerze, a następnie użycie "provisioned-id" w ten sam sposób w generowaniu OTP.

Co więcej, można dodać logikę, aby jednorazowo zabezpieczyć kombinację OTP + "public-id". Zapobiegnie to powtórce ataków na wypadek, gdyby ktoś tylko powąchał i ponownie wysłał to samo żądanie do twojej usługi internetowej.

Mam nadzieję, że to daje pewien pomysł.

Ujjwal

0

można zobaczyć artykuły

a to Blackberry kSoap2 & Soap Header bardzo przydatna

+0

Nie jestem pewien, czy rozumiem twoją odpowiedź.W tej chwili używam standardowego http pobrać, aby pobrać dane z usługi internetowej. –

+0

http://stackoverflow.com/questions/1048310/how-to-call-a-net-web-service-from-android Możesz zobaczyć to pytanie – acebisli

+0

Doskonale rozumiem, jak wywołać mój webmethod, moja aplikacja już to robi . Chcę tylko wiedzieć, jak zabezpieczyć połączenie przed kradzieżą danych! –

Powiązane problemy