DKIM(DomainKeys로 식별된 메일)

이메일 및 보안
발신 이메일에 디지털 서명을 추가하는 이메일 인증 방법으로, 수신자가 메시지가 변경되지 않았음을 확인할 수 있게 합니다.
← 용어집으로 돌아가기

DKIM이란?

DKIM(도메인키 식별 메일)은 발신 서버가 메일에 디지털 서명을 추가하는 이메일 인증 방식입니다. 수신 서버는 DNS에 게시된 공개 키로 서명을 검증해 전송 중 메일이 변경되지 않았고 주장된 도메인에서 발송되었는지 확인합니다.

DKIM의 작동 방식

1. 키 생성: 도메인 소유자가 공개 키와 개인 키의 쌍을 생성합니다.

2. DNS 게시: 공개 키를 TXT 레코드로 게시합니다.

3. 메시지 서명: 발신 메일에 개인 키로 서명합니다.

4. 서명 검증: 수신 서버가 공개 키를 가져와 서명을 검증합니다.

서명 과정

이메일을 보낼 때:

1. Mail server calculates a hash of message headers and body

2. Hash is encrypted with the private key (creating the signature)

3. Signature is added as a DKIM-Signature header

4. Email is transmitted

검증 과정

이메일을 받을 때:

1. Server extracts the DKIM-Signature header

2. Finds selector and domain (s=selector; d=domain.com)

3. Queries DNS for selector._domainkey.domain.com TXT record

4. Uses public key to decrypt the signature

5. Calculates its own hash of the message

6. Compares: match = pass, mismatch = fail

DKIM 레코드 형식

DKIM 레코드는 특정 하위 도메인에 있는 TXT 레코드입니다.

selector._domainkey.example.com.    IN    TXT    "v=DKIM1; k=rsa; p=MIGfMA0..."

레코드 구성 요소

태그설명예시
v버전v=DKIM1
k키 유형k=rsa
p공개 키(base64)p=MIGfMA0GCSqG...
t플래그(선택 사항)t=y (testing mode)
h해시 알고리즘h=sha256

셀렉터

셀렉터를 사용하면 도메인마다 여러 DKIM 키를 둘 수 있습니다.

google._domainkey.example.com       # Google Workspace

s1._domainkey.example.com # Sendgrid

mailchimp._domainkey.example.com # Mailchimp

각 이메일 서비스는 자체 셀렉터와 키를 제공합니다.

DKIM 서명 헤더

DKIM 서명은 다음과 같은 형태입니다.

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;

c=relaxed/relaxed; q=dns/txt;

h=from:to:subject:date:message-id;

bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;

b=AuUoFEfDxTDkHlLXSZEpZj79...

주요 필드:

DKIM 설정

Google Workspace에서 설정

1. 관리자 콘솔에서 앱 → Gmail → 이메일 인증 메뉴로 이동합니다.

2. DKIM 키를 생성합니다(2048비트 권장).

3. Google이 제공한 TXT 레코드를 추가합니다.

4. DKIM 서명을 활성화합니다.

제3자 서비스에서 설정

대부분의 이메일 서비스(SendGrid, Mailchimp 등)는 다음 중 하나를 제공합니다.

1. 관리형 키를 위한 CNAME 레코드

2. 공개 키가 포함된 TXT 레코드

SendGrid 예시:

s1._domainkey.example.com    CNAME    s1.domainkey.sendgrid.net

DKIM 확인

헤더를 표시하는 서비스(Gmail은 인증 결과를 표시)로 테스트 메일을 보냅니다.

명령줄 사용:
dig google._domainkey.example.com TXT
DomScan 사용:
curl "https://domscan.net/v1/health?domain=example.com"

# Reports DKIM status based on common selectors

DKIM 모범 사례

2048비트 키 사용

오래된 1024비트 키는 점점 취약해지고 있어 대부분의 제공업체는 2048비트를 사용합니다.

정기적으로 키 교체

매년 또는 보안 사고 후 DKIM 키를 교체합니다. 전환 전에 새 셀렉터로 새 키를 게시합니다.

중요한 헤더에 서명

From, To, Subject, Date, Message-ID가 서명에 포함되는지 확인합니다.

서명된 메시지 수정 금지

메일링 리스트나 전달 서비스가 내용을 수정하면 DKIM이 깨집니다. 전달 메일에는 ARC(Authenticated Received Chain)를 사용합니다.

DKIM의 한계

DKIM만으로는 스푸핑을 막을 수 없습니다. 메시지가 변경되지 않았다는 사실만 증명하므로, 공격자는 서명되지 않은 위조 메일을 보낼 수 있습니다. DMARC는 서명되지 않은 메시지의 처리 정책을 지정해 이 문제를 보완합니다.

이 지식을 활용하세요

DomScan의 API를 사용하여 도메인 가용성, 상태 등을 확인하세요.