1. A distributed system which validates software executing on a programmable processor, comprising: a static analyzer component adapted to identify the locations of a set of control flow checkpoints and their associated expected signatures during execution of a program on a remote server; a challenge generator executing in a trusted environment adapted to initiate a series of authentication checks, sending a list of randomly or pseudorandomly chosen checkpoints selected from a group of available checkpoints, for which respective signatures are generated at the remote server; a checkpoint enabling module adapted to execute on the remote server, enabling the chosen checkpoints by dynamically inserting calls to functions for generating the respective signatures into a program at runtime wherein the calls to functions are inserted into a program without altering an amount of code within the program and storing the original information at the location of these calls for later restoration during the actual execution of the program being validated; a signature generator adapted to execute on the remote server adapted to generate control flow signatures at the enabled chosen checkpoints, and communicating the signature to the challenge generator in response to the chosen checkpoints; and a signature verifier adapted to execute in the trusted environment adapted to verify if the signature response to a respective chosen checkpoint challenge matches an expected signature.