A computer-implemented method for performing communications between a first computer and a second computer, the method comprising performing, by the first computer: receiving a first message including a second computer blinded public key from the second computer, an encrypted second computer blinding factor, and an encrypted second computer certificate from the second computer, wherein the second computer blinded public key is generated by the second computer using a second computer blinding factor and a second computer public key that corresponds to a second computer private key; generating a first computer blinded public key by multiplying a first computer blinding factor by a first computer public key; generating a first shared secret, using a Diffie-Hellman based algorithm, from: a first computer private key corresponding to the first computer public key, the first computer blinding factor, and the second computer blinded public key; generating a second shared secret using the second computer blinded public key and the first computer private key; decrypting the encrypted second computer blinding factor using the second shared secret to obtain the second computer blinding factor; decrypting the encrypted second computer certificate using the second shared secret to obtain a second computer certificate including the second computer public key; verifying, by the first computer, the second computer blinded public key received from the second computer using the second computer blinding factor and the second computer public key; sending, in response to the verifying of the second computer blinded public key, a second message including the first computer blinded public key to the second computer, thereby enabling the second computer to generate the first shared secret using the first computer blinded public key, the second computer blinding factor, and the second computer private key corresponding to the second computer public key; and communicating with the second computer using the first shared secret. receiving a first message including a second computer blinded public key from the second computer, an encrypted second computer blinding factor, and an encrypted second computer certificate from the second computer, wherein the second computer blinded public key is generated by the second computer using a second computer blinding factor and a second computer public key that corresponds to a second computer private key; generating a first computer blinded public key by multiplying a first computer blinding factor by a first computer public key; generating a first shared secret, using a Diffie-Hellman based algorithm, from: a first computer private key corresponding to the first computer public key, the first computer blinding factor, and the second computer blinded public key; generating a second shared secret using the second computer blinded public key and the first computer private key; decrypting the encrypted second computer blinding factor using the second shared secret to obtain the second computer blinding factor; decrypting the encrypted second computer certificate using the second shared secret to obtain a second computer certificate including the second computer public key; verifying, by the first computer, the second computer blinded public key received from the second computer using the second computer blinding factor and the second computer public key; sending, in response to the verifying of the second computer blinded public key, a second message including the first computer blinded public key to the second computer, thereby enabling the second computer to generate the first shared secret using the first computer blinded public key, the second computer blinding factor, and the second computer private key corresponding to the second computer public key; and communicating with the second computer using the first shared secret.