A Privacy-Preserving Multi-Factor Authenticated Key Exchange Protocol with Provable Security for Cloud Computing