Eu sei que há muitas pergunta sobre isso, mas eu juro que eu não consegui encontrar uma resposta “boa” para o meu problema.
É uma questão conceitual. Eu tenho um cliente e um servidor e eles devem se conectar com segurança. Eu pesquisei algumas opções, mas não estou muito satisfeito com nenhuma delas.
-
O uso de chaves assíncronas requer que o usuário tenha uma chave pública. Este será um projeto opensource então codificar a chave no código-fonte não é uma opção. Além disso, eu entendi que um certificado para o envio da chave pública para o cliente evitaria o problema do man in the middle, mas eu fiquei um pouco confuso. Eu não entendi muito como isso funciona, nem onde eu posso obter (gratuitamente) um certificado válido.
-
O uso de chaves síncronos requer tanto o cliente quanto o servidor terem a mesma chave. Então, qualquer um que fizer o download do aplicativo seria capaz de acessar a chave criptógrafo e usá-lo (pois todos os aplicativos teriam a mesma chave).
Eu li em algum lugar que eu poderia gerar um número aleatório que varia ao longo do tempo e usá-lo para criptografar dados. No entanto, uma vez que é uma aplicação opensouce, qualquer um que seja capaz de ler como esse número varia ao longo do tempo também seria capaz de decodificar os dados, certo?
O que eu estou perdendo aqui? Agradeço-lhe ajuda. A propósito, eu estou usando Java e não é uma aplicação web.