Postura de segurança
Feito para confiança, não para aparência
Não somos uma empresa de segurança, mas o ConKarma manuseia o tipo de dados — crianças, parceiros, rituais diários — que exige respostas honestas sobre como os protegemos. Esta página é a versão sem maquilhagem.
Última revisão:
Como funciona o início de sessão
Tratamos a tua palavra-passe como segredo que nunca vemos em texto plano, guardamos o hash mais forte que a especificação dá, e rodamos refresh tokens para que uma cookie roubada não sobreviva à sessão de onde veio.
- As palavras-passe são hasheadas com argon2id (perfil RFC 9106 m=19 MiB). Hashes bcrypt antigos são atualizados de forma transparente no próximo início de sessão — sem repor obrigatório.
- As sessões usam famílias rotativas de refresh tokens. Se um token roubado for reproduzido, toda a família é invalidada e o dispositivo legítimo tem de re-autenticar — sem comprometimento silencioso.
- Bloqueio de conta configurável após tentativas falhadas repetidas. Limpado automaticamente no primeiro início correto, para que um erro de digitação não te tranque fora.
- O Iniciar sessão com a Apple e o Iniciar sessão com a Google usam OpenID Connect direto — o goia_api liga-se à Apple e à Google diretamente, sem qualquer intermediário de autenticação de terceiros no percurso. Recebemos apenas o identificador do fornecedor de origem, o seu email e o indicador de verificação — nunca a sua palavra-passe do fornecedor.
Segurança no início de sessão
Cada início de sessão passa por um segundo fator. Cada início num novo dispositivo avisa-te. Os pais ficam a par para menores de 18 sem que mais nada se infiltre.
- Autenticação em duas etapas em cada início de sessão: código de 6 dígitos por e-mail, janela de 30 dias para dispositivos de confiança.
- Alerta por e-mail em tempo real quando a conta é acedida a partir de um novo dispositivo: tipo, cidade e país aproximados, data/hora. Um toque revoga o dispositivo e força a mudança de palavra-passe.
- Os inícios de sessão de menores de 18 a partir de novos dispositivos também avisam os membros com papel de pai ou mãe na célula. Transparente: os menores veem em Definições quais pais estão ligados.
- Códigos de recuperação: 8 códigos de uso único na primeira configuração, acessíveis em Definições → Segurança, regeneráveis a pedido. Via de recuperação quando se perde o acesso ao e-mail.
- Armazenamento de palavras-passe: argon2id, o padrão da indústria memória-dura. Os tokens de dispositivo de confiança são separados dos tokens de sessão.
- Verificação com limite: 5 códigos falhados desencadeiam bloqueio de 15 minutos.
Quando algo parece estranho
Se um início de sessão chegar de um país que não vimos na tua conta nos últimos 30 dias, escrevemos-te. O email tem um "não fui eu" de um clique que revoga a sessão e leva-te direto à reposição da palavra-passe.
- Alertas por email de localização desconhecida (um por país por janela de 30 dias — uma viagem não te spamma).
- Lista de sessões ativas com revogação por dispositivo a partir da app. Podes desligar um telemóvel perdido sem mudar a palavra-passe.
- Detalhe de inícios falhados (timestamp e código de país apenas — nunca IP em bruto) visível no log de segurança da app.
Apenas apps reais
O tráfego móvel é atestado como proveniente de uma instalação real do ConKarma num dispositivo real. Tentativas de curl-contra-a-API são suavemente rejeitadas, o que uma superfície de API honesta deve fazer.
- Firebase App Check no iOS e Android. O token é obrigatório em cada chamada de API a partir de móvel.
- TLS pinning móvel via o manifesto assinado em /.well-known/mobile-pins.json. Os novos pins são assinados com uma chave offline e rodados com uma janela de sobreposição de seis semanas, para que uma atualização não tranque ninguém fora.
As funcionalidades para adultos estão vedadas à analítica
O ConKarma tem duas zonas: uma zona Serene (tudo familiar) e uma zona Ember (as funcionalidades 18+). As páginas Ember deliberadamente não disparam eventos de analítica de terceiros. Recolhemos contadores Prometheus agregados no servidor para capacidade e uptime; nada mais.
- As superfícies para adultos (desafios, desejos, fantasias, diários íntimos, o cofre privado) nunca carregam Google Analytics.
- Desbloqueio biométrico é necessário para entrar em superfícies Ember na app. O sistema expira e re-bloqueia se mudares de app.
- O guardião de capturas oculta o conteúdo Ember do seletor de apps do SO e de qualquer overlay de gravação de ecrã.
- Ativação da zona adulta por dispositivo: LIGADA por padrão no dispositivo principal, DESLIGADA em todos os outros. A ativação em cada dispositivo é sempre explícita, e a verificação do lado do servidor falha de forma fechada (fail-closed).
- Nova solicitação por inatividade: a trava biométrica cai após 5 minutos de inatividade dentro do Ember, ou 30 segundos em segundo plano. Ambos os limites são configuráveis em Configurações → Privacidade.
- Zeragem do cache em memória: ao cruzar do Ember de volta para o Serene (ou colocar o app em segundo plano), toda imagem em cache é descartada da memória — defesa em profundidade contra ferramentas de inspeção de memória.
- Exclusão de Spotlight, Apple Intelligence e AppIntents: nenhum conteúdo adulto é doado ao Spotlight, ao LLM no dispositivo, ao AppIntents, ao Smart Stack ou a widgets da tela de bloqueio.
- Acesso de administrador de dois olhos: nenhuma pessoa na XTZ Group pode ler o conteúdo da zona adulta unilateralmente — toda substituição exige aprovação assinada de um segundo administrador, registrada em um log de auditoria imutável.
- Retenção adulta configurável de 3 anos: as linhas da zona adulta são excluídas automaticamente após 3 anos por padrão. A janela é configurável pelo usuário (de 90 dias a 10 anos) em Configurações → Privacidade. Exclusão definitiva assim que a janela se esgota.
- Controles de backup do iCloud e exportação GDPR: dois interruptores opt-in em Configurações → Privacidade mantêm o conteúdo adulto fora dos backups do dispositivo e fora da exportação de dados por padrão — para que backups ou exportações compartilhados acidentalmente não o exponham.
Infraestrutura de consentimento + ferramentas de conflito
Conversas difíceis e consentimento na zona adulta passam por superfícies estruturadas e curadas — nunca por um pipeline de IA. Os dados por trás delas permanecem locais ou privados do casal.
- Ferramentas de conflito — pipeline de IA excluído: cada fluxo de reparação entre irmãos, casal e intergeracional é conteúdo curado + formulários estruturados. Não roteamos nada disso através de um LLM.
- Infraestrutura de consentimento — Ember: o documento de limites, o binding de palavra de segurança e os check-ins de aftercare vivem sobre primitivas E2E de Ember. O documento de limites nunca chega ao nosso pipeline de IA.
- Ocultação pessoal + controles de nível de célula: o BE não exclui os dados subjacentes quando você oculta uma funcionalidade. Qualquer operação de flag permanente requer um gate de dois administradores.
Infraestrutura de consentimento Ember
Superfícies de nível adulto não são lançadas com uma caixa de seleção genérica 'Concordo' e chamam isso de consentimento. O Ember é estruturado em torno de três primitivas essenciais — o documento de limites, a safeword e os check-ins de cuidado pós-jogo — que vivem no mesmo par de chaves E2E do resto da zona adulta. Linguagem madura em todo lugar; autonomia, não paternalismo.
- Documento de limites: cada parceiro constrói e edita o seu próprio, visível apenas pelo outro parceiro na mesma célula de casal. Nunca chega ao nosso pipeline de analytics; nunca lido por nenhuma IA; nunca replicado no servidor além do blob criptografado.
- Vinculação da safeword: uma frase de safeword compartilhada pelo casal que imediatamente faz todas as superfícies Ember voltarem para Serene + escreve uma linha de log privada para o casal. As ativações são visíveis apenas para os dois parceiros; os operadores da XTZ Group não podem lê-las.
- Check-ins de cuidado pós-jogo: agendados por qualquer parceiro após uma sessão Ember, opt-in por parceiro, as respostas ficam privadas para o casal. Sem contador de engajamento, sem sequência, sem insistência.
- Linguagem madura: o texto e os prompts tratam leitores adultos como adultos. Não infantilizamos as superfícies com eufemismos; também não recorremos a choque para parecer transgressor.
Correspondência de consentimento duplo-cego
Quando dois parceiros exploram quais categorias de fantasia se sobrepõem, a correspondência roda totalmente no dispositivo com dois invariantes estruturais que não quebramos: nunca-revelar-não (se qualquer parceiro toca não, nenhum vê esse fato) e zero-egress AI (sem modelo em nenhum ponto do caminho de inferência).
- Invariante nunca-revelar-não: um par sim/sim aparece na lista de correspondência compartilhada. Qualquer outra combinação (sim/não, não/sim, não/não) não retorna nada — nenhum parceiro vê quem disse não, e nenhum vê que o outro foi sequer mostrado o prompt. Este é um design estrutural anti-pressão, não uma configuração que pode ser desativada.
- Invariante zero-egress AI: o cálculo de correspondência é uma interseção de conjuntos local. Sem inferência de modelo, sem pesquisa de embedding, sem pontuação de IA de categorias ou pares. O conjunto de categorias em si é conteúdo editorial selecionado, não gerado.
- Resultados privados para o casal: a lista de correspondência é criptografada de ponta a ponta para o par de chaves compartilhado do casal. No servidor vemos contagens (planejamento de capacidade) mas nunca as próprias categorias.
- Invariantes auditáveis: os dois invariantes acima são aplicados no caminho de código no dispositivo sem toggles e sem substituição de administrador. Um operador de plataforma não pode adicionar telemetria nesta superfície — não há telemetria para adicionar.
Conformidade com o Take It Down Act — canal público de avisos
O TAKE IT DOWN Act federal (2025) exige que plataformas que hospedam conteúdo de usuários ajam sobre solicitações de remoção de imagens íntimas não consensuais dentro de 48 horas. O canal público de avisos + procedimento do ConKarma está publicado em /legal/takedown-notice; esta seção é o resumo da postura de segurança.
- Canal: legal@conkarma.app (linha de assunto Aviso Take It Down / Aviso DMCA / Urgente — Relatório CSAM).
- Compromisso: SLA de 48 horas desde o recebimento de uma solicitação válida até a remoção ou desativação do acesso.
- Cobertura: NCII (deepfakes reais ou gerados por IA), direitos autorais DMCA, CSAM (prioridade elevada + relatório NCMEC) e relatórios mais amplos de conteúdo ilegal.
- Contra-aviso: caminho de contra-aviso DMCA pelo mesmo canal; janela de restauração estatutária de 10 a 14 dias úteis na ausência de ordem judicial.
- Auditoria: cada aviso + cada ação tomada é registrado e preservado pelos períodos exigidos por lei. Avisos de má-fé podem expor o remetente à responsabilidade civil nos termos do Act, DMCA §512(f) e nossos Termos.
Dial regulatório por estado
Onde estados dos EUA ou outras jurisdições aprovam leis que restringem o que uma plataforma pode oferecer (regimes de verificação de idade, restrições de categoria de conteúdo, obrigações de manutenção de registros), ajustamos o comportamento regionalmente em vez de recuar do mercado. O tradeoff honesto: a lei de um estado molda como a superfície parece para usuários naquele estado, não o que acreditamos ser o design de produto correto.
- Detecção de região: baseada no país declarado pelo usuário + (para os EUA) o estado configurado em Configurações, não apenas por geolocalização de IP. Os usuários podem substituir a região inferida se estiver errada.
- O que é ajustado: fluxos de verificação de idade (estados com estilo KOSA), restrições de conteúdo adulto, janelas de retenção onde a lei estadual as determina e texto de divulgação onde o estado exige redação específica.
- O que NÃO é ajustado: postura de criptografia de ponta a ponta, os invariantes de zero-egress AI, o padrão COPPA para menores de 13 anos e o invariante de tabela de nunca-misturar-linhas-de-conteúdo-adulto. Esses são inegociáveis entre jurisdições.
- Transparência: a configuração regional aplicada à sua conta é visível em Configurações → Privacidade → Postura regional. Se você acha que está errada para sua jurisdição, envie um Aviso Take It Down ou escreva para legal@conkarma.app.
As crianças não são uma alavanca de crescimento
As contas de menores de 13 passam por um fluxo verificável de consentimento parental antes de existirem. Não mostramos publicidade em contas de crianças, ponto. Não vendemos dados de crianças, não os partilhamos para publicidade, e não os usamos para segmentar.
- Consentimento parental verificável conforme COPPA §312.5 (verificação assinada por cartão de crédito, com via alternativa para lares sem cartão).
- Sem publicidade de terceiros de qualquer tipo em contas de menores de 13.
- Os pais podem ver, exportar e apagar os dados da conta do filho a qualquer momento a partir da app.
A confiança vem da Célula, não de nós
O ConKarma é um produto de círculo fechado. Não há perfis públicos, não há grafo de seguidores, e não há forma de descobrir estranhos. A maior parte da moderação acontece porque tu e as pessoas da tua Célula já se conhecem e confiam. Onde o modelo precisa de ajuda, temos um fluxo de reporte e uma fila de moderação com humano dentro.
- As Células são fechadas por defeito. Sem descoberta pública, sem perfil público, sem sugestões amigo-de-amigo.
- Fluxo de reporte de utilizador em cada superfície de conteúdo, encaminhado para uma fila de moderação operada por humanos.
- A varredura por hash de CSAM conhecido está rastreada como implementação conhecida-e-pendente, com gatilhos explícitos de revisão quando passarmos a um perfil de armazenamento de média que o exija. Não o reivindicaremos antes de ser real.
O que guardamos, onde, e como recuperar
Sobre-documentamos isto em /privacy e /legal/subprocessors, mas a versão curta relevante para a segurança é: cifrado em repouso, armazenado onde as SCC cobrem, exportável e apagável a pedido, e não guardamos mais do que o necessário.
- Controlos de exportação e apagamento GDPR, CCPA e Quebec-25 dentro da app — não atrás de um ticket de suporte. O apagamento tem uma janela de tolerância de 30 dias em soft-delete caso mudes de ideias.
- Cifração em repouso na base Postgres e no armazenamento de objetos (infraestrutura gerida pela Supabase).
- Não armazenamos IPs em bruto em nenhuma superfície visível ao utilizador. A lista de sessões ativas mostra apenas o código de país com 2 letras; IPs em bruto existem brevemente em linhas de eventos de segurança para uso forense sob retenção curta.
Se encontrares algo, diz-nos
Ainda não temos um bug-bounty pago — é uma lacuna real e avançaremos quando justificar o tempo operacional necessário. Entretanto agradecemos reportes de boa fé e acusaremos receção em cinco dias úteis.
Email: security@conkarma.app
- Escreve para security@conkarma.app com os detalhes. Chave PGP a pedido.
- Comprometemo-nos a acusar receção em 5 dias úteis e resposta substancial em 30 dias.
- Divulgação coordenada: janela por defeito de 90 dias antes da divulgação pública, prolongável por acordo mútuo.
- Não tomaremos ações legais contra investigação de segurança de boa fé que siga divulgação responsável.