DKIM (DomainKeys Identified Mail)
DKIM은 이메일 인증을 위한 중요한 기술로, 이메일이 전송 과정에서 변조되지 않았으며 실제로 발신자가 주장하는 도메인에서 보낸 것임을 확인할 수 있게 해준다.
디지털 서명을 사용하여 이메일의 무결성과 출처를 검증하는 방식으로 작동한다.
DKIM은 현대 이메일 인증의 핵심 구성 요소로, 이메일이 전송 과정에서 변조되지 않았으며 실제로 주장하는 도메인에서 왔음을 보장한다. SPF 및 DMARC와 함께 사용할 때, DKIM은 피싱, 스푸핑 및 스팸으로부터 이메일 시스템을 보호하는 강력한 도구이다.
DKIM을 효과적으로 구현하려면 강력한 암호화 키, 적절한 서명 범위, 안전한 키 관리 및 정기적인 모니터링이 필요하다. 이러한 모범 사례를 따르면 이메일 보안을 강화하고 전달률을 향상시킬 수 있다.
특히 DKIM은 단독으로도 유용하지만, SPF와 DMARC와 함께 사용할 때 가장 효과적인 이메일 보안 솔루션을 제공한다는 점을 기억하는 것이 중요하다.
DKIM의 기본 개념
DKIM은 공개키 암호화 기술을 활용하여 이메일에 디지털 서명을 추가한다.
이 과정은 다음과 같이 진행된다:
- 발신 도메인은 비공개키와 공개키 쌍을 생성한다.
- 비공개키는 발신 메일 서버에 안전하게 보관된다.
- 공개키는 도메인의 DNS 레코드에 게시된다.
- 이메일을 보낼 때, 발신 서버는 비공개키를 사용하여 이메일의 특정 부분(헤더 필드 등)에 디지털 서명을 생성한다.
- 이 서명은 이메일 헤더에 DKIM-Signature로 포함된다.
- 수신 서버는 발신 도메인의 DNS에서 공개키를 조회하고, 이를 사용하여 서명을 검증한다.
DKIM의 중요성
DKIM은 이메일 보안 및 전달성에 여러 가지 중요한 이점을 제공한다:
- 이메일 위조 방지: 디지털 서명을 통해 이메일이 실제로 주장하는 도메인에서 왔는지 확인할 수 있다.
- 이메일 무결성 보장: 이메일이 전송 과정에서 변조되지 않았음을 보장한다.
- 스팸 필터링 개선: 수신자의 이메일 시스템이 합법적인 이메일과 스팸을 더 정확하게 구분할 수 있게 한다.
- 도메인 평판 보호: 사이버 범죄자가 여러분의 도메인을 사칭하여 피싱 이메일이나 스팸을 보내는 것을 방지한다.
- 이메일 전달률 향상: 많은 이메일 제공업체가 DKIM을 확인하므로, 올바른 DKIM 구현은 이메일이 받는 사람의 받은 편지함에 도달할 가능성을 높인다.
DKIM 작동 방식 상세 설명
1. 키 생성 및 DNS 설정
DKIM을 구현하는 첫 번째 단계는 비공개키와 공개키 쌍을 생성하는 것입니다:
- 비공개키는 발신 메일 서버에 안전하게 저장됩니다.
- 공개키는 DNS TXT 레코드에 게시됩니다.
DNS 레코드는 일반적으로 다음과 같은 형식을 가집니다:
|
|
여기서:
- selector는 여러 DKIM 키를 구분하기 위한 식별자입니다.
- _domainkey는 DKIM 레코드임을 나타내는 고정 문자열입니다.
- yourdomain.com은 여러분의 도메인입니다.
- v=DKIM1은 사용되는 DKIM 버전을 나타냅니다.
- k=rsa는 사용되는 암호화 알고리즘입니다.
- **p=MIGfMA0GCS…**는 인코딩된 공개키입니다.
2. 서명 과정
이메일이 발신 서버에서 전송될 때:
- 서버는 이메일의 특정 부분(일반적으로 From, Subject, Date와 같은 헤더 필드와 선택적으로 본문)을 선택합니다.
- 이 선택된 부분에 대해 해시값을 계산합니다.
- 비공개키를 사용하여 이 해시값에 디지털 서명을 생성합니다.
- 서명과 함께 어떤 헤더가 서명되었는지, 어떤 알고리즘이 사용되었는지 등의 메타데이터를 포함하는 DKIM-Signature 헤더를 이메일에 추가합니다.
DKIM-Signature 헤더 예시:
3. 검증 과정
이메일이 수신 서버에 도착하면:
- 수신 서버는 DKIM-Signature 헤더에서 도메인(d=)과 선택자(s=)를 추출합니다.
- DNS 쿼리를 통해 해당 도메인의 공개키를 조회합니다:
selector._domainkey.domain.com
- 서명된 헤더 필드(h=)를 확인하고 동일한 해시 알고리즘(a=)을 사용하여 해시값을 계산합니다.
- 공개키를 사용하여 DKIM 서명(b=)을 검증합니다.
- 계산된 해시값과 서명에서 추출된 해시값이 일치하면 검증이 성공합니다.
DKIM 구성 요소 상세 설명
DKIM-Signature 헤더 필드
DKIM-Signature 헤더는 여러 태그로 구성되며, 각 태그는 특정 정보를 제공합니다:
- v: 버전 (항상 1)
- a: 사용된 서명 알고리즘 (예: rsa-sha256)
- d: 서명하는 도메인
- s: 선택자 (DNS에서 공개키를 찾는 데 사용)
- c: 정규화 알고리즘 (헤더/본문)
- q: 기본값은 dns/txt
- t: 서명 타임스탬프
- x: 서명 만료 시간
- h: 서명된 헤더 필드 목록
- bh: 본문 해시
- b: 서명 데이터
정규화 (Canonicalization)
이메일은 전송 과정에서 종종 작은 변경(예: 공백 추가/제거, 줄 바꿈 변경)이 발생할 수 있습니다. DKIM은 이러한 변경에도 불구하고 검증이 성공할 수 있도록 정규화 알고리즘을 사용합니다:
- simple: 엄격한 검증으로, 어떤 변경도 허용하지 않습니다.
- relaxed: 공백 변경과 같은 사소한 변경을 허용합니다.
DKIM 구현 모범 사례
1. 강력한 키 사용
- 최소 2048비트 RSA 키 사용 (1024비트는 더 이상 안전하지 않음)
- 정기적인 키 교체 (6-12개월마다)
2. 적절한 서명 범위
- 중요한 모든 헤더에 서명 (From, To, Subject, Date 등)
- 필요한 경우 본문에도 서명
3. 선택자 전략
- 의미 있는 선택자 이름 사용 (예: 날짜, 서비스 이름)
- 키 교체를 위해 여러 선택자 준비
4. 테스트 및 모니터링
- 구현 전 철저한 테스트
- 정기적인 DKIM 서명 유효성 확인
- DMARC 보고서를 통한 모니터링
5. 안전한 비공개키 관리
- 비공개키에 대한 접근 제한
- 안전한 저장 및 백업 절차 마련
DKIM과 다른 이메일 인증 기술의 연계
DKIM은 단독으로도 유용하지만, 다른 이메일 인증 기술과 함께 사용할 때 가장 효과적입니다:
SPF (Sender Policy Framework)
- SPF는 이메일을 보내는 IP 주소를 검증합니다.
- DKIM은 이메일 내용의 무결성을 검증합니다.
- 함께 사용하면 발신자 ID와 메시지 내용 모두 보호됩니다.
DMARC (Domain-based Message Authentication, Reporting & Conformance)
- DMARC는 SPF와 DKIM을 기반으로 정책을 설정합니다.
- 인증 실패 시 어떤 조치를 취할지 지정합니다 (없음, 격리, 거부).
- 인증 결과에 대한 보고서를 제공합니다.
- DKIM + SPF + DMARC는 가장 강력한 이메일 인증 조합입니다.
DKIM 구현 예시
Google Workspace (G Suite)
- 관리자 콘솔에 로그인
- 앱 > Google Workspace > Gmail > 인증 설정
- DKIM 서명 활성화 및 도메인 추가
- 생성된 DNS 레코드를 도메인 DNS 관리자에 추가
Postfix 메일 서버
OpenDKIM 설치
1
apt-get install opendkim opendkim-tools
키 생성
1
opendkim-genkey -d yourdomain.com -s selector
Postfix 및 OpenDKIM 구성
DNS 레코드 추가
1
selector._domainkey.yourdomain.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGS..."
DKIM 문제 해결
일반적인 문제 및 해결 방법
서명 검증 실패
- DNS 레코드가 올바르게 설정되었는지 확인
- 비공개키와 공개키가 일치하는지 확인
- 정규화 설정 확인
DNS 문제
- TXT 레코드 형식 확인
- DNS 전파 지연 고려 (최대 48시간)
- 레코드 길이 제한 준수 (일부 DNS 제공업체는 긴 TXT 레코드를 분할해야 함)
이메일 수정 문제
- 중간 서버가 이메일을 수정하는지 확인
- 필요한 경우 relaxed 정규화 사용
DKIM 테스트 도구
DKIM 구현을 확인하기 위한 여러 도구가 있습니다:
MXToolbox DKIM Lookup
- https://mxtoolbox.com/dkim.aspx
- DNS에 게시된 DKIM 레코드 확인
DKIM 검사기
- 이메일을 검사 주소로 보내 DKIM 서명 유효성 확인
- 많은 이메일 서비스 제공업체가 이러한 도구 제공
명령줄 도구
1
opendkim-testkey -d yourdomain.com -s selector -k private.key
DKIM의 미래
DKIM은 계속 발전하고 있으며, 다음과 같은 동향이 있습니다:
암호화 알고리즘 강화
- 약한 RSA 키에서 더 강력한 알고리즘으로 전환
- ED25519와 같은 새로운 알고리즘 도입
BIMI(Brand Indicators for Message Identification)
- DKIM 및 DMARC와 함께 작동
- 인증된 이메일에 브랜드 로고 표시
자동화된 키 관리
- 키 생성, 교체 및 배포 프로세스 자동화
- 클라우드 기반 키 관리 서비스
용어 정리
용어 | 설명 |
---|---|