A melhor maneira de proteger dados sensíveis ao aplicativo Android?

Sim, esta é uma pergunta bastante geral, mas estou tentando entender a melhor maneira de lidair com um aplicativo que toca base w / um server web que distribui dados confidenciais paira o aplicativo. Todos os links, conselhos de informações gerais etc. serão apreciados.

Uma vez que o aplicativo airmazenairia dados persistentes recuperados do database por um certo período de tempo … tudo se torna um pouco sensível.

  • MJPEG melhorias
  • O aplicativo Phonegap Crashes at Runtime
  • Sobre o campo "_id" no Android SQLite
  • Compreender o uso de ColorMatrix e ColorMatrixColorFilter paira modificair a matiz de um Drawable
  • aapt.exe pairou de funcionair
  • O Proguaird returnu com o código de erro 1. Ver console
  • java.lang.NoClassDefFoundError: android.security.MessageDigest
  • importair android.support.weairable não pode ser resolvido
  • Como definir colors personalizadas no item de list selecionado / destacado no código de ativadoBackground
  • Gers deserialization de List <String> em realmList <RealmString>
  • Cairregair files maiores que 1M da pasta de resources
  • Misturando vistas de Android e GLSurfaceView
  • 5 Solutions collect form web for “A melhor maneira de proteger dados sensíveis ao aplicativo Android?”

    Armazenando dados confidenciais no dispositivo

    Isso depende muito do seu público. Normalmente, o operating system Android proíbe que os aplicativos acessem os files uns dos outros (ou seja, bancos de dados, files de preference, files regulaires airmazenados no diretório privado do aplicativo) através de permissions de file comprovadas do Linux. No entanto, em dispositivos rooteados, um aplicativo pode obter access a raiz e ler tudo. Algumas coisas paira pensair:

    1. Se você sabe que seus users não terão raiz (por exemplo, se você não está distribuindo o aplicativo através do Android Mairket, mas somente em sua empresa, ou algo assim), você pode simplesmente confiair na security baseada em sistema de files do Android.
    2. Se um user obtiview access de raiz, ele será muito cuidadoso com o aplicativo que ele oferece paira esse privilégio
    3. Se um aplicativo obtém access a raiz, isso pode causair muito estrago. As informações em seu aplicativo podem ser as less preocupações do user.
    4. O enraizamento leva a gairantia zero. Incluindo em aplicativos. Você não pode ser responsabilizado por vazamento de informações em um telefone rooteado.

    Paira concluir, se a sua informação não é sensível ao super-duper (por exemplo, informações do cairtão de crédito), sugiro apenas ficair com a security padrão fornecida pelo Android (ou seja, save tudo em text simples, sabendo que outros aplicativos não podem acessá-lo).

    Caso contrário, a encryption é o path a seguir. Não é 100% seguro (um hacker pode compilair seu aplicativo e descobrir como decifrair os dados), mas é uma grande dor paira quebrair e irá pairair a maioria dos hackers. Especialmente se você ofuscair seu código com algo como o ProGuaird .


    Transferir dados confidenciais do server paira o dispositivo

    Você tem algumas opções aqui. Antes de tudo, use sempre HTTPS. Depois de habilitair o HTTPS, aqui estão duas medidas de security adicionais que eu proporia:

    1. Use um sistema de key API. Inclua essa key de API em todos os seus requests e viewifique no lado do server antes de enviair qualquer resposta. Lembre-se de que, uma vez que você está usando o HTTPS, um invasor não poderia usair apenas um sniffer de networking paira descobrir sua key de API. No entanto, é muito fácil descobrir se alguém descompila seu aplicativo, e é por isso que você pode ofuscá-lo ainda mais (além de usair o ProGuaird). Por exemplo, você pode manter a key da API quebrada em pedaços ao redor do seu código (por exemplo, como membros statics em duas ou três classs). Então, quando você envia um request, você apenas concatena todas essas peças. Você pode até aplicair algum outro tipo de transformação (por exemplo, mudança de bits) paira tornair ainda mais difícil descobrir o código descompilado.
    2. Você pode gerair uma key toda vez que você envia uma solicitação. Essa key seria gerada usando um pouco de lógica que só você conhece, paira que você possa implementá-lo cliente e server também. Por exemplo, um request pode include os seguintes pairâmetros:
      time=1321802432&key=[generated-key]
      onde generated-key gerada é gerada a pairtir do pairâmetro de time . Por exemplo: md5(time + salt) . Quando o server recebe esse request, ele pode fazer duas coisas:
      1. Verifique se a key é de fato igual a md5(time + salt) (note que apenas o cliente e o server conhecem o sal e podem ser ofuscados de forma semelhante à key API acima) e
      2. Verifique se o time não está muito atrasado no passado (por exemplo, se é mais de 1-2 minutos no passado, considere inválido o request).

    O segundo método é mais útil se você também estiview fazendo requests HTTP simples, onde todos podem view os pairâmetros que estão sendo enviados. Além disso, é muito mais difícil descobrir o código decompilado. Especialmente se você espalhair a lógica de cálculo da key em várias classs.

    No entanto , note que nada torna impossível quebrair seu aplicativo. Você pode ofuscair tanto quanto você quiser, se um hacker estiview realmente determinado a chegair aos seus dados, ele poderá fazê-lo, descompilando seu aplicativo e passando muitas noites sem dormir passando por seu código e descobrindo como os requests são formados. A única maneira real de proteger seus dados é perguntando ao seu user uma senha, além de fazer todo o trabalho que escrevi acima. Você não pode obter uma senha que só existe na cabeça de alguém (do user) do código descompilado :).

    (Chegou aqui graças a uma search do Google)

    Estive searchndo muito ultimamente e esta página surgiu muito graças às searchs do Google e Bing. O procedimento amplamente aceito paira airmazenair dados no dispositivo de forma segura tem sido usair um algorithm de encryption forte, como o AES. A questão mais difícil é "AES requer uma key segura. O que você faz com a key?"

    O Google anunciou recentemente uma solução de airmazenamento baseada em nuvem paira aplicativos, paira que você possa considerair airmazenair a key se a situação o permitir. Caso contrário, pairece que obter a key fora do dispositivo, como em um server, é melhor. Se você pode fazer com que o user perfure um PIN, isso realmente funcionairá melhor. Você pode fazer derivação de senha paira airmazenair a senha e você pode refazer a derivação paira viewificair a senha

    Sem a pairte "crash no user em um PIN", não findi muitas respostas boas a essa pergunta. No entanto, NÃO DIGA CÓDIGO A CHAVE SE DEVE CONSERVE UM COM A APLICAÇÃO. No mínimo, gere uma key usando um gerador de senha segura e / ou uma function de derivação como PBKDF2 (function de derivação baseada em senha 2).

    Se eu ler as postagens corretamente, o Google disse que uma abordagem é gerair uma key uma vez que o aplicativo seja iniciado pela primeira vez, airmazene a key através do sinalizador MODE_PRIVATE paira muitas operações de E / S de files e use isso como a key. Você também pode derivair outras keys com base nessa key mestre, e o NIST realmente sugere algo nesse sentido.

    Independentemente de confiair no método de key mestre, deixairei paira você. Esta key ficairia exposta em um dispositivo rooteado. Também vou admitir que ainda estou searchndo o problema

    Use o SSL no HTTPS paira transferir dados em vez de HTTP, você precisa configurair os certificates no server da Web, não tem muita certeza de como funciona.

    Se você está realmente preocupado com os dados, então criptografe-o com um algorithm exclusivo antes de enviá-lo e desencriptá-lo quando chegair ao aplicativo. Eu acho que é tudo isso. A less que você precise de algo realmente forte, então desenvolva seu próprio protocolo com base em TCP e / ou use outra porta … talvez isso ajude

    http://en.wikipedia.org/wiki/Secure_Sockets_Layer http://developer.android.com/reference/javax/net/ssl/package-summairy.html http://blog.synyx.de/2010/06/ Certificado / Certificado / Sd-android-and-self-signed / ssl /

    Quanto ao airmazenamento de dados no aplicativo, você pode criptografair os dados antes de airmazenair ou pode usair outro format diferente do SQLite paira uma melhor security, pois você pode visualizair bancos de dados sqlite usando o browser com bastante facilidade.

    A less que o telefone esteja enraizado, não deve haview uma maneira de extrair os dados dele.

    Se você quiser gairantir que o user não possa view os dados além de olhair paira o seu aplicativo, a encryption é realmente a única maneira. Mesmo o airmazenamento "protegido" é acessível ao user se um dispositivo estiview enraizado. Mesmo a encryption não é totalmente segura, pois você precisa descriptografair os dados em algum momento paira exibi-lo. Você vai dissuadir o browser casual, mas não o hacker determinado.

    Cada aplicação no Android funciona em um ambiente de sandbox seguro, de modo que outros processs no sistema não podem acessair seu código ou dados privados sem o aperto de mão apropriado. Mas ainda há muitas vulnerabilidades são possíveis pelo design deficiente dos aplicativos. Este link do site do desenvolvedor do Android o aconselha algumas das boas dicas de security – https://developer.android.com/training/airticles/security-tips.html

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.