Man-in-the-Middle Attack(MITM), CA

Seungyun Lee·2026년 4월 20일

Cybersecurity

목록 보기
23/24

이 필기들은 대규모 네트워크 환경에서 KDC(중앙 서버) 없이도 안전하게 키를 교환하기 위해 고안된 공개키 기반 키 확립(Asymmetric Key Establishment) 방식과, 그중 '디피-헬만(Diffie-Hellman)' 알고리즘이 가진 치명적 약점인 중간자 공격(MITM)을 설명하고 있습니다.

공개키 기반 키 확립


KDC처럼 언제 해킹당할지 모르는 중앙 서버에 의존하지 않고, Alice와 Bob이 직접 공개키 암호학(PK)을 이용해 대칭키를 설정하는 방법입니다.

접근 방식 (2 PK Approaches)

  1. Key Agreement (키 합의): 양측이 수학적 연산을 통해 공동의 키를 도출. (예: 디피-헬만 알고리즘)
  2. Key Transport (키 전송): 한쪽이 세션 키를 만들어 상대방의 '공개키'로 암호화해서 전달.

Key Transport 예시 흐름:
1. Bob이 자신의 공개키(KpubK_{pub})를 Alice에게 보냅니다.
2. Alice는 통신에 쓸 대칭키 KK(예: AES 키)를 생성하고, 이를 Bob의 공개키로 암호화하여 Y=eKpub(K)Y = e_{K_{pub}}(K)를 만들어 Bob에게 보냅니다.
3. Bob은 자신의 개인키(KprK_{pr})로 YY를 복호화하여 대칭키 KK를 안전하게 얻습니다.
4. 이제 양측은 확보한 대칭키 KK를 이용해 실제 데이터 XX를 AES 암호화(Z=AESK(X)Z = AES_K(X))하여 통신합니다.

수동적 vs 능동적 공격: 이 방식은 단순히 통신선을 엿듣기만 하는 수동적 공격자(Passive Attacker)에게는 매우 안전하지만, 통신 내용을 적극적으로 조작하는 능동적 공격자(Active Attacker)에게는 취약할 수 있습니다.

중간자 공격 Man-in-the-Middle Attack

대표적인 '키 합의' 알고리즘인 디피-헬만(D-H) 키 교환이 능동적 공격자(Trudy)에게 어떻게 무력화되는지 수식으로 보여줍니다.

정상적인 D-H 교환 (공격자가 없을 때)

  • Alice의 개인키 aa, 공개키 A=αaA = \alpha^a
  • Bob의 개인키 bb, 공개키 B=αbB = \alpha^b
  • 서로 AABB를 교환한 뒤, 자신의 개인키를 곱해 동일한 공유키 KAB=αabK_{AB} = \alpha^{ab}를 만듭니다.

Trudy의 중간자 공격 시나리오

Trudy는 통신선 중간에 서서 Alice와 Bob이 서로 주고받는 공개키를 가로채고 가짜 공개키로 바꿔치기합니다.

  1. 가로채기와 위조: * Alice가 Bob에게 AA를 보낼 때, Trudy가 이를 가로채고 자신이 만든 가짜 공개키 A~=ασ1\tilde{A} = \alpha^{\sigma_1}을 Bob에게 보냅니다.

    • Bob이 Alice에게 BB를 보낼 때도 가로채어 가짜 공개키 B~=ασ2\tilde{B} = \alpha^{\sigma_2}를 Alice에게 보냅니다.
  2. Alice의 착각: Alice는 진짜 BB 대신 가짜 B~\tilde{B}를 받았지만 이를 모른 채 자신의 개인키 aa를 곱합니다.

    • Alice가 만든 키: KAB=(B~)a=(ασ2)a=αaσ2K_{AB} = (\tilde{B})^a = (\alpha^{\sigma_2})^a = \alpha^{a\sigma_2}
    • 하지만 이 키는 Bob과의 공유키가 아니라, Trudy와의 공유키(KAσK_{A\sigma})입니다.
  3. Bob의 착각: Bob 역시 가짜 A~\tilde{A}에 자신의 개인키 bb를 곱합니다.

    • Bob이 만든 키: KBA=(A~)b=(ασ1)b=αbσ1K_{BA} = (\tilde{A})^b = (\alpha^{\sigma_1})^b = \alpha^{b\sigma_1}
    • 이 역시 Trudy와의 공유키(KBσK_{B\sigma})가 됩니다.
  4. 공격 완성 (Trudy의 상태): Trudy는 자신이 만든 난수 σ1,σ2\sigma_1, \sigma_2와 가로챈 A,BA, B를 이용해 Alice용 키(KAσ=Aσ2K_{A\sigma} = A^{\sigma_2})와 Bob용 키(KBσ=Bσ1K_{B\sigma} = B^{\sigma_1})를 모두 완벽하게 계산해 냅니다.

결론 (하단 빨간 글씨)

  • Trudy는 Alice와 Bob 각각과 통신할 수 있는 별개의 세션 키를 갖게 되었습니다. 하지만 Alice와 Bob은 서로 직접 연결되어 있다고 굳게 믿고 있습니다.

  • Trudy는 Alice가 보낸 암호문을 열어보고 조작한 뒤, 다시 Bob용 암호문으로 재포장해서 보낼 수 있는 '완전한 통제권(Full control)'을 가지게 됩니다.

중간자 공격(MITM)의 근본적인 원인


필기 중간에 적힌 질문과 답변이 암호학의 핵심을 찌릅니다.

  • Q: 중간자 공격의 기본 원인이 무엇인가?
  • A: "공개키들이 인증(Authenticated)되지 않았기 때문이다."

해커(Trudy)가 통신 중간에 끼어들어 자신의 가짜 공개키를 들이밀어도, Alice와 Bob은 이 공개키가 '진짜 상대방의 것인지, 해커의 것인지' 확인할 방법이 없습니다. 필기의 빨간 네모 상자처럼, 이 약점은 특정 알고리즘의 문제가 아니라 모든(ALL) 공개키 암호화 방식이 공통으로 가지는 취약점입니다.

이를 해결하기 위해 대칭키 시대의 MAC 대신, 공개키 시대의 도구인 디지털 서명(Digital Signature)인증서(Certificate)를 도입하게 됩니다.

신뢰할 수 있는 제3자: CA와 인증서 발급


인증되지 않은 공개키 문제를 해결하기 위해 CA(Certifying Authority, 인증 기관)라는 중앙의 절대적으로 신뢰할 수 있는 기관을 도입합니다.
인증서(CertACert_A)의 구조

CertA=[(KpubA,IDA),SigKpr,CA(KpubA,IDA)]Cert_A = [(K_{pubA}, ID_A), Sig_{K_{pr,CA}}(K_{pubA}, ID_A)]

인증서는 쉽게 말해 "CA가 보증하는 신분증"입니다.

  1. Alice의 이름(IDAID_A)과 Alice의 진짜 공개키(KpubAK_{pubA})를 묶습니다.
  2. 그 위에 CA가 자신의 개인키(Kpr,CAK_{pr,CA})를 사용해 디지털 서명(SigSig)을 찍어줍니다.

해커의 위조 불가: Trudy는 겉면의 내용(공개키나 이름)을 지우고 자신의 가짜 키(A~\tilde{A})를 적어 넣을 수는 있습니다. 하지만 CA의 개인키를 훔치지 않는 이상, CA의 위조 방지 도장(디지털 서명)을 똑같이 찍어낼 수는 없습니다.

인증서를 적용한 D-H 키 교환

이제 인증서를 들고 다시 디피-헬만 통신을 시도해 봅니다.

  • Alice \rightarrow Bob: Alice는 자신의 공개키 AA만 덜렁 보내는 것이 아니라, CA의 도장이 찍힌 신분증(CertACert_A)을 함께 보냅니다.

  • Trudy의 공격 시도: Trudy가 중간에서 가로채어 가짜 공개키 A~\tilde{A}가 담긴 위조 신분증을 Bob에게 보냅니다.

  • Bob의 철저한 검증 (Verify): Bob은 이미 알고 있는 CA의 공개키(Kpub,CAK_{pub,CA})를 이용해 신분증에 찍힌 도장이 진짜인지 검사합니다. Trudy가 임의로 만든 서명은 CA의 공개키로 풀리지 않으므로, 수학적 검증에서 실패(FailsFails)합니다.

  • 결과: Bob은 즉시 "이건 Alice의 공개키가 아니야!"라고 깨닫고 통신을 차단하여 중간자 공격을 완벽히 방어해 냅니다.

신뢰의 전이 (Transfer of Trust)와 Root Key


여기서 가장 현실적이고 중요한 질문이 생깁니다.
"CA가 서명했다는 건 알겠는데, 애초에 **CA의 진짜 공개키(Kpub,CAK_{pub,CA})는 해커에게 속지 않고 어떻게 안전하게 받을 수 있나요?"

이 딜레마를 해결하는 것이 필기 마지막의 Root key와 Transfer of Trust(신뢰의 전이) 개념입니다.

  • Root Key의 내장: 우리가 컴퓨터나 스마트폰을 처음 사서 윈도우(Windows), 맥OS, 혹은 크롬 웹 브라우저 등 조작되지 않은 순정 소프트웨어(Original software)를 설치할 때, 그 운영체제 깊숙한 곳에는 전 세계적으로 신뢰받는 최상위 CA(Root CA)들의 공개키들이 이미 하드코딩되어 안전하게 심어져 있습니다.

신뢰의 전이:

  • 나는 마이크로소프트/애플/구글이 만든 운영체제를 신뢰한다.
  • 그 운영체제가 기본적으로 품고 있는 CA의 공개키를 신뢰한다.
  • 그 CA가 서명해서 보증해 준 웹사이트(Alice)의 인증서를 신뢰한다.
  • 고로, 지금 내가 통신하고 있는 이 대상은 해커가 아니라 진짜 웹사이트임을 신뢰한다.
profile
Design Verification engineer

0개의 댓글