A Provably Secure Anonymous Two-Factor Authenticated Key Exchange Protocol for Cloud Computing