Estoy creando una aplicación web que distribuye datos cifrados con las claves públicas de sus clientes. En este momento esto está funcionando para dispositivos dedicados que yo mismo distribuyo. Antes de que se envíen, coloco el par de llaves pública / privada en el firmware del dispositivo.
Sin embargo, como esto es 2017, también quise hacer una aplicación de Android para hacer que cualquier dispositivo Android actúe como uno de los dispositivos que vendo, ya que es más fácil para los clientes. El único cuello de botella que estoy experimentando es la distribución de las claves.
Al iniciar la aplicación, puedo generar un par de llaves públicas / privadas en el dispositivo Android, y almacenarlas de manera segura en el almacenamiento interno, pero necesito encontrar una manera de enviar la clave pública generada del dispositivo Android a mi servidor, por lo que mi servidor puede cifrar los datos con él.
La razón por la que no puedo simplemente enviar la clave pública como una solicitud HTTP a mi servidor es que no quiero que alguien con una computadora pueda generar un par de claves público / privado y enviarla a mi servidor para que también sea capaz de recibir los datos como. Es muy fácil descompilar las aplicaciones de Android o utilizar wireshark para averiguar la URL utilizada para registrar nuevas claves.
Si tuviera que usar esta forma, ¿cómo verificaría en mis servidores que la solicitud se origina en un dispositivo Android legítimo?