Privacy First Design: Compromisso Paranóico com Aplicativos de Memorandos
Esta página é uma tradução automática do original em japonês. Ler o original em japonês
1. Por que a privacidade é importante em aplicativos de memorandos
Ideias de trabalho, rascunhos pessoais, registros diários. O aplicativo de memorando coleta informações antes de mostrá-las às pessoas. Tão importante quanto ser capaz de escrever rapidamente, é importante entender onde é armazenado e para onde é enviado.
Este artigo explica a criptografia, o cache de comunicação, a exibição da tela, o registro de diagnóstico e a análise de uso no terminal separadamente. Uma proteção não garante a proteção de outras rotas.
2 A função de ocultar notas automaticamente no switcher de aplicativos não está ativada
iOS usa a tela como um instantâneo depois que o aplicativo se move para o fundo. O Apple orienta você a remover informações confidenciais na tela ao passar para o fundo.
Na fonte de 5.8.17 confirmado, sceneWillResignActive e sceneDidEnterBackground salvam o rascunho e não chamam o processo de exibição de sobreposição de privacidade. A função de exibição anterior permanece, mas não é um caminho que funcione como uma proteção válida.
As notas exibidas podem permanecer na imagem do switcher de aplicativos. Criptografar Outbox não oculta a imagem da tela. Corrija a explicação de "sempre oculte o conteúdo do memorando" na versão antiga deste artigo.
3. URLFêmera Sessão: Reduza o armazenamento em disco em caches de comunicação
O padrão URLSession armazena cache, cookies e informações de autenticação no disco. Este é um recurso útil para aplicativos gerais, mas é desnecessário para aplicativos de memorando e pode ser um risco.
O fato de o cache de comunicação permanecer no terminal significa que há vestígios no disco do qual URL foi acessado e quando. Se um cookie for salvo, isso significa que as informações da sessão permanecerão no terminal.
Este aplicativo usa URLSessionConfiguration.ephemeral.
private let session: URLSession = {
let config = URLSessionConfiguration.ephemeral
config.httpCookieAcceptPolicy = .never
config.httpShouldSetCookies = false
config.urlCache = nil
return URLSession(configuration: config)
}()
- Sem cache de disco:Não salve o cache desta sessão de URL no disco
- Desative o uso de cookies:Esta sessão de URL não aceita cookies e não define a solicitação
- Cache URL desativado:Defina o próprio armazenamento de cache para
nil - Configuração que não usa armazenamento persistente:Não salva as informações da sessão da URLSession no disco
Esta é uma proteção relacionada ao cache URLSession, etc., e não é uma função que elimina eventos de uso que o aplicativo armazena e transmite separadamente ou registros de transmissão do lado do servidor. A associação pelo identificador da análise de uso também é realizada separadamente dessa configuração.
4. Faixa de saída do registro de medição de desempenho
PerformanceLogger é cercada por #if DEBUG. Em compilações onde o DEBUG não está definido, o processamento de saída de log deste registrador não está incluído.
O logError deste registrador registra o tipo, não a instrução detalhada do erro. Por exemplo, use o tipo URLError e não libere o localizedDescription como está, que pode conter caminhos de arquivo e entrada do usuário.
Por outro lado, não é um mecanismo que automaticamente torna inofensivos todos os nomes de eventos e strings adicionais passadas para logEvent. É necessário não passar o endereço de e-mail, o corpo do memorando ou as informações de autenticação para o chamador.
Esta explicação não deve ser ampliada para uma garantia de ausência de logs em todo o aplicativo, nos SDKs externos ou no sistema operacional. O envio de eventos de uso próprio e AppsFlyer estão ativos como mecanismos separados. O escopo da coleta é explicado nas perguntas frequentes sobre análise de uso deste artigo e na política de privacidade.
5 AES-GCM Criptografia Outbox Faixa de Proteção
Memorandos aguardando para serem enviados são gerenciados na fila chamada Outbox no terminal. Ao salvar, use o CryptoKit do Apple para criptografar com o AES-GCM. A nova chave de criptografia é gerada com bits 256.
Mantenha a chave no Chaveiro e use kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Com essa configuração, você pode acessar desde o primeiro desbloqueio após a reinicialização até a próxima reinicialização, e a chave não será transferida ao restaurar o backup para outro terminal. O aplicativo lê a chave para criptografia e descriptografia.
Esta é a proteção dos dados armazenados, para não ocultar a tela exibida ou garantir a segurança de todas as violações do terminal. Antes de alterar o modelo, certifique-se de que as notas necessárias chegaram ao endereço de armazenamento.
Ao usar o envio de e-mail, o texto é processado pelo nosso Relay API e pela plataforma de entrega, e permanece como um e-mail na caixa de entrada. Criptografia no terminal não significa criptografia de ponta a ponta (E2EE) para entrega de correio. Os detalhes são explicados em Política de Privacidade e Caminho de Dados.
Para filas de espera, consulte Explanação da arquitetura Outbox.
6. Proteção do corpo do memorando e do papel do SDK externo
iOS No aplicativo, use CryptoKit para criptografar o corpo do memorando, Chaveiro para armazenamento de chaves e URLSession para enviar o texto. Network.framework monitora o status da conexão, e o BackgroundTasks é responsável por agendar a transmissão em segundo plano.
Por outro lado, o aplicativo também usa um SDK externo. O GoogleSignIn e o Firebase Authentication são usados para inserir automaticamente e-mails arbitrários com a conta Google, e o Firebase App Check é inicializado na inicialização para proteger o back-end API. O AppsFlyer é usado para análise de aquisição e uso, e define um identificador de instalação que é comum à sua própria análise.
Mesmo que o design não inclua o corpo do memorando no item do evento, a associação de identificadores e registros de transmissão permanece. O escopo da análise de uso, incluindo o SDK, precisa ser confirmado separadamente da criptografia do texto. Itens e usos são descritos em Política de Privacidade.
7. Especifique o escopo da proteção
Criptografia no terminal, manuseio do cache de comunicação e análise de utilização têm funções diferentes. Mesmo com criptografia Outbox e URLSession efêmera, a coleção de eventos de uso não desaparece.
Valorize tanto ser capaz de deixar notas rapidamente quanto ser capaz de entender as informações adquiridas. Explique o destino, o identificador e o escopo da associação da análise de uso e revise-o de acordo com as alterações no aplicativo.
Perguntas frequentes
Referências
- Apple Desenvolvedor — Documentação CryptoKit — AES-GCM Usado para implementar a proteção de dados Outbox com criptografia
- Apple Desenvolvedor — Documentação URLSession — Segurando a privacidade com comunicação em rede por meio de uma sessão efêmera (temporária)
- Apple Desenvolvedor — Prevenção de Conexões de Rede Inseguras (Segurança de Transporte de Aplicativos) — Segurando a segurança durante a transferência de dados forçando a comunicação TLS
- Apple Desenvolvedor — Gerando Mensagens de Log a partir do Seu Código — Faixa de armazenamento de registro e manuseio de informações confidenciais
- Apple Desenvolvedor — Preparando sua interface do usuário para ser Executado em segundo plano — Instantâneos e informações na tela para alternadores de aplicativos
- Apple Desenvolvedor — Acesso às Chaves Após o Primeiro Desbloqueio, Somente Este Dispositivo — Condições de acesso à chave e restrições de migração para outros terminais