-
2024.10.19 SSLTIL 2024. 10. 19. 17:35
HTTPS 사용 시 SSL handshake를 먼저 해야 하는데, 그 안의 행위가 잘 설계되어 있다고 느꼈다.
CA의 비대칭 키와 서버의 비대칭 키, 이 둘을 잘 사용하는 것이 인상적이다.
먼저 비대칭키 방식으로 서로 신뢰할 수 있는지도 확인하고 최종적으로는 대칭키까지 생성해 사용까지 한다.
간단히 본다면..
- 서버는 CA에 서버의 공개키와 도메인 주소를 넘긴다
- CA는 서버의 공개키를 CA의 비밀키로 암호화해서 인증서로 만들어준다.
- 클라이언트가 서버와 SSL핸드쉐이크를 시작한다.
- (클라이언트 Hello) 클라이언트는 자신이 사용할 수 있는 알고리즘과 난수를 전달한다.
- (서버 Hello) 서버도 응답하며 사용할 알고리즘과 난수, 인증서를 전달한다.
- 클라이언트는 브라우저에 내장되어 있는 CA 공개키로 인증서를 복호화하고 서버의 공개키를 얻는다.
- 클라이언트에서 만든 키(pre master secret, 48bit)를 서버의 공개키로 암호화한 후 서버에 전달한다.
- 서버는 pre master secret을 서버의 비공개키로 복호화한다.
- 서버와 클라이언트는 pre master secret와 주고 받은 난수를 통해 master scret을 만들고(PRF 알고리즘 사용), 또 master secret 으로 session key를 만들어 클라이언트와 서버가 대칭키로 사용하게 된다.
master secret으로 6개의 키를 만들어 사용한다고 합니다.
공식은 master secret을 만들 때 처럼
PRF를 사용.
key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random);
(
The client and the server create a set of 3 keys:
- client_write_MAC_key: Authentication and Integrity check
- server_write_MAC_key: Authentication and Integrity check
- client_write_key: Message encryption using symmetric key
- server_write_key: Message encryption using symmetric key
- client_write_IV: Initialization Vector used by some AHEAD ciphers
- server_write_IV: Initialization Vector used by some AHEAD ciphers
)
클라이언트의 요청은 client_write_key로 암호화 복호화하고, 서버의 요청은 server_write_key로 암호화 복호화합니다.
궁금증
pre master secret을 왜 바로 사용하면 안될까?
Why don’t we use the Pre-Master Secret?
..
replay공격?https://crypto.stackexchange.com/questions/24780/what-is-the-purpose-of-pre-master-secret-in-ssl-tls
- https://datatracker.ietf.org/doc/html/rfc7627
- https://datatracker.ietf.org/doc/html/rfc5246#section-6.3
- https://www.baeldung.com/cs/pre-master-shared-secret-private-public-key#5-master-secret
- https://www.cryptologie.net/article/340/tls-pre-master-secrets-and-master-secrets/
- https://medium.com/demystifying-security/how-tls-secures-communications-f9ba48af840a
'TIL' 카테고리의 다른 글
2024.10.22 system design (0) 2024.10.22 2024.10.21 ssl replay attack (0) 2024.10.21 2024.10.17 환기 (0) 2024.10.17 2024.10.15 Cache control (0) 2024.10.16 2024.10.08 Duplicate Requests, Throttling Design Pattern (0) 2024.10.09