Es muy difícil, casi imposible, hacer eso de manera simple.
Si solo quisiera proteger la clave, sería fácil: simplemente coloque la clave dentro de un dispositivo que sea resistente a la manipulación indebida, como cualquier token o tarjeta inteligente. En una tarjeta inteligente , alguien puede realizar un cálculo dentro de ella, pero no puede acceder al código, o una clave almacenada, etc.
Su problema es un poco más profundo que eso: dado que una computadora está fuera de su control (entorno del cliente), no importa cuánto tiempo esté apagada, etc., desea estar seguro de que cuando intenta conectarse a su servidor , no se ha cambiado / desordenado de ninguna manera.
Y a eso no hay una manera completamente posible de garantizar eso. Es la tercera regla:
Law #3: If a bad guy has unrestricted physical access to your computer, it's
not your computer anymore
(source: http://technet.microsoft.com/en-us/library/cc722487.aspx)
Especialmente si su computadora se puede apagar como un uso regular.
Piensa que alguien podría intentar bloquear la señal del GPS, o abrir tu caja y eliminar cualquier hardware especial que pongas, o intentar cambiar el sistema operativo de tu computadora, o colocar un dispositivo entre la computadora y el teclado, o quitar tu HD y copia todo, o ...
Si solo desea proteger alguna clave, vaya con tokens o tarjetas inteligentes. Pero eso no evitaría que alguien acceda a él de la misma forma que lo haría su software original.
Si desea proteger el módulo del cliente para que no lo roben, coloque algunos tipos armados a su lado. O díganos más sobre exactamente lo que quiere proteger, para que podamos elaborar un poco más.