이메일 발신자 인증이란?
이메일 발신자 인증 기법인 SPF, DKIM, DMARC는 내 도메인을 도용하여 스팸이나 피싱 메일을 발송하는 이메일 스푸핑(Spoofing)을 막기 위한 3대 핵심 표준 기술입니다. 이 세 가지 기술은 “발신자 IP 검증(SPF) → 메일 위변조 검증(DKIM) → 인증 실패 시 정책 결정(DMARC)” 순으로 서로 보완하며 작동합니다.
■ 3대 이메일 인증 기술 차이점 비교
| 구분 | SPF (Sender Policy Framework) |
DKIM (DomainKeys Identified Mail) |
DMARC (Domain-based Message Authentication, Reporting and Conformance) |
|---|---|---|---|
| 핵심 역할 | “이 IP가 메일을 보낼 자격이 있는가?” | “메일 내용이나 헤더가 중간에 변조되지 않았는가?” | “SPF/DKIM 실패 시 메일을 어떻게 처리할 것인가?” |
| 인증 방식 | 발신 서버의 IP 주소 목록 비교 | 메일 헤더에 전자서명(공개키 암호화) 첨부 | SPF 및 DKIM 검증 결과를 종합하여 정책 적용 |
| 주요 보호 대상 | 도메인 무단 도용(IP 레벨) | 메일 본문/헤더 위변조 및 스푸핑 | 브랜딩 도용, 종합적인 피싱/스팸 방지 |
| 설치 위치 | DNS(TXT 레코드) | DNS(TXT 레코드) + 메일 서버/솔루션 | DNS(TXT 레코드) |
■ 각 기술별 원리 및 기본 설정 방법
- SPF(Sender Policy Framework)
- 원리: 메일 수신 서버가 메일을 받았을 때, 발신 도메인의 DNS를 조회하여 “등록된 발신 IP 목록”에 메일을 보낸 서버 IP가 포함되어 있는지 확인합니다.
- 설정 형식:
- 호스트 이름(Host/Name): @ (또는 빈칸)
- 레코드 타입: TXT
- 값(Value):
v=spf1 ip4:211.123.45.67 include:_spf.google.com ~all
- v=spf1: SPF 버전 1 사용 선언
- ip4:211.123.45.67: 발신을 허용할 자체 서버 IP
- include:_spf.google.com: Google Workspace 등 외부 메일 서비스의 SPF 포함
- ~all: 목록에 없는 IP에서 온 메일은 SoftFail(스팸함 이동 권장) 처리 (-all 설정 시 HardFail/차단)
- DKIM(DomainKeys Identified Mail)
- 원리: 메일 발신 서버가 비대칭키 쌍을 생성하여 비밀키(Private Key)로 메일에 전자서명을 입혀 발송합니다. 수신 서버는 DNS에 등록된 공개키(Public Key)로 이 서명을 검증하여 변조 여부를 파악합니다.
- 설정 형식:
- 호스트 이름(Host/Name): google._domainkey(서비스마다 고유한 선택자(Selector) 지정)
- 레코드 타입: TXT
- 값(Value):
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ... (긴 공개키 문자열)
- v=DKIM1: DKIM 버전 선언
- k=rsa: 사용된 암호화 알고리즘 (RSA, Ed25519 등)
- p=…: 수신 서버가 검증할 때 사용할 공개키(Public Key)
- 작동 절차:
- 발신 서버: 비밀키로 서명 생성하기
발신 서버가 메일을 보낼 때, 메일 본문 전체를 암호화하면 용량이 너무 커집니다. 그래서 메일의 주요 내용(해시값)만 추출하여 비밀키로 암호화(서명)합니다.[메일 헤더 일부 (From, To, Subject 등)] + [메일 본문 (Body)] │ ▼ 1. 해시 함수 (SHA-256) │ ▼ [원본 해시값 A] │ ▼ 2. 발신 서버의 비밀키로 암호화 │ ▼ [전자 서명값] │ ▼ 3. 메일 헤더(DKIM-Signature)에 첨부하여 발송- 해시값 추출: 발신 서버는 메일의 주요 헤더(From, To, Subject 등)와 메일 본문(Body)을 하나로 묶어 SHA-256 해시 함수에 넣습니다. 그러면 메일의 고유한 지문인 [원본 해시값 A]가 생성됩니다.
- 비밀키 암호화: 발신 서버는 자기만 가지고 있는 [DKIM 비밀키]로 이 [원본 해시값 A]를 암호화합니다. 이 암호화된 결과물이 바로 ‘전자서명’입니다.
- DKIM 헤더 추가: 생성된 서명값을 메일 헤더의 DKIM-Signature: 항목에 포함시켜 수신 서버로 발송합니다.
- 수신 서버: 공개키로 검증하고 변조 여부 판단하기
메일을 받은 수신 서버는 발신 도메인의 DNS에서 [DKIM 공개키]를 가져와 서명을 검증합니다.[수신된 메일 헤더 & 본문] [DKIM-Signature 헤더 속 서명값] │ │ ▼ ▼ 1. 해시 함수 (SHA-256) 2. DNS에서 가져온 공개키로 복호화 │ │ ▼ ▼ [계산된 해시값 B] [복호화된 해시값 A] │ │ └───────────────── 3. 두 해시값 비교 ──────────────┘ │ ┌──────────┴──────────┐ [일치] [불일치] │ │ ⭕ 변조 안 됨! ❌ 메일 변조됨!- 재계산: 수신 서버는 자신이 받은 메일의 헤더와 본문을 똑같은 SHA-256 해시 함수에 넣어 [계산된 해시값 B]를 새로 만들어냅니다.
- 복호화 (공개키 활용): 수신 서버는 DKIM-Signature 헤더에 적힌 도메인과 selector 정보를 확인하여, 발신 도메인의 DNS TXT 레코드에서 [공개키]를 조회합니다. 이 공개키로 메일 헤더에 첨부되어 온 전자서명을 복호화하여 [복호화된 해시값 A]를 확보합니다.
- 비교 및 변조 판단: [계산된 해시값 B]와 [복호화된 해시값 A]가 일치하는지 확인합니다. 일치하면 무결성이 입증된 것이고, 불일치하면 “메일이 중간에 변조되었다”고 판단합니다.
- 발신 서버: 비밀키로 서명 생성하기
- DMARC(Domain-based Message Authentication, Reporting, and Conformance)
- 원리: 도메인의 소유자는 SPF와 DKIM 인증이 실패했을 때 수신 서버가 메일을 어떻게 처리할지(통과, 스팸, 격리, 차단) 지침을 부여하고, 인증 결과를 도메인 관리자에게 리포트로 보고받는 규칙입니다.
- 설정 형식:
- 호스트 이름(Host/Name): _dmarc
- 레코드 타입: TXT
- 값(Value):
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourdomain.com; pct=100
- v=DMARC1: DMARC 버전 선언
- p=: 인증 실패 시 메일 처리 정책
-p=none: 아무 조치 안 함 (모니터링 모드)
-p=quarantine: 스팸함/격리소로 이동
-p=reject: 메일 수신 자체를 즉시 거부(차단) - rua=mailto:…: DMARC 분석 요약 리포트를 받을 이메일 주소
- pct=100: 정책을 적용할 메일의 비율 (100%)
