Tengo un SDK para mi aplicación web, que el usuario puede integrar en su aplicación para Android. Para la autenticación, tenemos una clave de autenticación. Y se envía como un parámetro POST o GET cuando se produce la comunicación de servidor a servidor. Pero en la aplicación, me temo que alguien puede obtener la clave de autenticación por cualquier método, mientras se transmite. Para eso pensé en cifrar la clave de autenticación, pero aún así, siempre será la misma clave de autenticación cifrada y alguien puede simplemente obtener una clave de autenticación que se haya descifrado y puede usar la misma para enviar datos.
Para evitar esto, vine con una lógica, que creo que es lo suficientemente segura como para enviar authkey con cifrado y enviar claves de encriptación diferentes cada vez. Aquí está el proceso.
- Tengo una clave de autenticación, digamos ABCD1234, que debo enviar
- Genero un número aleatorio seguro criptográficamente, llamémoslo rand_number
- Luego cifro mi clave de autenticación con este número de rand, usando 'aes-256-cbc', y lo llamo como auth_token
- Luego cifro el número de rand con mi clave pública, y lo llamo como time_token.
- Luego transmito este auth_token y time_token a mi servidor
Y del lado del servidor:
- descifraré time_token con mi clave privada y obtendré rand_number
- Descifrará auth_token con este número de rand y obtendrá la clave de autenticación.
¿Este método es lo suficientemente seguro? ¿Incluso si revelamos todo el proceso de cifrado y envío de datos?
No lo sé, pero tengo la sensación de que este sería un método ya existente.