A method comprising: during initialization of an application on a communication device: sending, by the application, a set of device identifiers associated with the computing device to a server; receiving, by the application and from the server, a server-generated dynamic device identifier that is generated based on the set of device identifiers; storing, by the application, the server-generated dynamic device identifier so that the server-generated dynamic device identifier is incorporated into the application; and calculating and storing, by the application, an application digest of the application file after the server-generated dynamic device identifier has been incorporated into the application; during runtime execution of the application: generating a runtime application digest of the application file; determining whether the runtime application digest matches the stored application digest; receiving, by the application, a request to execute an application specific task; in response to receiving the request: generating, by the application, a runtime dynamic device identifier; determining whether the runtime dynamic device identifier matches the server-generated dynamic device identifier; executing the application specific task when the runtime dynamic device identifier matches the server-generated dynamic device identifier and the runtime application digest matches the stored application digest; and preventing the application specific task from being executed when the runtime dynamic device identifier does not match the server-generated dynamic device identifier or when the runtime application digest does not match the stored application digest. sending, by the application, a set of device identifiers associated with the computing device to a server; receiving, by the application and from the server, a server-generated dynamic device identifier that is generated based on the set of device identifiers; storing, by the application, the server-generated dynamic device identifier so that the server-generated dynamic device identifier is incorporated into the application; and calculating and storing, by the application, an application digest of the application file after the server-generated dynamic device identifier has been incorporated into the application; during runtime execution of the application: generating a runtime application digest of the application file; determining whether the runtime application digest matches the stored application digest; receiving, by the application, a request to execute an application specific task; in response to receiving the request: generating, by the application, a runtime dynamic device identifier; determining whether the runtime dynamic device identifier matches the server-generated dynamic device identifier; executing the application specific task when the runtime dynamic device identifier matches the server-generated dynamic device identifier and the runtime application digest matches the stored application digest; and preventing the application specific task from being executed when the runtime dynamic device identifier does not match the server-generated dynamic device identifier or when the runtime application digest does not match the stored application digest. generating a runtime application digest of the application file; determining whether the runtime application digest matches the stored application digest; receiving, by the application, a request to execute an application specific task; in response to receiving the request: generating, by the application, a runtime dynamic device identifier; determining whether the runtime dynamic device identifier matches the server-generated dynamic device identifier; executing the application specific task when the runtime dynamic device identifier matches the server-generated dynamic device identifier and the runtime application digest matches the stored application digest; and preventing the application specific task from being executed when the runtime dynamic device identifier does not match the server-generated dynamic device identifier or when the runtime application digest does not match the stored application digest. generating, by the application, a runtime dynamic device identifier; determining whether the runtime dynamic device identifier matches the server-generated dynamic device identifier; executing the application specific task when the runtime dynamic device identifier matches the server-generated dynamic device identifier and the runtime application digest matches the stored application digest; and preventing the application specific task from being executed when the runtime dynamic device identifier does not match the server-generated dynamic device identifier or when the runtime application digest does not match the stored application digest. executing the application specific task when the runtime dynamic device identifier matches the server-generated dynamic device identifier and the runtime application digest matches the stored application digest; and preventing the application specific task from being executed when the runtime dynamic device identifier does not match the server-generated dynamic device identifier or when the runtime application digest does not match the stored application digest.