141. 마스터 시크릿 (Master Secret)
⚠️ 이 문서는 클라이언트와 서버가 키 교환(RSA 또는 ECDHE)을 통해 엉성하게 합의한 최초의 원석(Pre-Master Secret)을, 해커가 예측 불가능한 완벽한 48바이트의 순도 높은 황금 열쇠인 '마스터 시크릿'으로 제련해 내는 TLS의 핵심 조립 과정을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 마스터 시크릿(Master Secret)은 TLS 핸드셰이크 과정에서 도출된 '프리 마스터 시크릿(Pre-Master Secret)'과 양쪽이 보낸 '무작위 난수(Client Random, Server Random)'를 PRF나 HKDF 믹서기에 넣고 끓여 만든 48바이트의 궁극적 마스터 암호화 씨앗이다.
- 가치: 키 교환만으로 나온 숫자(프리 마스터)는 길이가 들쭉날쭉하거나 수학적 패턴이 남아있을 수 있다. 여기에 양쪽의 최신 난수를 소금(Salt)처럼 팍팍 쳐서 믹서기에 돌리면, 해커가 우연의 일치로도 절대 역산하거나 맞출 수 없는 100% 무작위성을 띠는 핵심 심장(Core)이 탄생한다.
- 융합: 이 마스터 시크릿은 그 자체로 암호화에 쓰이지 않는다. 통신 세션을 지탱하는 진정한 엄마(Mother) 키로서, 여기서부터 암호화용 세션 키, 인증(MAC)용 키, 초기화 벡터(IV) 등 수많은 '새끼 세션 키(Child Keys)'들이 줄줄이 파생(Derivation)되어 시스템 곳곳에 융합 배치된다.
Ⅰ. 개요 및 왜 '원석'을 바로 쓰지 않는가? (Context & Necessity)
우리는 130번 문서(ECDH)에서 앨리스와 밥이 타원곡선에서 1회용 당구공을 튕겨 똑같은 X좌표를 맞춰내는 기적을 보았다. "아싸! 서로 똑같은 숫자(1A8F...)를 나눠 가졌네? 이제 이걸 비밀번호로 AES 돌리자!"
이것은 초보자의 치명적 오판이다. ECDHE로 얻은 이 찌꺼기 숫자를 **프리 마스터 시크릿(Pre-Master Secret)**이라고 부른다.
- 문제 1: 길이가 안 맞는다. 타원곡선을 뭘 쓰냐에 따라 32바이트가 나오기도, 64바이트가 나오기도 한다.
- 문제 2: 엔트로피(무작위성)가 부족하다. 해커가 타원곡선 수학을 잘 안다면, 저 X좌표의 특정한 패턴(0이 많이 나온다든지)을 이용해 비밀번호를 좁혀갈 수 있다.
- 문제 3: 어제 맺었던 연결과 오늘 맺은 연결이 혹시라도 똑같은 숫자가 나올 일말의 가능성(Replay Attack)을 완전히 박살 내야 한다.
따라서 암호학자들은 이 '프리 마스터(원석)'를 절대 바로 쓰지 못하게 법으로 막고, 반드시 **"서버와 클라이언트가 오늘 막 굴린 신선한 난수를 섞어서 용광로에 한 번 끓여내라!"**고 지시했다. 이렇게 정제된 48바이트의 황금 덩어리가 바로 **마스터 시크릿(Master Secret)**이다.
📢 섹션 요약 비유: 친구와 카톡으로 "우리 비밀번호는 '사과'로 하자(프리 마스터)"라고 정했다고 칩시다. 진짜 자물쇠 비밀번호를 그냥 '사과'로 하면 도둑이 금방 풉니다. 그래서 '사과'라는 단어에, 오늘 아침 온도(클라이언트 난수)와 내일 비 올 확률(서버 난수)을 섞어 믹서기에 확 갈아버린 뒤,
X9!@Q#라는 아무도 못 알아보는 48글자(마스터 시크릿)를 뽑아서 진짜 금고의 뼈대 번호로 삼는 겁니다.
Ⅱ. 마스터 시크릿의 3대 조립 재료와 제련 과정
TLS 1.2를 기준으로 마스터 시크릿을 제련하는 과정을 해부해 보자. (TLS 1.3은 HKDF를 쓰지만 철학은 동일하다.)
1. 용광로에 들어가는 3가지 재료
- Pre-Master Secret (원석)
- 클라이언트가 RSA로 감싸서 몰래 던져준 48바이트 난수이거나, 방금 ECDHE로 튕겨서 맞춘 공통 X좌표다.
- Client Random (클라이언트의 32바이트 소금)
- 핸드셰이크 맨 처음(
Client Hello)에 브라우저가 "안녕!" 할 때 봉투에 담아 보냈던 완전한 난수.
- 핸드셰이크 맨 처음(
- Server Random (서버의 32바이트 소금)
- 서버가 "반가워!"(
Server Hello) 할 때 뱉어냈던 완전한 난수.
- 서버가 "반가워!"(
2. 마스터 시크릿의 탄생 (PRF 믹서기)
이 3가지 재료를 모아 **PRF (Pseudo-Random Function)**라는 믹서기(내부적으로 HMAC-SHA256 사용)에 넣고 돌린다.
- 수식:
Master_Secret = PRF(Pre_Master_Secret, "master secret", Client_Random + Server_Random) - 결과: 이 믹서기는 덜 정제된 프리 마스터 시크릿을 완전히 분쇄하고, 두 개의 랜덤 소금을 팍팍 쳐서 100% 무작위성을 띠는 **완벽한 길이 48바이트(384비트)**의 마스터 시크릿을 뚝딱 뱉어낸다.
┌──────────────────────────────────────────────────────────────────────────┐
│ 마스터 시크릿(Master Secret)의 제련 파이프라인 시각화 │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ [ 💎 재료 준비 (Handshake 과정 중 획득) ] │
│ - 재료 1: Pre-Master Secret (ECDH 교환으로 획득한 원석) │
│ - 재료 2: Client Random (접속 0초에 클라이언트가 굴린 주사위) │
│ - 재료 3: Server Random (접속 0.1초에 서버가 굴린 주사위) │
│ │
│ [ 🏭 PRF 믹서기 가동 ] │
│ 재료 1 ────┐ │
│ 재료 2 ───┼──▶ [ PRF 믹서기 (HMAC) 가동! ] │
│ 재료 3 ────┘ │
│ │ │
│ ▼ │
│ [ 👑 마스터 시크릿 (Master Secret, 48 Bytes) 획득! ] │
│ │
│ ★ 방어막 효과: 해커가 재료 1(프리 마스터)을 구하지 못하면 믹서기 밖에서 │
│ 아무리 기다려도 마스터 시크릿의 1비트조차 유추해 낼 수 없다. │
└──────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 클라이언트 랜덤과 서버 랜덤은 핸드셰이크 초반에 평문(Plaintext)으로 인터넷을 날아다니므로 해커가 다 지켜보고 수집해 두었다. 하지만 가장 중요한 재료인 Pre-Master Secret은 RSA 캡슐 안에 꽁꽁 숨겨져 있거나 ECDH 수학의 미로 뒤에 숨겨져 있어 해커가 절대 훔칠 수 없다. 믹서기 재료 3개 중 하나라도 빠지면 최종 결과물은 우주 끝까지 가도 알 수 없는 '눈사태 효과(Avalanche Effect)' 덕분에 마스터 시크릿은 완벽한 철벽의 지위를 누린다.
- 📢 섹션 요약 비유: 식당에서 비밀 요리(마스터 시크릿)를 만들 때, 물과 양파(클라이언트, 서버 랜덤)는 시장에서 누구나 볼 수 있게 공개적으로 사 옵니다. 하지만 가장 중요한 요리의 핵심인 '비법 마법 가루(Pre-Master Secret)'는 금고에 넣어져 지하 터널로 배달됩니다. 해커가 물과 양파를 다 훔쳐봐도, 솥에 들어가는 마법 가루를 모르면 이 요리의 맛(마스터 시크릿)을 절대 흉내 낼 수 없습니다.
Ⅲ. 마스터 시크릿의 소멸과 세션 키의 파생 (Key Expansion)
마스터 시크릿 48바이트를 구했다. 이걸로 당장 데이터를 암호화할까? 아니다. 아직 부족하다. 통신을 하려면 클라이언트가 잠글 열쇠, 서버가 잠글 열쇠, 무결성 도장(MAC)을 찍을 열쇠 등 최소 4개~6개의 독립된 세션 키(Session Key) 더미가 필요하다.
- 키 블록(Key Block)의 생성:
마스터 시크릿과 아까 썼던 양쪽의 랜덤 난수들을 이번엔
PRF(Master_Secret, "key expansion", Server_Random + Client_Random)로 한 번 더 믹서기에 넣고 갈아버린다. - 필요한 열쇠들 줄줄이 뽑아내기: 믹서기는 엄청나게 긴 '키 덩어리(Key Block)'를 주욱 뽑아낸다. 이 긴 덩어리를 가위로 싹둑싹둑 잘라서 용도별로 나눠 가진다.
- 싹둑 1 (Client MAC Key): 클라이언트가 쏠 때 무결성 도장 찍는 키
- 싹둑 2 (Server MAC Key): 서버가 쏠 때 무결성 도장 찍는 키
- 싹둑 3 (Client Encryption Key): 클라이언트가 AES 믹서기 돌릴 키
- 싹둑 4 (Server Encryption Key): 서버가 AES 믹서기 돌릴 키
- 싹둑 5 (Client/Server IV): 블록 암호에 넣을 1회용 초기화 벡터(IV)
클라이언트와 서버는 각자 자기 컴퓨터 안에서 이 믹서기를 똑같이 돌려서 싹둑 자른다. 신기하게도 양쪽의 가위질 결과(수십 개의 열쇠들)가 완벽하게 일치한다. 이제 진짜 통신이 시작되고, 10GB짜리 영화가 쏟아져 들어온다. 통신이 끝나면 이 마스터 시크릿과 싹둑 자른 세션 키들은 RAM에서 모조리 삭제(PFS)되어 영원한 전설로 남는다.
Ⅳ. 결론
"완벽한 질서는 가장 혼란스러운 무작위성(Entropy)을 끓여낸 용광로에서 탄생한다." 마스터 시크릿은 암호학의 연금술이다. 불완전하고 패턴이 묻어있는 최초의 원석(프리 마스터)을 찰나의 난수들과 융합하여, 시스템 전체에 생명력을 불어넣는 완벽한 48바이트의 심장으로 제련해 냈다. 이 심장에서 뿜어져 나온 맑은 피(세션 키)들이 클라이언트와 서버의 혈관을 돌며 기밀성(AES)과 인증(MAC)이라는 무적의 방패를 유지해 주고 있다.
📌 관련 개념 맵
- 생명주기 단계: Pre-Master Secret (원석) $\rightarrow$ Master Secret (심장) $\rightarrow$ Session Keys (손발/말단)
- 내부 사용 엔진: PRF (Pseudo-Random Function, TLS 1.2), HKDF (TLS 1.3)
- 필수 결합 재료: Client Random, Server Random (재전송 공격 방지용 난수)
- 파생(Derivation)의 목표: 역할별(암호화용, MAC용, 방향별) 키의 완벽한 논리적 분리 (Domain Separation)
👶 어린이를 위한 3줄 비유 설명
- 철수와 영희가 비밀번호를 만들 때, 처음에 수학 공식으로 맞춘 '기초 암호(프리 마스터)'는 뭔가 좀 허술했어요.
- 그래서 철수가 뽑은 랜덤 구슬과 영희가 뽑은 랜덤 구슬을 아까 그 '기초 암호'랑 믹서기에 넣고 미친 듯이 돌려버렸죠.
- 믹서기에서 나온 건 아주 맑고 투명해서 절대 해커가 맞출 수 없는 48글자짜리 '마스터 시크릿(황금 열쇠)'이었고, 이 열쇠를 쪼개서 진짜 자물쇠를 잠그는 작은 열쇠(세션 키) 수십 개를 뚝딱뚝딱 만들어냈답니다!