DKIM 레코드란 무엇인가요?
DKIM(DomainKeys Identified Mail, RFC 6376)은 서버가 보내는 모든 메시지에 디지털 서명을 추가합니다. 서명은 서버에 보관되는 개인 키로 만들어집니다. 짝이 되는 공개 키는 selector._domainkey.yourdomain.com에 TXT 레코드로 DNS에 게시되며, 수신 서버는 이 키를 가져와 메시지가 실제로 내 도메인에서 왔는지, 전송 중에 바뀌지 않았는지 확인합니다.
셀렉터는 default나 s1처럼 직접 정하는 이름표일 뿐입니다. 셀렉터 덕분에 한 도메인이 서비스별 또는 키 세대별로 여러 키를 동시에 게시할 수 있습니다. 또한 전달(forwarding) 후처럼 SPF가 정렬되지 않을 때, 내 도메인의 유효한 DKIM 서명이 있어야 메일이 DMARC를 통과할 수 있습니다.

DKIM 키를 직접 생성해야 하나요?
대부분은 그렇지 않습니다. Google Workspace는 키를 대신 만들어 주고(관리 콘솔, 앱, Google Workspace, Gmail, 이메일 인증), Microsoft 365는 Microsoft가 관리하는 키를 가리키는 CNAME 레코드 두 개, selector1._domainkey와 selector2._domainkey를 사용합니다. 대부분의 뉴스레터와 트랜잭션 메일 서비스도 자체 레코드를 제공합니다.
직접 키 쌍이 필요한 경우는 OpenDKIM이나 rspamd를 쓰는 Postfix, 또는 Exim처럼 메일 서버를 직접 운영할 때, 혹은 앱이나 릴레이가 개인 키 업로드를 요구할 때입니다. 이 생성기는 바로 그런 경우를 위한 도구입니다.
Advertisement
DKIM 키 생성 및 레코드 게시 방법
셀렉터는 영문자, 숫자, 하이픈으로 된 어떤 이름이든 됩니다. s2026처럼 날짜 기반으로 정하면 키 교체를 추적하기 쉽습니다.
거의 모든 경우 RSA 2048비트가 알맞은 선택입니다. 키 쌍은 페이지가 열리는 순간 브라우저에서 만들어지며, 유형을 바꿀 때마다 다시 생성됩니다.
다운로드해 메일 서버에 설치하세요. 키는 어디에도 저장되지 않으므로 잃어버리면 새 키 쌍을 만들어야 합니다.
호스트 selector._domainkey와 생성된 값으로 TXT 레코드를 추가하고, 자신에게 메시지를 보낸 뒤 DKIM 검사기로 확인하세요.
DKIM 레코드 구문
DKIM 키 레코드는 세미콜론으로 구분한 tag=value 쌍의 목록입니다. 필수 항목은 p=뿐이지만 v와 k도 함께 게시하세요.
레코드가 DKIM 키임을 나타냅니다. 이 태그가 있다면 반드시 맨 앞에 와야 합니다.
키 알고리즘입니다. 태그가 없으면 rsa가 기본값입니다.
base64로 인코딩한 공개 키입니다. p=가 비어 있으면 키가 폐기되었다는 뜻이며, 그 키로 만든 서명은 실패합니다.
도메인이 DKIM을 테스트 중인 것으로 취급하도록 수신 서버에 요청합니다. 서명이 검증되면 제거하세요.
엄격 모드: 서명의 i= 식별자는 하위 도메인이 아니라 d= 도메인과 정확히 같아야 합니다.
해시 알고리즘(h=sha256)이나 키를 사용하는 서비스(s=email)를 제한합니다. 대부분의 레코드는 생략합니다.
Advertisement
RSA 2048 vs 1024 vs 4096 vs Ed25519
RSA 2048비트: 권장 크기입니다. RFC 8301은 서명자가 최소 2048비트를 사용해야 한다고 명시합니다. TXT 값은 약 410자입니다.
RSA 1024비트: 여전히 검증되며 수신 서버가 받아들이는 최소 크기지만, 오늘날 기준으로는 약합니다. 더 짧은 키로 만든 서명은 유효하지 않은 것으로 처리됩니다. DNS 호스팅이 더 긴 값을 저장할 수 없을 때만 사용하세요.
RSA 4096비트: 수신 서버는 4096비트까지의 키를 검증해야 하지만, 값이 약 750자에 달해 일부 DNS 관리 화면과 오래된 시스템에서 제대로 처리되지 않습니다. 2048 대비 얻는 이점도 거의 없습니다.
Ed25519: 훨씬 짧은 최신 키입니다(레코드 전체가 약 66자, RFC 8463). 아직 모든 수신 서버가 검증하지는 않으므로, 두 번째 셀렉터로 RSA 키 서명도 함께 하세요.
DKIM 레코드가 여러 문자열로 나뉘는 이유는?
TXT 문자열 하나에는 최대 255자까지 들어가는데, 2048비트 DKIM 값은 이보다 깁니다. DNS는 값을 따옴표로 묶은 여러 문자열로 저장하고 수신 서버가 이를 다시 이어 붙이는 방식으로 이 문제를 해결합니다.
대부분의 DNS 관리 화면은 긴 값을 그대로 받아 자동으로 나눠 줍니다. Amazon Route 53과 BIND 존 파일은 나뉜 형식을 직접 입력해야 하며, 존 파일 버튼이 바로 그 형식을 제공합니다(Route 53에서는 따옴표로 묶인 문자열만 한 줄에 붙여 넣으세요). 키 안에 공백이나 줄바꿈을 넣지 말고, 나뉜 부분을 각각 별도 레코드로 만들지 마세요.
Advertisement
메일 서버에 키 설정하기
개인 키를 default.private(사용하는 셀렉터 이름으로)로 저장하고, 서명 서비스만 읽을 수 있게 한 뒤 서명 프로그램이 이 파일을 가리키도록 설정하세요. example.com과 셀렉터 default를 쓰는 OpenDKIM 예시입니다:
sudo mkdir -p /etc/opendkim/keys/example.com
sudo mv default.private /etc/opendkim/keys/example.com/
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/default.private
sudo chmod 600 /etc/opendkim/keys/example.com/default.privatedefault._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private*@example.com default._domainkey.example.comopenssl genrsa -out default.private 2048
openssl rsa -in default.private -pubout -out default.publicopendkim-genkey -b 2048 -d example.com -s defaultDKIM 키 교체 방법
새 셀렉터(예: s2027)로 새 키 쌍을 생성합니다.
새 TXT 레코드를 게시하고 모든 곳에서 조회될 때까지 기다립니다.
메일 서버가 새 셀렉터로 서명하도록 전환합니다.
이전 키로 서명한 메일이 전달되고 검증될 때까지 일주일 정도 이전 레코드를 유지합니다.
그다음 이전 레코드를 삭제하거나,
p=를 비운 채 게시해 키를 폐기합니다.
Advertisement
더 많은 이메일 인증 도구
DKIM은 수신 서버가 확인하는 세 가지 레코드 중 하나입니다. 나머지도 갖추세요: