A classe
EncryptedLocalStore
(ELS) oferece um mecanismo de armazenamento criptografado que você pode usar como um pequeno cache para os dados privados de um aplicativo. Os dados de ELS não podem ser compartilhados entre aplicativos. O objetivo do ELS é permitir que um aplicativo armazene com facilidade itens criados, como credenciais de login e outras informações privadas. Os dados de ELS não devem ser considerados permanentes, conforme é descrito em "Limitações do armazenamento local criptografado" e em "Melhores práticas" abaixo.
Você pode querer utilizar o armazenamento local criptografado para colocar em cache informações que precisam ser protegidas como, por exemplo, credenciais de login para serviços web. O ELS é apropriado para armazenar informações que precisam ser mantidas e forma particular. No entanto, ele não protege os dados contra outros processos executados da mesma conta de usuário. Por esse motivo, ele não é apropriado para proteger dados secretos de aplicativos como, por exemplo, informações de DRM e chaves de criptografia.
Em plataformas de computação pessoal, o AIR usa DPAPI no Windows, KeyChain no Mac OS e no iOS e KeyRing ou KWallet no Linux para associar o armazenamento local criptografado a cada aplicativo e usuário. O armazenamento local criptografado usa a criptografia AES-CBC de 128 bits.
No Android, os dados armazenados pela classe EncryptedLocalStorage não são criptografados. Em vez disso, os dados são protegidos pela segurança em nível de usuário fornecida pelo sistema operacional. O sistema operacional Android atribui um ID de usuário separado para cada aplicativo. Os aplicativos podem acessar somente seus próprios arquivos e arquivos criados em locais públicos (tais como cartões de armazenamento removíveis). Observe que nos dispositivos raiz do Android, os aplicativos que operam com privilégios de raiz PODEM acessar os arquivos de outros aplicativos. Dessa forma, em um dispositivo enraizado, o armazenamento local criptografado não fornece um nível muito alto de proteção de dados como ocorre em um dispositivo não-enraizado.
As informações no armazenamento local criptografado estão disponíveis apenas a conteúdo de aplicativos AIR na caixa de proteção de segurança do aplicativo.
Se você atualizar um aplicativo do AIR, a versão atualizada mantém o acesso dos dados existentes no armazenamento local criptografado, a não ser que:
-
Itens adicionados com o parâmetro
stronglyBound
definido em
true
-
As versões existentes e atualizadas são publicadas com antecedência no AIR 1.5.3 e a atualização é assinada com uma assinatura de migração.
Limitações do armazenamento local criptografado
Os dados no armazenamento local criptografado são protegidos pelas credenciais da conta de sistema operacional do usuário. Outras entidades não podem acessar os dados no armazenamento a menos que possam fazer login como aquele usuário. No entanto, os dados não ficam protegidos contra o acesso de outros aplicativos executados por um usuário autenticado.
Como o usuário deve ser autenticado para que esses ataques funcionem, os dados privados do usuário ainda estão protegidos (a menos que a própria conta do usuário esteja comprometida). No entanto, os dados que o seu aplicativo deseja manter em segredo, como as chaves usadas para licenciamento ou o gerenciamento de direitos digitais, não estão seguros. Assim, o ELS não é um local adequado para armazenar essas informações. Isto é somente um local apropriado para armazenar dados particulares do usuário como, por exemplo, senhas.
Os dados no ELS podem ser perdidos por diversos motivos. Por exemplo, o usuário pode desinstalar o aplicativo e excluir o arquivo criptografado. Ou o ID do publicador pode ser alterado como resultado de uma atualização. Dessa forma, o ELS deve ser tratado como um cache particular e não um armazenamento de dados permanente.
O parâmetro
stronglyBound
foi descontinuado e não deve ser definido como
true
. Nenhuma proteção adicional é fornecida aos dados se o parâmetro for definido como
true
. Ao mesmo tempo, o acesso aos dados é perdido sempre que um aplicativo é atualizado — mesmo se o ID do publicador permanecer o mesmo.
O armazenamento local criptografado poderá ficar mais lento se os dados armazenados excederem 10 MB.
Quando você desinstala um aplicativo do AIR, o desinstalador não exclui os dados armazenados no armazenamento local criptografado.
Melhores práticas
Entre as melhores práticas para usar o ELS estão:
-
Use o ELS para armazenar dados importantes do usuário, como senhas (definindo stronglyBound como false)
-
Não use o ELS para armazenar os segredos dos aplicativos como chaves de DRM ou tokens de licenciamento.
-
Fornece uma forma de seu aplicativo recriar os dados armazenados no ELS se os dados do ELS forem perdidos. Por exemplo, ao solicitar que o usuário digite novamente as credenciais de conta quando necessário.
-
Não utilizar o parâmetro
stronglyBound
.
-
Se você definir o parâmetro
stronglyBound
como
true
, não migre os itens armazenados durante uma atualização. Em vez disso, recrie os dados após a atualização.
-
Somente armazene quantidades relativamente pequenas de dados. Para grandes quantidades de dados, utilize o banco de dados SQL do AIR criptografia.
Inclusão de dados no armazenamento local criptografado
Use o método estático
setItem()
da classe EncryptedLocalStore para armazenar os dados no armazenamento local. Os dados são armazenados em uma tabela de hash, usando sequências de caracteres como chaves, com os dados armazenados como matrizes de bytes.
Por exemplo, o código a seguir armazena uma sequência de caracteres no armazenamento local criptografado:
var str:String = "Bob";
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(str);
EncryptedLocalStore.setItem("firstName", bytes);
O terceiro parâmetro do método
setItem()
, o parâmetro
stronglyBound
, é opcional. Quando este parâmetro está definido em
true
, o armazenamento local criptografado associa o item armazenado ao aplicativo aos bits e à assinatura do aplicativo do AIR:
var str:String = "Bob";
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(str);
EncryptedLocalStore.setItem("firstName", bytes, false);
Para um item armazenado com
stronglyBound
definido como
true
, as chamadas subsequentes a
getItem()
apenas são bem-sucedidas se o aplicativo do AIR de chamada for idêntico ao aplicativo de armazenamento (se nenhum dado nos arquivos do diretório do aplicativo tiver sido alterado). Se o aplicativo do AIR de chamada for diferente do aplicativo de armazenamento, o aplicativo lançará uma exceção de erro quando você chamar
getItem()
para um item fortemente ligado. Se você atualizar seu aplicativo, ele não será capaz de ler os dados fortemente ligados previamente gravados no armazenamento local criptografado. A configuração de
stronglyBound
como
true
em dispositivos móveis é ignorada; o parâmetro sempre é tratado como
false
.
Se o parâmetro
stronglyBound
estiver definido como
false
(o padrão), só o ID da editora precisa se manter igual para que o aplicativo leia os dados. Os bits do aplicativo podem mudar (e precisam ser atribuídos pelo mesmo editor), mas não precisam ser exatamente os mesmos bits que eram no aplicativo que armazenou os dados. Aplicativos atualizados com o mesmo ID do publicado do original podem continuar a acessar os dados.
Nota:
Na prática, configurar
stronglyBound
para
true
não adiciona nenhuma proteção adicional aos dados. Um usuário mal intencionado ainda pode alterar um aplicativo para obter acesso a itens gravados no ELS. Além disso, os dados são protegidos de ameaças externas, mesmo se
stronglyBound
estiver definido em
true
ou
false
. Por esses motivos, não encorajamos definir
stronglyBound
em
true
.