기술 · 출처 기반 답변
DKIM-Signature 헤더란? 구조와 동작 방식
DKIM 서명 헤더는 발신 서버가 이메일 메시지에 추가하는 전용 필드입니다. 메시지 본문과 선택된 헤더의 암호화 해시를 담고 있어, 수신 메일 서버가 도메인 소유자가 해당 이메일을 승인했고 전송 중에 변경되지 않았음을 검증할 수 있습니다.
동작 원리
발신 서버는 개인 키로 이메일 내용의 디지털 서명을 만들고, 이 서명을 DKIM-Signature 헤더에 삽입합니다. 수신 서버는 DNS TXT 레코드를 통해 대응하는 공개 키를 가져옵니다. 공개 키로 서명을 복호화해 얻은 해시를 수신한 메시지에서 새로 계산한 해시와 비교하면, 수신자는 메시지가 진본임을 확인할 수 있습니다.
발신자에게 중요한 이유
DKIM은 이메일이 전달되어도 유지된다는 점에서 SPF가 제공하지 못하는 신뢰 계층을 제공합니다. 메시지 내용이 그대로이며 서명에 표시된 도메인이 실제 발신자임을 증명합니다. 덕분에 메시지가 스팸으로 분류되거나 스푸핑으로 의심받을 가능성이 줄어들며, 이는 좋은 발신자 평판을 유지하는 데 매우 중요합니다.
흔한 운영 실수
자주 발생하는 오류는 중요한 헤더를 서명에 포함하지 않는 것으로, 릴레이가 해당 헤더를 수정하면 검증에 실패합니다. 또 다른 흔한 문제는 키 교체 실패로, 서버의 개인 키는 갱신되었는데 DNS의 공개 키 레코드는 예전 그대로인 경우입니다. SendHQ 무료 도구(https://sendhq.cc/tools)로 현재 인증 상태를 확인할 수 있습니다.
헤더 예시
일반적인 헤더는 다음과 같습니다. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector1; h=from:to:subject:date; bh=hash_of_body; b=digital_signature_value. d 태그는 도메인, s는 DNS 레코드용 셀렉터, bh는 본문 해시를 나타냅니다.
검증 과정
메시지가 도착하면 수신자는 DKIM-Signature 헤더를 파싱해 도메인과 셀렉터를 찾습니다. 그런 다음 selector._domainkey.example.com에서 공개 키를 DNS로 조회합니다. 암호화 검사를 통과하면 메시지는 DKIM-pass로 표시됩니다. 해시가 일치하지 않거나 키가 없으면 DKIM-fail 또는 neutral 결과가 나옵니다.
팀에서 자주 묻는 질문
DKIM은 이메일 본문을 암호화하나요?
아니요. DKIM은 개인 정보 보호를 위해 내용을 암호화하지 않습니다. 무결성과 진위를 보장하는 디지털 서명을 제공하므로, 내용은 그대로 읽을 수 있지만 서명을 깨뜨리지 않고는 변경할 수 없습니다.
DKIM 서명이 유효하지 않으면 어떻게 되나요?
유효하지 않은 서명은 도메인 소유자가 설정한 DMARC 정책에 따라 수신 서버가 이메일의 스팸 점수를 높이거나 아예 거부하는 결과로 이어질 수 있습니다.
하나의 이메일에 DKIM 서명이 여러 개일 수 있나요?
네. 이메일에는 서명이 여러 개 있을 수 있습니다. 메시지가 메일링 리스트나 전달 서비스를 거치면서 원래 서명은 유지한 채 자체 서명을 추가할 때 흔히 발생합니다.
1차 출처
- RFC 6376: DKIM(DomainKeys Identified Mail) 서명 — RFC Editor
- RFC 7489: 도메인 기반 메시지 인증, 보고 및 준수(DMARC) — RFC Editor