A method of authenticating a client device to access a user account stored on a remote server includes creating the user account based on a blockchain address of a blockchain wallet, transmitting a login request for logging into the user account from the client device to the remote server, and transmitting a random challenge from the remote server to the client device when the remote server receives the transmitted login request. The random challenge is associated with the user account and no other user account. The method further includes signing the random challenge with the client device, the signature based on a private key of the blockchain wallet, transmitting the signed random challenge and the blockchain address to the remote server, and verifying that the signed random challenge corresponds to the transmitted random challenge with the remote server using a public key of the blockchain wallet and the random challenge.