A method of registering and authenticating a user and a user device is disclosed. In one embodiment, the method does not use any stored usernames, passwords, or tokens. In certain embodiments, the method stores algorithmic functions on the user device. When a user requests authentication a server provides variable values to the client device. The values are input into the algorithmic functions. The functions generate an output. The output is sent to the server. The server uses the client device generated output to authenticate the client device and the user. Each time the user requests authentication different variable values are used to prevent prediction and hacking of the system.