DKIM (DomainKeys Identified Mail)

DKIM은 이메일 인증을 위한 중요한 기술로, 이메일이 전송 과정에서 변조되지 않았으며 실제로 발신자가 주장하는 도메인에서 보낸 것임을 확인할 수 있게 해준다.
디지털 서명을 사용하여 이메일의 무결성과 출처를 검증하는 방식으로 작동한다.

DKIM은 현대 이메일 인증의 핵심 구성 요소로, 이메일이 전송 과정에서 변조되지 않았으며 실제로 주장하는 도메인에서 왔음을 보장한다. SPF 및 DMARC와 함께 사용할 때, DKIM은 피싱, 스푸핑 및 스팸으로부터 이메일 시스템을 보호하는 강력한 도구이다.

DKIM을 효과적으로 구현하려면 강력한 암호화 키, 적절한 서명 범위, 안전한 키 관리 및 정기적인 모니터링이 필요하다. 이러한 모범 사례를 따르면 이메일 보안을 강화하고 전달률을 향상시킬 수 있다.

특히 DKIM은 단독으로도 유용하지만, SPF와 DMARC와 함께 사용할 때 가장 효과적인 이메일 보안 솔루션을 제공한다는 점을 기억하는 것이 중요하다.

DKIM의 기본 개념

DKIM은 공개키 암호화 기술을 활용하여 이메일에 디지털 서명을 추가한다.

이 과정은 다음과 같이 진행된다:

  1. 발신 도메인은 비공개키와 공개키 쌍을 생성한다.
  2. 비공개키는 발신 메일 서버에 안전하게 보관된다.
  3. 공개키는 도메인의 DNS 레코드에 게시된다.
  4. 이메일을 보낼 때, 발신 서버는 비공개키를 사용하여 이메일의 특정 부분(헤더 필드 등)에 디지털 서명을 생성한다.
  5. 이 서명은 이메일 헤더에 DKIM-Signature로 포함된다.
  6. 수신 서버는 발신 도메인의 DNS에서 공개키를 조회하고, 이를 사용하여 서명을 검증한다.

DKIM의 중요성

DKIM은 이메일 보안 및 전달성에 여러 가지 중요한 이점을 제공한다:

  1. 이메일 위조 방지: 디지털 서명을 통해 이메일이 실제로 주장하는 도메인에서 왔는지 확인할 수 있다.
  2. 이메일 무결성 보장: 이메일이 전송 과정에서 변조되지 않았음을 보장한다.
  3. 스팸 필터링 개선: 수신자의 이메일 시스템이 합법적인 이메일과 스팸을 더 정확하게 구분할 수 있게 한다.
  4. 도메인 평판 보호: 사이버 범죄자가 여러분의 도메인을 사칭하여 피싱 이메일이나 스팸을 보내는 것을 방지한다.
  5. 이메일 전달률 향상: 많은 이메일 제공업체가 DKIM을 확인하므로, 올바른 DKIM 구현은 이메일이 받는 사람의 받은 편지함에 도달할 가능성을 높인다.

DKIM 작동 방식 상세 설명

1. 키 생성 및 DNS 설정

DKIM을 구현하는 첫 번째 단계는 비공개키와 공개키 쌍을 생성하는 것입니다:

  • 비공개키는 발신 메일 서버에 안전하게 저장됩니다.
  • 공개키는 DNS TXT 레코드에 게시됩니다.

DNS 레코드는 일반적으로 다음과 같은 형식을 가집니다:

1
selector._domainkey.yourdomain.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGS..."

여기서:

  • selector는 여러 DKIM 키를 구분하기 위한 식별자입니다.
  • _domainkey는 DKIM 레코드임을 나타내는 고정 문자열입니다.
  • yourdomain.com은 여러분의 도메인입니다.
  • v=DKIM1은 사용되는 DKIM 버전을 나타냅니다.
  • k=rsa는 사용되는 암호화 알고리즘입니다.
  • **p=MIGfMA0GCS…**는 인코딩된 공개키입니다.

2. 서명 과정

이메일이 발신 서버에서 전송될 때:

  1. 서버는 이메일의 특정 부분(일반적으로 From, Subject, Date와 같은 헤더 필드와 선택적으로 본문)을 선택합니다.
  2. 이 선택된 부분에 대해 해시값을 계산합니다.
  3. 비공개키를 사용하여 이 해시값에 디지털 서명을 생성합니다.
  4. 서명과 함께 어떤 헤더가 서명되었는지, 어떤 알고리즘이 사용되었는지 등의 메타데이터를 포함하는 DKIM-Signature 헤더를 이메일에 추가합니다.

DKIM-Signature 헤더 예시:

1
2
3
4
5
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=selector;
  c=relaxed/relaxed; q=dns/txt; t=1117574938; x=1118006938;
  h=from:to:subject:date;
  bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
  b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR

3. 검증 과정

이메일이 수신 서버에 도착하면:

  1. 수신 서버는 DKIM-Signature 헤더에서 도메인(d=)과 선택자(s=)를 추출합니다.
  2. DNS 쿼리를 통해 해당 도메인의 공개키를 조회합니다: selector._domainkey.domain.com
  3. 서명된 헤더 필드(h=)를 확인하고 동일한 해시 알고리즘(a=)을 사용하여 해시값을 계산합니다.
  4. 공개키를 사용하여 DKIM 서명(b=)을 검증합니다.
  5. 계산된 해시값과 서명에서 추출된 해시값이 일치하면 검증이 성공합니다.

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)

  1. 관리자 콘솔에 로그인
  2. 앱 > Google Workspace > Gmail > 인증 설정
  3. DKIM 서명 활성화 및 도메인 추가
  4. 생성된 DNS 레코드를 도메인 DNS 관리자에 추가

Postfix 메일 서버

  1. OpenDKIM 설치

    1
    
    apt-get install opendkim opendkim-tools
    
  2. 키 생성

    1
    
    opendkim-genkey -d yourdomain.com -s selector
    
  3. Postfix 및 OpenDKIM 구성

    1
    2
    
    # /etc/opendkim.conf 설정
    # /etc/postfix/main.cf 수정
    
  4. DNS 레코드 추가

    1
    
    selector._domainkey.yourdomain.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGS..."
    

DKIM 문제 해결

일반적인 문제 및 해결 방법

  1. 서명 검증 실패

    • DNS 레코드가 올바르게 설정되었는지 확인
    • 비공개키와 공개키가 일치하는지 확인
    • 정규화 설정 확인
  2. DNS 문제

    • TXT 레코드 형식 확인
    • DNS 전파 지연 고려 (최대 48시간)
    • 레코드 길이 제한 준수 (일부 DNS 제공업체는 긴 TXT 레코드를 분할해야 함)
  3. 이메일 수정 문제

    • 중간 서버가 이메일을 수정하는지 확인
    • 필요한 경우 relaxed 정규화 사용

DKIM 테스트 도구

DKIM 구현을 확인하기 위한 여러 도구가 있습니다:

  1. MXToolbox DKIM Lookup

  2. DKIM 검사기

    • 이메일을 검사 주소로 보내 DKIM 서명 유효성 확인
    • 많은 이메일 서비스 제공업체가 이러한 도구 제공
  3. 명령줄 도구

    1
    
    opendkim-testkey -d yourdomain.com -s selector -k private.key
    

DKIM의 미래

DKIM은 계속 발전하고 있으며, 다음과 같은 동향이 있습니다:

  1. 암호화 알고리즘 강화

    • 약한 RSA 키에서 더 강력한 알고리즘으로 전환
    • ED25519와 같은 새로운 알고리즘 도입
  2. BIMI(Brand Indicators for Message Identification)

    • DKIM 및 DMARC와 함께 작동
    • 인증된 이메일에 브랜드 로고 표시
  3. 자동화된 키 관리

    • 키 생성, 교체 및 배포 프로세스 자동화
    • 클라우드 기반 키 관리 서비스

용어 정리

용어설명

참고 및 출처