Es necesario autenticar al cliente, y eso requiere que exista algún tipo de secreto. Si un usuario humano controla el cliente, es posible que solo pueda registrarse y autenticar al usuario, utilizando algún secreto que conozcan o tengan acceso.
Si el cliente está automatizado y usted no controla el entorno de hardware y software en el que se basa, no tendrá suerte ante un atacante determinado que tiene el control del cliente. Pero puedes hacerlo difícil.
Su problema parece estar relacionado con el problema general de las licencias de las aplicaciones cliente, y aquí encontrará una buena descripción general de un enfoque (para aplicaciones de Android, en Java):
enlace
Puede adaptar eso a su entorno o buscar otras bibliotecas de código abierto adecuadas a su situación.
Por cierto, la "seguridad a través del secreto" está bien, los secretos como las claves privadas son parte de la mayoría de los buenos esquemas. Es la "seguridad a través de la oscuridad" lo que las personas intentan evitar, es decir, simplemente complicar las cosas o pretender que los atacantes no entienden sus algoritmos.