지금보다 훨씬 더 신경 쓰였어야 할 사실 하나. 웹 PKI 역사의 대부분 동안, CA 근처에서 인터넷 경로를 30초쯤 비틀 수 있는 공격자는 소유하지도 않은 도메인의 진짜 브라우저 신뢰 TLS 인증서를 발급받을 수 있었다.

self-signed 인증서가 아니다. 경고를 띄우는 뭔가도 아니다. 진짜 CA가 발급한 진짜 인증서, 정품과 구분이 안 되고, 지구상 모든 브라우저가 자물쇠를 보여주는 그 인증서다. 게다가 이 수법은 암호를 깨야 하는 것도 아니었다. 경로가 어디로 가는지에 대해 CA에게 거짓말하면 됐다.

도메인 검증은 답을 그냥 믿는 네트워크 요청일 뿐이다

CA에 인증서를 요청하면, CA는 당신이 그 이름을 실제로 통제하는지 확인해야 한다. 이게 domain control validation(DV)이고, 실무에선 몇 안 되는 검사 중 하나다: http://example.com/.well-known/acme-challenge/…에 특정 토큰을 올려두고 CA가 가져가게 하거나(HTTP-01), 토큰이 담긴 TXT 레코드를 게시하고 CA가 조회하게 한다(DNS-01). CA는 애초에 자기가 발급해도 되는지 확인하려고 CAA 레코드도 읽는다.

이 하나하나가 전부 CA가 자기 위치에서 네트워크 요청을 보내고 돌아오는 답을 그냥 믿는 것이다. 그게 약점이다. CA는 소유권에 관한 어떤 깊은 진실을 검증하는 게 아니라, CA의 관점에서 응답한 누군가가 토큰을 내놓을 수 있었다는 사실을 검증할 뿐이다. CA의 요청이 진짜 서버 대신 당신 서버에 떨어지게 만들 수 있으면, 당신이 챌린지에 답하고 CA는 발급한다. CA는 차이를 알 방법이 없다.

여기서 BGP, 신뢰로 굴러가는 프로토콜이 등장한다

인터넷은 패킷이 어디로 갈지를 BGP로 정하는데, BGP에는 어떤 광고가 정당한지 판단하는 내장 개념이 없다. 한 네트워크가 “이 주소 대역 트래픽은 나한테 오면 된다”고 광고하면, 기본적으로 이웃들은 믿는다. 그 유명한 실수성 장애가 이렇게 난다 — 한 나라의 잘못 설정된 라우터가 다른 대륙 서비스의 트래픽을 삼켜버린다. 그리고 이건 무기이기도 하다.

진짜 서버 IP에 대해 더 구체적인(more specific) 경로를 광고할 수 있으면 — 잠깐이라도, 그것도 CA가 있는 인터넷 일부에만이라도 — CA의 검증 요청은 당신이 하이재킹한 경로를 따라 당신 기계로 온다. 당신이 토큰을 내놓는다. CA는 통과한 검사를 보고 인증서를 찍어낸다. 진짜 소유자는 눈치채지 못한다. 하이재킹은 CA만, 그것도 검증에 걸리는 그 몇 초만 속이면 되니까.

이건 이론이 아니었다. Princeton 연구진은 몇 년에 걸쳐 도메인 검증에 대한 바로 이 부류의 공격을 문서화했고, 윤리적으로 수행한 실제 BGP 하이재킹까지 포함했다. 그들의 연구가 주는 불편한 결론: 단일 관점 CA는 single point of failure이고, 공격 표면은 전 지구 라우팅 테이블 전체다.

해결책은 지나고 보면 민망할 만큼 단순하다

문제가 CA가 한 곳에서만 본다는 거라면, 여러 곳에서 보면 된다.

multi-vantage-point 검증의 전부가 이 발상이다. 한 네트워크 위치에서 도메인을 검증하는 대신, CA가 네트워크적으로 다양한 여러 관점에서 같은 검사를 동시에 돌리고 그들이 일치하기를 요구한다. 로컬 BGP 하이재킹은 버지니아에서 본 경로는 속일 수 있어도, 프랑크푸르트·싱가포르·상파울루에서 동시에 본 경로까지는 못 속인다. 이걸 이기려면 공격자는 이제 모든 관점에서 관측되는 경로를 같은 시각에 하이재킹해야 하는데 — 훨씬 어렵고, 요란하고, 당신 문제가 되기 전에 남의 문제가 될 확률이 훨씬 높다.

Let’s Encrypt는 2020년 2월 이걸 프로덕션에 올렸다. 바로 그 Princeton 연구진과 협업해 만들었고, 첫해에 5억 개가 넘는 인증서 발급을 이 검증으로 덮었다. 관점들이 클라우드에 있고 병렬로 조회되기 때문에 지연 비용은 사실상 없다 — 추가 검사가 원래 검사만큼 빠르게 끝난다. 그리고 보안 이득은 손짓이 아니라 측정된 수치였다: 이후 Princeton 연구(USENIX Security 2023)는 Let’s Encrypt multi-vantage-point 구성의 BGP 하이재킹 저항력을 중앙값 88%로, 단일 관점 검증은 76%로 측정했다.

88%는 100%가 아니다. 이건 기억해 두자.

2025년, 선택이 아니게 됐다

5년 동안 이건 좋은 CA는 하고 나머지는 안 하는 것이었다. 그게 바뀌었다. CA/Browser Forum — 브라우저 제작사와 CA가 모여 모두가 신뢰하는 발급 규칙을 정하는 곳 — 이 ballot SC-067을 채택했다. 도메인 검증과 CAA 검사를 여러 네트워크 관점에서 수행하도록 요구하는 내용이다. 업계는 여기에 걸맞게 관료적인 이름을 붙였다. Multi-Perspective Issuance Corroboration, 줄여서 MPIC.

롤아웃은 CA들이 정당한 발급을 깨뜨리지 않고 구현을 다듬을 수 있도록 일부러 단계적이었다. 2025년 3월 15일 요구사항이 됐고(원격 관점 최소 2개로 시작), 2025년 9월 15일부터는 corroboration에 실패하면 실제로 발급을 멈춰야 했다. 최소 관점 수는 2026년에 걸쳐 단계적으로 늘어난다. 모델은 “모든 관점이 일치해야 한다”가 아니다 — 그러면 한 관점에 일시적 라우팅 딸꾹질이 있는 정당한 요청을 너무 많이 떨어뜨릴 것이다. quorum이다: 충분한 수의 관점이 corroborate하면 되고, 소수의 반대는 규모에 맞춰 조금 허용한다. 만장일치가 아니라 다수의 동의다.

중요한 건 이게 더 이상 경쟁상의 배려가 아니라는 점이다. 이제 공개 신뢰 CA가 당신에게 인증서를 발급한다면, 그건 여러 곳에서 당신 도메인을 corroborate한 결과다. 단일 관점 시대는 좋은 관행이 아니라 규칙으로 끝났다.

무엇은 못 고치는가, 공짜는 없으니까

MPIC를 다 풀린 문제인 양 팔면, 내가 남들을 비판할 때 지적하는 바로 그 짓을 하는 셈이다. 안 풀렸다.

이건 공격 비용을 올릴 뿐 없애지 않는다. 글로벌 경로 하이재킹 — 모든 관점에서 본 경로를 한꺼번에 재라우팅하는 — 을 해낼 수 있는 적은 여전히 quorum을 속일 수 있다. 훨씬 어렵고 훨씬 드물지만, 정직한 동사는 “불가능”이 아니라 “어렵다”다. 88%와 100% 사이의 그 틈이 바로 잔여 위험이 사는 곳이다.

MPIC는 또한 당신 인프라로 가는 네트워크 경로만 방어한다. 도메인 검증이 무너지는 다른 길에는 아무것도 안 한다: 탈취된 레지스트라 계정, 남이 차지할 수 있는 인프라를 가리키는 dangling DNS 레코드, 침해된 DNS 제공자. 공격자가 당신의 실제 DNS나 레지스트라 로그인을 쥐고 있으면 경로를 하이재킹할 필요가 없다 — 그가 모든 관점에서 권한 있는 답 그 자체다. 그리고 BGP 자체의 진짜 장기 해법인 RPKI 기반 route origin validation은 별개이고 아직 미완의 과제다. MPIC는 라우팅이 거짓말당할 수 있다고 가정하는 우회책이다. 실제로 그럴 수 있으니까.

패턴이 핵심이다

약어를 걷어내면 MPIC는 웹이 이미 한 번 한 수와 같다. Certificate Transparency 말이다: 단일 관측을 믿지 말고, 발급을 corroborate하게 만들어라. CT는 어떤 인증서도 비밀리에 존재해선 안 된다고 했다. MPIC는 어떤 검증도 한 관점에서만 보고 믿어선 안 된다고 한다. 둘 다 인정이다 — 단일 소스는(로그 하나든, 관점 하나든, 한 곳에서 보는 CA 하나든) 공격자가 당신과 그 사이에 끼어들 수 있는 대상이라는 인정.

이건 PKI만의 통찰이 아니다. 일반적인 통찰이고, 보안의 대부분은 이걸 계속 어렵게 다시 배운다. 당신의 보증이 한 관측에 의존하는 순간, 누군가는 그 앞에 앉는 길을 찾아낸다. 방어는 거의 언제나 더 영리한 단일 검사가 아니다. 하나 이상의 눈, 그리고 그것들이 일치하도록 요구하는 규율이다.

20년 동안, 당신 사이트의 신원을 보증하던 인증서는 경로에 관해 기계 하나에게 거짓말하면 위조될 수 있었다. 해법은 더 나은 암호가 아니었다. 단 하나의 관점을 믿기를 거부하는 것이었다.