Hvordan sikrer du din Android-applikation?

Hvad er først og fremmest i din Android-smartphone? Over enhver tvivl er det datasikkerhed. Er der noget udviklingsværktøj til at implementere en pålidelig godkendelsesmetode i en Android-applikation? Hvordan kan man være sikker på, at brugerens autorisationsdata er i sikkerhed? Så sikkerhed på Android var vores emne under den seneste lokale Hackathon for et par uger siden, og her er kort, hvad vi har lært. Håber, at disse tip vil være nyttige, hvis du står over for følgende opgaver.

Fingeraftryks-ID

Fingeraftryksscanner dukkede først op på Android-enheder for længe siden, men flertallet af brugere er stadig bange for at bruge den på grund af risikoen for lækage af deres biometriske data. For at berolige dig kan vi sige, at risikoen er ekstremt ubetydelig: fra en tredjepart-app er det bare umuligt at få brugerens fingeraftryk ved hjælp af en indlejret scanner. Alle fingeraftryk til en nuværende enhed kan kun tilføjes i enhedsindstillingerne, de er krypterede, gemt sikkert lokalt og kan ikke eksporteres eller sendes uden for enheden. Så en udvikler kan ikke oprette ulovlig dactyloskopisk database og bruge den til hans egne behov.

Det eneste, en udvikler kan gøre, er at udvide FingerprintManager.AuthenticationCallback abstrakt klasse, videregive en underordnet instans til FingerprintManagers metodegodkendelse () og få besked om fingeraftryksscanning vil lykkes

cryptoObject - en forekomst af FingerprintManagerCompat.CryptoObject, der omslutter Cipher initieret med genereret nøgle og bruges til fingeraftryksgodkendelsesproces

cancellationSignal - et eksempel på CancellationSignal, der bruges til at underrette FragmentManager om, at scanningsprocessen skal afbrydes (på grund af aktivitetslivscyklus for eksempel)

AuthenticationCallbacks metoder er ikke abstrakte, så du kan bruge det, du har brug for:

Lyder ikke rigtig kompliceret, og det er det faktisk. For flere implementeringsdetaljer kan du se denne tutorial.

Ansigtsgenkendelse

Langt de fleste Android-udviklere såvel som internetsamfundet skelner ikke klart mellem "Face Detection" og "Face Recognition". Målet med den første er at registrere, om billeddelen (eller kamerarammen) faktisk er et menneskes ansigt. Og en helt anden opgave er at genkende, hvis nøjagtigt dette ansigt er. Desværre udføres ansigtsgenkendelse på Android stadig ved forskellige algoritmer til analyse af bitmap. Billedbehandling er en af ​​de mest ressourceintensive operationer, så Java er bestemt ikke det miljø, du vil bruge til dette. På Android kan kun NDK levere hurtig og effektiv genkendelsesanalyse. For at nå dette mål kan du bruge år på udvikling af din egen algoritme eller bede OpenCV om hjælp eller ethvert andet indbygget bibliotek.

Naturligvis forårsager NDK betydelige arkitektoniske begrænsninger, men der er noget at undgå indfødt kode. Der er mange tredjepartsskytjenester, der kan give ansigtsgenkendelse for dig. For eksempel Microsoft Azure. Ved at bruge det kan du foretage et API-opkald til at registrere og sammenligne ansigter i stedet for lokale beregninger - det garanterer, at genkendelse udføres uanset enhedsmodel og hardwareniveau. Og du kan pakke det lidt ind. Brug Google Mobile Vision til at udføre grundlæggende ansigtsregistrering, foretage derefter anerkendelses-API-opkald i baggrunden, tilføj nogle smarte animationer, og ingen kan gætte, at du snyder :) Men den største ulempe er, at disse tjenester kan opkræves.

Anyway bitmap-analyse er næppe så effektiv som genkendelse med brug af ekstra sensorer (f.eks. Infrarød), som Android-enheder endnu ikke har.

Stemmegenkendelse

Her er de lignende udtryksproblemer som med ansigter. Talegenkendelse handler om en genkendelse af menneskets tale for at konvertere den til char-sekvenserne. Stemme- eller højttalergenkendelse er en personlig genkendelse af stemmen. Desværre leverer Google ikke nogen værktøjer til implementering af en anden. Men der er to interessante fakta:

  • Google Assistant ved, hvordan man skelner forskellige menneskers stemmer, men denne mulighed er ikke tilgængelig for udviklere i øjeblikket.
  • Tidlige Lollipop-versioner af Android havde en funktion kaldet “Trusted Voice”, der gjorde det muligt for en bruger at låse sin enhed op ved hjælp af sin egen stemme. Men i nogle af opdateringer forsvandt denne funktion mystisk.

Jeg håber, at Google snart vil dele magien med stemmegenkendelse med udviklere. For tiden kan du bruge de samme tredjeparts tjenester.

Sikker opbevaring

Adgangskoder, session tokens, genkendelseshash-værdier - alt dette kan under ingen omstændigheder gemmes og endnu mere overføres i eksplicit form. Det er temmelig nok at bruge Cipher til datakryptering. Krypteringsmetode er op til dit valg. Men velkendte AES og RSA er stadig ekstremt sikre til brug i Android-applikationer. Med dette krypteringsniveau kan du gemme dine offentlige nøgler, selv i SharedPreferences. RSA-kryptering i modsætning til AES kræver en hemmelig nøgle, der er genereret, og SharedPreferences er ikke rigtig passende sted at gemme den. For private hemmelige nøgler leverer Android Android Keystore System, der er tilgængeligt siden API 18. Det er en særlig sikker opbevaring, og nøglen, når den først er gemt i den, kan ikke på en eller anden måde eksporteres tilbage, men den kan stadig bruges til krypterings- / dekrypteringsprocessen. Her er et simpelt eksempel på en utility-klasse, der bruger alle disse teknologier til at kryptere data:

alias - er et ID på din krypterede streng, som du kan bruge til at få adgang til den.

Nedenfor er en anden utility-klasse til at dekryptere krypterede data: