167. SCT (Signed Certificate Timestamp)
⚠️ 이 문서는 Certificate Transparency(CT) 인프라에서 가장 핵심적인 부품으로, CA가 갓 구운 인증서를 공개 로그 서버에 성공적으로 등재했음을 암호학적으로 증명하여 브라우저의 깐깐한 입국 심사를 무사 통과하게 해주는 절대 통행증(영수증)인 SCT를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: SCT(Signed Certificate Timestamp)는 CT 로그 서버가 CA로부터 발급 대기 중인 인증서(Pre-Certificate)를 전달받아 자신의 머클 트리 장부에 기록한 뒤, "내가 정확한 시간에 이 인증서를 장부에 썼음을 보증함"이라고 로그 서버의 마스터키로 전자 서명하여 뱉어내는 1회용 디지털 영수증이다.
- 가치: 브라우저는 웹 서버(네이버 등)에 접속할 때 인증서 안에 이 SCT 영수증이 단단히 꽂혀있는지, 그리고 그 영수증의 서명이 구글이나 클라우드플레어 등 믿을 만한 로그 서버의 것이 맞는지 검사함으로써 가짜(위조) 인증서의 브라우저 렌더링을 0.1초 만에 물리적으로 차단한다.
- 융합: 이 영수증(SCT)은 인터넷을 건너는 방법이 유연하다. 인증서 본체 안에 X.509 확장자(Extension)로 아예 박음질(Embedding)되어 발급되거나, TLS 핸드셰이크 도중에 OCSP Stapling 응답에 찰싹 붙어서 실시간으로 융합 전송되기도 한다.
Ⅰ. 개요 및 왜 '영수증'이 브라우저 차단의 핵심인가? (Context & Necessity)
해커가 이란의 부패한 CA를 협박해 google.com의 가짜 인증서를 1장 몰래 발급받았다고 치자.
해커가 이 가짜 인증서를 서버에 깔고 앨리스(피해자)의 접속을 유도한다.
앨리스의 크롬 브라우저가 이 가짜 인증서를 검사한다. "어라? CA 도장(서명)은 진짜 구글 도장이 맞네? (CA가 진짜 도장으로 찍어줬으니까). 근데 잠깐..."
크롬 브라우저의 가장 무서운 방어 로직이 여기서 발동한다. "이 인증서 엉덩이에 전 세계 광장 전광판(CT 로그 서버)에 박제했다는 영수증(SCT) 3장이 안 붙어있잖아? 영수증이 없다는 건 광장 전광판에 안 올리고 음지에서 몰래 발급받은 더러운 인증서라는 뜻이군. 즉시 접속 차단(ERR_CERTIFICATE_TRANSPARENCY_REQUIRED)!!"
이처럼 SCT는 인증서 자체의 위조 여부와 상관없이, "이 인증서의 탄생이 전 세계 감시자들에게 떳떳하게 공개되었는가?"를 증명하는 유일한 암호학적 면죄부다.
📢 섹션 요약 비유: 시장에서 소고기를 샀는데, 도축장 직인이 찍혀있습니다(CA 서명). 하지만 경찰(브라우저)은 도축장 직인만 믿지 않습니다. "이 소가 언제, 어느 검사소를 거쳤는지 바코드로 쫙 찍혀 나오는 쇠고기 이력 추적 영수증(SCT)을 보여줘! 영수증 없으면 아무리 겉보기엔 진짜 소고기 같아도 밀도살된 불법 고기니까 압수야!"
Ⅱ. SCT의 탄생 과정: Pre-Certificate의 묘수
SCT가 만들어지고 인증서에 찰싹 달라붙는 과정은 알에서 병아리가 깨는 것만큼이나 정교한 시간 차 마법을 동원한다.
"인증서 안에 영수증(SCT)을 넣으려면 인증서가 이미 만들어져 있어야 하는데, 인증서가 완성되기도 전에 어떻게 영수증을 먼저 받아와서 집어넣지? 닭이 먼저야, 달걀이 먼저야?"
이 논리적 모순을 해결하기 위해 **Pre-Certificate(예비 인증서)**라는 꼼수가 탄생했다.
- 가봉(Pre-Cert): CA가 네이버에게 발급할 인증서의 뼈대(이름, 날짜, 공개키 등)를 99% 완성한다. 하지만 도장을 완전히 쾅 찍진 않은 **가봉 상태의 '예비 인증서'**를 만든다.
- 영수증 받기: CA가 이 예비 인증서를 전 세계 CT 로그 서버(구글 등) 3곳에 휙 던진다. 로그 서버들은 이 예비 인증서를 장부에 묶어두고, "ㅇㅋ, 접수했음!" 하고 각각 **SCT 1, 2, 3 (영수증)**을 발급해 CA에게 돌려준다.
- 봉합(Embedding): CA는 받아온 3장의 SCT 영수증을 예비 인증서 뱃속(X.509 v3 Extension 공간)에 쑤셔 넣고, 그제야 진짜 CA 마스터 도장을 쾅 찍어 **'SCT가 뼛속에 내장된 완벽한 최종 인증서'**를 네이버에게 발급해 준다.
┌─────────────────────────────────────────────────────────────────────────────────┐
│ SCT (영수증)가 인증서 뱃속으로 들어가는 닭과 달걀의 시각화 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ [ 🏛️ CA (DigiCert) 공장 ] │
│ (1) 껍데기만 있는 "Pre-Certificate (예비 인증서)" 제작 │
│ │ │
│ ├──▶ [구글 CT 로그 서버] "장부에 적음! 여기 📜 SCT-1" │
│ ├──▶ [클플 CT 로그 서버] "장부에 적음! 여기 📜 SCT-2" │
│ │ │
│ ▼ │
│ (2) 돌아온 영수증(SCT-1, 2) 2장을 예비 인증서 X.509 확장팩 빈칸에 밀어 넣음! │
│ │ │
│ (3) 쾅! 내 마스터 CA 비밀키로 도장 찍어 완벽 밀봉 (Tamper-proof) │
│ │ │
│ ▼ │
│ 🎉 [ SCT 영수증이 뼛속까지 내장된 완벽한 HTTPS 네이버 인증서 탄생! ] │
│ │
│ ★ 방어 효과: 해커가 몰래 인증서를 만들려 해도, CT 로그 서버에 등록하여 SCT를 │
│ 받아오지 않으면 브라우저(크롬)에서 무조건 에러를 뿜으며 접속이 박살 난다. │
└─────────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 브라우저가 네이버에 접속하면 인증서 안에 든 SCT 영수증들을 뽑아내어 전자서명을 검사한다. "이 영수증에 찍힌 서명이 진짜 구글 로그 서버의 서명이 맞나?" 일치한다면, 크롬은 네이버가 합법적으로 발급된 안전한 서버라고 100% 확신하며 녹색 파란 불(자물쇠)을 켜준다.
- 📢 섹션 요약 비유: 옷을 만들 때 "명품 정품 인증서(SCT)" 패치를 어떻게 붙일까요? 옷을 다 만들고 밖에 스티커로 붙이면 도둑이 떼어버립니다. 그래서 옷감을 짜는 공장(Pre-Cert) 중간 단계에 이탈리아 명품 본사(CT 로그)에 옷감을 보내 "정품 확인 라벨(SCT)"을 아예 실과 함께 꿰매어 박아버리고, 마지막에 옷을 완성(최종 서명)합니다. 밖에서는 절대 이 라벨을 떼거나 조작할 수 없습니다.
Ⅲ. 실무 적용: SCT를 브라우저에 전달하는 3가지 길
대부분의 인증서는 위에서 설명한 "인증서 안에 박음질(Embedding)"하는 방식을 쓰지만, 가끔 구형 시스템이나 상황에 따라 다른 2가지 배달 방법이 융합되어 쓰이기도 한다. (개발자가 서버 세팅 시 알아둬야 할 지식)
- X.509 인증서 내장 (X.509 v3 Extension):
- 위에서 설명한 가장 보편적이고 우아한 방법. 서버 관리자는 아무 세팅을 안 해도, CA가 발급해 줄 때 알아서 영수증을 뱃속에 박아서 주니까 100% 자동화되어 편하다.
- TLS 핸드셰이크 시 별도 전송 (TLS Extension):
- 서버(네이버)가 인증서를 받고 나서, 나중에 자기가 직접 CT 로그 서버에 요청해 영수증(SCT)을 받아온다.
- 브라우저가 접속할 때 "인증서 파일" 따로 주고, "SCT 영수증 파일"을 TLS
Server Hello메시지 꼬리에 따로 달아서 휙 던져주는 방식.
- OCSP Stapling 에 붙여서 전송:
- 서버가 매일 아침 CA에서 '인증서 정상 상태 확인서(OCSP 응답)'를 떼올 때, CA가 그 확인서 뭉치 안에 SCT 영수증을 아예 같이 호치키스로 쾅 찍어서(Stapling) 주는 방식. 브라우저는 OCSP 확인서와 영수증을 한 방에 검사한다.
어떤 길로 배달되든, 크롬 브라우저의 뱃속에 2~3장의 합격 SCT 영수증만 무사히 도착하면 접속은 문제없이 통과된다.
Ⅳ. 결론
"영수증이 없으면 거래는 무효다. 사이버 공간의 영수증, SCT." SCT(서명된 인증서 타임스탬프)는 암호학적 완벽함(CA 서명)을 과신하다 뒤통수를 맞았던 인류가 고안해 낸 '사회적 감시망의 출입증'이다. 단 한 장의 가짜 인증서라도 세상에 몰래 나오는 것을 막기 위해, 구글과 애플은 전 세계의 모든 암호 통신(HTTPS) 톨게이트에 이 SCT라는 영수증 확인 절차를 헌법으로 강제해 두었다. 이 짧은 몇 바이트의 시간 기록 도장 덕분에, 부패한 권력자(Rogue CA)의 음지 밀실 거래는 영원히 종말을 고했다.
📌 관련 개념 맵
- 소속 인프라: Certificate Transparency (CT, 인증서 투명성 생태계)
- 발급 주체: CT Log Server (구글, 클라우드플레어 등 독립 운영 기관)
- 전송/내장 기술: Pre-Certificate (예비 인증서), X.509 v3 Extension
- 검증 주체: 웹 브라우저 (Chrome, Safari 등 Auditor 역할)
👶 어린이를 위한 3줄 비유 설명
- 동사무소(CA)가 나쁜 도둑에게 몰래 가짜 신분증을 찍어주던 사건 때문에, 사람들은 신분증을 만들 때 무조건 '마을 전광판'에 이름을 띄우기로 했어요.
- 마을 전광판(로그 서버)은 내 이름을 올리면 "2026년 4월, 네이버 이름 확실히 띄웠음!"이라는 확인 영수증(SCT)을 떼주죠.
- 브라우저 경찰은 신분증을 검사할 때 얼굴만 보지 않고, 뱃속에 이 '전광판 영수증(SCT)'이 3장 들어있는지 깐깐하게 검사해서, 영수증이 없으면 그 자리에서 가짜로 탕탕! 판결 내린답니다!