Para essas questões, tentei resolver desenvolvendo uma lib js, porém é apenas para dados sensiveis que não preciso gerenciar/tratar/buscar no servidor.
proposta é criptografar todos os dados sensivels para o servidor, somente o front tendo acesso, com a chave do usuário.
https://github.com/gmasson/LaCryptJS
Muito legal o projeto, valeu por compartilhar! Dei uma olhada no LaCryptJS e a premissa de manter a chave apenas no front-end é exatamente o que busco com o TooliSafe.
Essa questão de 'não tratar os dados no servidor' é justamente o grande divisor de águas. No meu caso, como o TooliSafe é focado em arquivos e textos locais (Local-first), eu consigo evitar esse problema do servidor, mas ganho o desafio de gerenciar a performance da derivação de chave (Argon2/PBKDF2) direto no dispositivo móvel.
No LaCryptJS, como você tem lidado com o tempo de derivação de chaves no navegador? Pergunto porque em dispositivos mobile mais simples, o Argon2 às vezes pode ser pesado para o usuário.
Vou baixar sua lib para estudar como você estruturou a interface de criptografia. Parabéns pela iniciativa de código aberto!
Sem querer me meter mas já me metendo, entendo que para gerar chaves privadas basta uma quantidade aceitável de dados aleatórios e uma função hash. O Teuecrypt fazia você andar aleatoriamente com o mouse por diversos segundos para gerar os bits aleatórios. Em um dispositivo móvel você pode capturar áudio por alguns segundos e pegar o bit menos significativo das amostras, ou fazer o mesmo com uma foto, ou medir o tempo entre digitação de teclas (esse será mais difícil... texto longo).