728x90

이러한 암호 방식 리스트를 주고 받으면서 클라이언트와 서버 간에 어떤 암호 알고리즘, 해시 알고리즘, 키 교환방식을 쓰는지를 서로간에 합의를 해서 결정하게 된다. 

 

암호 알고리즘, 해시 알고리즘, 전자 서명 방식, 키 교환 방식을 결정하게 된다.

클라이언트가 자신이 사용할 수 있는 리스트를 서버한테 주면은 서버가 그 중 하나를 선택하게 되는데

 

RSA, DH_DSS, … 이런것들이 키 설정 방식을 의미한다. 

 

키 설정 방식을 간단하게 설명 하면 두 가지 방식이 있는데 1. 공개 키 방식 2. Diffie-Hellman 방식이 있다.

  • RSA는 공개 키를 사용해서 세션키, 대칭키를 설정하는 방식이다.
  • 나머지 DH_DSS, DH_RSA, DHE_DSS, DHE_RSA, DH_anon은 Diffie-Hellman 방식을 사용하는건데, 이 경우는 세 가지로 구분 되어 있다. 1. DH_DSS, DH_RSA는 fixed Diffie-Hellman 방식 2. DHE_DSS, DHE_RSA는 ephemeral Diffie-Hellman 방식 3. DH_anon는 anonymous Diffie-Hellman 방식 이 있다. 결국 키 설정은 Diffie-Hellman의 세 가지랑 공개 키 방식을 놓고 보면은 네 가지 있다고 볼 수 있다.

AES는 암호 알고리즘을 의미한다. 어떤 알고리즘을 사용 할 것인가를 말한다. 그리고 CBC는 블록체인을 말한다. 결국 AES000_CBS까지가 어떤 알고리즘을 사용 할 것인지를 말해준다.

SHA_256은 해쉬 알고리즘을 얘기한다. 

 

그러나 전자 서명 방식은 다른 필드에 표현되어있다.

'서버 > 암호' 카테고리의 다른 글

키(🔑 "key") 계산  (0) 2021.03.22
키 교환 방법  (0) 2021.03.21
TLS Handshake 프로토콜 (4 단계)  (0) 2021.03.21
TLS Handshake 프로토콜 (3 단계)  (0) 2021.03.21
TLS Handshake 프로토콜 (2 단계)  (0) 2021.03.21
728x90

 


단계 4

 

change_cipher_spec 메시지는 알고리즘 규격에 변화가 생겼을 때 알려준다.

 

그리고 finish 클라이언트가 서버로 혹은 서버가 클라이언트로 보내서 서로간에 마지막 handshake 과정을 확인하는건데, 지금까지 받았던 모든 메시지를 붙여서 MAC 계산한다. 결국 finished메시지를 통해서 단계 1,2,3,4 까지 받았던 메시지를 확인해서 무결성과 인증에 대한것을 MAC 통해 한다. 만약 메시지가 하나라도 false 되어 있으면 MAC값을 통해 있다. 

728x90

 


 

단계 3

 

비밀값을 만들고 이것을 서버에게 알려줘야 하는데 알려주는 것을 3단계의 client_key_exchange를 통해서 알려주게 된다. 만약에 RSA(공개키)를 이용해서 알려줄 경우에는 PMS를 만들어서 서버의 공개키(RSA)로 암호화 시켜서 보내면 이 값은 서버에 개인키가 없으면 이 값은 복호화 시켜서 볼 수가 없다. 결국 서버만이 볼 수가 있다. 그다음 DH를 쓰는 경우에는 DH파라메타 값을, 그리고 fixed DH의 경우에는 클라이언트의 DH key를 인증서에 넣어서 보내주게 된다. 그리고 클라이언트는 메시지에 MAC을 만들어 붙여서 전송을 하는 것이다.

 

 정리하자면, 서버는 클라이언트가 보낸 PMS값을 받았고 공개키를 사용 경우 공개키로 암호화 해서 보냈으니까 서버는 자신의 개인키로 풀면 값을 찾을 있고 만약 DH 사용 경우 DH 파라메타를 보냈으니까 서버는 PMS값을 찾을 있는 것이다. 그러면 여기서 부터 master secret 값을 계산 하고, 여기서 나온 값을 이용해서 키를 계산한다.

+ Recent posts