DKIM 서명
메시지에 암호화 서명을 적용합니다.
DKIM 서명은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
DKIM이 제공하는 기능
DKIM (DomainKeys Identified Mail)은 발신 이메일에 암호학적 서명을 첨부합니다. 수신 서버는 이 서명을 검증하여 다음 두 가지를 확인할 수 있습니다:
- 메시지가 실제로 서명 도메인의 승인을 받았는지
- 서명된 콘텐츠가 전송 중 변경되지 않았는지
SPF가 서버의 발신 권한을 인증하는 반면, DKIM은 메시지 자체를 인증하며 이 서명은 전달되어도 유지됩니다.
공개 key 암호화 기초
DKIM은 비대칭 암호화를 사용합니다. 도메인 소유자는 key 쌍을 보유합니다:
- 비밀 key는 발신 메일 서버에 비밀로 보관되며 서명하는 데 사용됩니다
- 공개 key는 DNS에 게시되며 누구나 검증하는 데 사용할 수 있습니다
비밀 key를 보유한 사람만 유효한 서명을 생성할 수 있으므로, 검증에 성공하면 메시지가 합법적인 도메인에서 왔다는 사실이 증명됩니다.
서명 과정
발신 서버가 메시지를 전송할 때 선택한 헤더와 본문에 대한 서명을 계산한 다음 DKIM 서명 헤더를 추가합니다.
Steps on the sender side:
1. Select headers to sign (From, Subject, Date, ...)
2. Hash the message body
3. Build the DKIM-Signature header with those fields
4. Sign the hash with the private key
5. Attach the signature to the outgoing messageDKIM 서명 헤더의 구성
DKIM 서명 헤더에는 수신 서버가 검증하는 데 필요한 매개변수가 들어 있습니다:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=company.com; domain that signed
s=mail2024; selector (which key)
h=from:subject:date; signed headers
bh=base64bodyhash; body hash
b=base64signature the signature itselfDNS의 선택자와 공개 key
선택자(s= 태그)는 수신 서버에 가져와야 할 공개 key를 알려 줍니다. key는 예측 가능한 DNS 위치에 있습니다:
Location: <selector>._domainkey.<domain>
Example DNS TXT record:
mail2024._domainkey.company.com. IN TXT \
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."
p = the base64-encoded public key검증 과정
메시지를 수신하면 검증 서버는 다음과 같이 과정을 되돌립니다:
- DKIM 서명에서
d=도메인과s=선택자를 읽습니다 - DNS에서
selector._domainkey.domain의 공개 key를 가져옵니다 - 본문 해시와 헤더 해시를 다시 계산합니다
- 공개 key를 사용하여 서명이 일치하는지 검증합니다
서명이 유효하면 DKIM은 통과합니다. 메시지가 수정되었거나 잘못된 key로 서명되었다면 실패합니다.
본문 해시로 변조 감지
본문 해시 필드가 DKIM에서 변조 여부를 확인할 수 있게 합니다. 발신자는 본문을 해시하고 그 해시를 서명된 데이터에 포함합니다.
전송 중 누군가 메시지 본문을 변경하면 수신 서버가 다시 계산한 해시가 서명된 bh와 일치하지 않으므로 검증에 실패합니다. 이것이 DKIM이 단순한 발신자 인증을 넘어 무결성을 제공하는 방식입니다.
정규화
중간의 메일 서버는 줄을 다시 배치하거나 공백을 조정하는 등 작고 무해한 변경을 자주 수행합니다. 이러한 변경 때문에 유효한 서명이 깨지지 않도록 DKIM은 정규화(c= 태그)를 사용합니다.
- 엄격한 방식 — 거의 모든 변경으로 서명이 깨집니다
- 완화된 방식 — 공백과 헤더 대소문자 변경을 허용합니다
다양한 메일 인프라에서 안정적으로 작동하도록 대부분의 배포 환경에서는 relaxed/relaxed를 사용합니다.
선택자로 안전한 key 교체
선택자는 단순한 레이블이 아니라 안전한 key 교체를 가능하게 합니다. key가 유출될 경우 노출을 제한할 수 있도록 DKIM key를 주기적으로 교체해야 합니다.
교체 과정:
- 새 선택자를 사용하여 새 key 쌍을 생성합니다(예:
mail2025) - 새 공개 key를 DNS에 게시합니다
- 서명 주체가 새 선택자를 사용하도록 전환합니다
- 전송 중인 메일이 전달될 때까지 이전 선택자를 DNS에 남겨 둔 다음 제거합니다
새 선택자를 사용하면 서명을 검증할 수 없는 공백 기간을 피할 수 있습니다.
DKIM은 전달을 견딥니다
SPF와 달리 DKIM은 전달되어도 유효합니다. 서명이 메시지와 함께 전달되므로 서명된 헤더와 본문이 변경되지 않는 한 전달된 메시지도 계속 검증됩니다.
이는 SPF의 약점을 완벽하게 보완합니다. 메시지가 전달되면 연결 IP가 변경되어 SPF가 실패할 수 있지만, DKIM은 여전히 통과할 수 있으므로 DMARC가 합법적인 메일을 허용할 수 있습니다.
DKIM의 제한 사항
DKIM은 강력하지만 단독으로는 완전하지 않습니다:
- 도메인이 메시지에 서명했다는 것은 증명하지만, 서명 도메인이 표시되는 발신자 헤더와 일치하도록 강제하지는 않습니다. 이것이 DMARC 정렬입니다
- 공격자는 자신의 도메인의 유효한 DKIM key로 메일에 서명할 수 있습니다
- 비밀 key가 유출되면 공격자는 해당 key가 교체되어 폐기될 때까지 유효한 서명을 위조할 수 있습니다
스푸핑에 효과적으로 대응하려면 DKIM을 DMARC와 결합해야 합니다.
빠른 확인
DKIM에 대한 이해도를 확인해 보십시오.
복습
DKIM이 메시지에 서명하는 방식을 배웠습니다:
- DKIM은 발신자와 무결성을 증명하는 암호학적 서명을 첨부합니다
- 서버에서는 비밀 key로 서명하고, 공개 key는 DNS의 선택자 아래에 게시합니다
- 본문 해시는 변조를 감지하고, 정규화는 무해한 변경을 허용합니다
- 선택자는 안전한 key 교체를 가능하게 하며, SPF가 실패하는 전달 상황에서도 DKIM은 유효하게 유지됩니다
- DKIM은 서명을 표시되는 발신자와 연결하기 위해 여전히 DMARC 정렬이 필요합니다
다음에는 DMARC 정책과 보고서를 사용하여 SPF와 DKIM을 함께 묶는 방법을 배웁니다.
자주 묻는 질문
“DKIM 서명” 강의는 무료인가요?
네 — “DKIM 서명” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“DKIM 서명”에서 뭘 배우나요?
메시지에 암호화 서명을 적용합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“DKIM 서명” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.