- 연구를 통해 1,024비트 미만의 공개 DKIM 키가 1,700개 이상 발견됨. RSA 키가 1,024비트 미만일 경우 보안이 취약하며 2018년 RFC 8301 이후 사용이 중단됨
- 실험 목표 : 공개된 512비트 RSA 공개 키에서 개인 키를 추출하여 주요 이메일 서비스(Gmail, Outlook, Yahoo Mail 등)에서 DKIM 검증이 통과되는지 확인
- 이메일을 원래 발신자인 것처럼 서명할 수 있는지 실험함
RSA 공개 키 디코딩 및 키 생성
- 공개 키는 Redfin.com 도메인의 512비트 RSA 키 : ASN.1 DER 형식으로 인코딩되어 있으며 Base64로 추가 인코딩됨
-
키 디코딩 과정
-
p 태그에 포함된 Base64로 인코딩된 공개 키를 Python으로 디코딩
-
n(모듈러스)와 e(공개 지수) 추출
- RSA 모듈러스 인수분해
- CADO-NFS 사용: Number Field Sieve 알고리듬 기반
- 클라우드 서버 스펙: 8 vCPU, 32GB RAM (Hetzner 이용)
- 추가 32GB 스왑 공간 설정 후 CADO-NFS 실행
- 결과: 약 86시간 소요 후, n을 두 소인수 p와 q로 분해 성공
- RSA 개인 키 생성
- p와 q를 통해 RSA 개인 키를 생성
- Python과 PyCryptodome 라이브러리를 사용하여 개인 키를 PEM 형식으로 출력함
DKIM 서명 테스트
- OpenDKIM에 개인 키 통합 후 이메일 발송
- 여러 이메일 호스팅 서비스에서 DKIM 검증 결과 확인
- 테스트 결과:
- DKIM 통과: Yahoo Mail, Mailfence, Tuta
- DKIM 실패: Gmail, Outlook, Zoho, Fastmail 등
- Yahoo와 Mailfence, Tuta는 512비트 키의 취약성을 인지하지 못하고 통과 처리
최종 결론
- 512비트 RSA 키의 취약gka
- 30년 전에는 슈퍼컴퓨터로 가능했던 작업이 이제 클라우드 서버에서 몇 시간 만에 $8 이하로 가능
- DKIM 서명 시 1,024비트 미만 키는 절대 사용하지 말아야 함
- 권장 사항
- 이메일 제공자는 1,024비트 미만 RSA 키를 사용하는 DKIM 서명을 자동으로 거부해야 함
- 도메인 소유자는 DKIM 레코드를 점검해 1,024비트 이상으로 업데이트 필요
- Base64 문자열 길이로 DKIM 키 확인 가능: 1,024비트 키는 최소 216문자