대부분 인증을 하는 동시에 키 교환을 한다.
각각 발생할 수 있지만 세션을 맺을 초기에 동시에 발생한다.
항상인증에서 상호인증을 하는 것은 아니다.
Password를 기반으로 하는 인증이다.
but 이는 offline dictionary attack에 취약하다
이 둘다 Pw를 공유하고 있는 상태이다.
Password를 가지고 offline dictionary attack을 극복하기 위해 새로운 공개키 암호를 생성해서 PK, SK를 생성하고 이를 암호화 해서 준다.
공격자가 이를 탈취해서 가져간 후 이를 복호화 하기위해 본다면 공격자가 public key가 random이므로 어떠한 key에서 나왔는지 모르게된다.
그후 Password를 공유했으니 이를 복호화해서 이 새로운 key를 다시 암호화해서 이를 대칭키의 메시지로 취급해서 암호화하는 작업을 진행한다.
이후 Challenge-response방식으로 통해 검증한다.
장점은 Password로부터 시작해 강한 key를 공유한다.
Cert가 필요가 없다.
그러나 문제는 alice와 bob이 서로 Password를 공유하는게 문제이다.
즉 어차피 Cert가 처음에는 필요하다.
위의 구조는 간단하게 Diffie-Hellman을 통해 아래와 같이 구현된다.
이 역시 offline dictionary attack에 강하다
통신 주체가 암호화용 Cert를 가지고 있다.
단 Rb를 그대로 주지말고 MAC을 통해 이전메시지를 넣는 방식을 가져야한다.
그리고 key는 Hash(Kab,Kba)의 양쪽 각각을 넣은 값을 Hash해서 key를 만든다.
그러나 현실에서는 위의 방식을 사용하는 것보다 아래의 방식을 사용한다.
이는 서버만인 Cert를 가지고 있다.
이 방식은 bob이 server를 인증하는 방식이다.
이후 안전한 암호화된 통신위에서 사용자를 인증하는 방식을 사용한다.
TLS v1.2, RSA encryption에서 사용된다.
이 방법으로 key를 교환할 수 없다.
왜냐하면 Cert를 통해 검증을 하려면 모든 메시지를 open해야하므로 비밀키를 교환할 수 없다.
따라서 인증은 가능하나 키교환이 불가능하다.
둘다 전자서명용 Cert와 Diffie의 g,p를 공유했을 경우
아래와 같이 진행한다.(simple STS Protocol)
그러나 현실은 아래의 방법을 사용한다.
서버는 전자서명용 Cert를 지니고 둘다 Diffie의 g,p를 공유한다.
TLS v1.2, ECDSA is used for DSS and ECDH is used for DH
이는 사용자가 서버를 인증하는 것이다.
실제로는 TLS를 할때 어떠한 방식으로 암호화 Hash를 할지 선택지를 준다.
이후 서버가 이에 대한 대답을 주고 통신을 이어간다.
MAC검증을 통해 상대방이 같은 key를 교환했는지 알 수 있다.
아래는 DS+DH를 통해 하는 것이다.
위에서 보다 싶이 CA의 전자서명을 동일하게 하지않는 이상 절대로 Cert를 위조할 수 없기에 불가능 하다.
이 방법은 SSO(single Sign On)과 동일하게 여러 서버에서 토큰을 통해 로그인을 할 수 있게 하는 방식이다.