이메일은 인터넷의 여러가지 기술 중 초창기인 1970년대 초부터 만들어지기 시작했습니다. 인터넷 기술들 중 매우 오래된 편이죠. 게다가 사람들이 가장 많이 이용하는 기술 중 하나입니다. 최근에는 HTML로 표현되는 웹이라는 기술이 그 주도권을 장악해나가고 있지만 이메일 전송량은 여전히 늘어가고 있습니다.
이메일이 워낙 오래되고 간단한 기술이다 보니 다양한 방법으로 사람들을 속이는 기술들도 함께 발전했습니다. 그래서, 속임방지기술도 함께 계속 개발되었는데요, SPF, DKIM, DMARC 등이 그것입니다.
전세계적으로 많은 사람들이 사용하는 Gmail, Hotmail 등과 국내 업체인 Naver 등에서 SPF, DKIM, DMARC 기술/정책들을 도입하고 있는데요, 어떤 기술이길래 사람들이 속지 않도록 하는 것일까요?
하나씩 알아보겠습니다.
SPF
(Sender Policy Framework) Wikipedia
이 기술은 사실 일반 수신자들에게는 노출되지 않는 인벨롭 정보라는 것을 이용하는데요, 발신자가 인터넷상에 내가 발신에 이용하는 IP주소는 이것이야~ 라고 공표하고 수신처에서 이를 참조하여 인벨롭 발신자를 인증해주는 방법이며 2014년에 표준으로 정착되게 됩니다.
발신자가 이용하는 IP주소는 보통 도메인 txt 레코드에 등록합니다.
메일호이의 SPF정보는 아래와 같이 ‘nslookup’명령어로 알아낼 수 있습니다.
# nslookup -type=txt mailhoy.com v=spf1 ip4:49.247.203.62 … ~all
바로 여기에 적힌 IP주소들이 발신인이 메일호이 도메인 메일주소를 이용하는 경우 이용하는 IP들입니다.
수신처에서는 SPF 정보를 참조하여 발신인이 메일호이 도메인 메일주소인 경우, 위에서 명시한 IP로부터 데이터가 유입되었는지 판단합니다. 그게 아니라면 속임수가 있다고 판단하여 이메일을 아예 수신거부하거나 스팸함으로 넣어줍니다.
그런데, 이것만 가지고는 이메일 정보 중 인벨롭 발신자만 인증하게 됩니다.
다른 정보에 속임수가 있는지는 모르게 되는 것이죠.
그래서, 다음 기술인 DKIM이라는 것이 제안되어 사용되게 되는데오, 이제 DKIM에 대해 알아보겠습니다.
DKIM
(DomainKeys Identified Mail) Wikipedia
이 기술은 조금 복잡해보일 수 있는데요, 기본 사항은 간단합니다. 2011년에 표준으로 정립되었습니다.
이메일은 보통 아래와 같은 정보들로 이루어져 있습니다.
1. 발신자 이름 & 이메일 주소
2. 수신자 이름 & 이메일 주소
3. 이메일 제목
4. 본문 내용
인터넷상에 연결된 각종 장비들과 회선 그리고, 시스템을 경유해 이메일정보가 유통되는 동안 최초 발신자가 적어넣은 위 정보들이 일부 혹은, 전체가 변조될 수 있습니다. 실수나 오류에 의해 변조될 수도 있고 의도가 있는 변조 즉, 사기일 수도 있죠.
의도했든 그렇지 않든 중간에 누군가 변조할 수 없도록 한다면 이보다 좋을 수 없겠다고 생각하여 고안된 시스템이 DKIM입니다.
DKIM은 현재까지 개인컴퓨터로는 해독하는데 수백년 이상이 소요될 것이라고 확률적으로 검증된 개인키/퍼블릭키를 갖는 이중키 방식을 이용하여 외부에 공개되지 않은 개인키로 이메일정보의 일부를 암호화 하여 압축합니다. (쉬운 용어로 암호화하여 압축한다고 했지만 실제 기술적으로는 좀 다릅니다)
퍼블릭키는 보통 공개되어있는데요, 수신서버측에서는 이 공개된 퍼블릭키로 사인된 정보를 압축해제하고 복호화하여 원래의 정보와 비교하여 일치한다면 유효한 사인이라고 인정하는 겁니다. 아래는 Wikipedia 에 게시된 DKIM 사인입니다.
DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane; c=relaxed/simple; q=dns/txt; t=1117574938; x=1118006938; h=from:to:subject:date:keywords:keywords; bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=; b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ VoG4ZHRNiYzR
복잡해보이는데요, 위의 예에서는 다음 사항들이 중요한 정보입니다.
1. d=example.net;
: 발신자 이메일 도메인은 ‘example.net’이라는 의미입니다.
2. h=from:to:subject:date:keywords:keywords;
: 메일 헤더 중 발신자(from), 수신자(to), 제목(subject), 날짜(date), 기타 등등을 포함하여 사인했다는 의미입니다.
3. bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
: h에 포함된 헤더정보를 개인키로 암호화/압축한 값입니다.
4. b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR
: 본문정보를 개인키로 암호화/압축한 값입니다.
여러가지 정보 중 일부만 암호화하게 되는데요, 헤더의 발신자정보(from)와 본문정보는 DKIM에서 필수로 사인하도록 되어있습니다.
수신처에서는 메일헤더에 포함된 ‘DKIM-Signature’ 정보를 참조하고 공개된 퍼블릭키를 규칙에 의해 획득하여 자기가 받은 원본과 일치하는지 검증하게 됩니다.
이 과정을 거쳐 수신측에서는 발신자 정보와 제목, 내용 등이 변조되지 않았다는 것을 보장할 수 있게 되었습니다. (확률적이기는 하지만요…)
DMARC
(Domain-based Message Authentication, Reporting and Conformance)
이 기술은 2012년부터 시작되어 2015년 표준으로 정립되었으며 위의 SPF, DKIM 기술을 포함하여 정의되어있습니다. SPF/DKIM이 반드시 구현되어야 DMARC를 도입할 수 있습니다.
위에서 살펴 본 SPF는 발신 IP를 인벨롭 발신자의 것인지 확인하는데요, DMARC에서는 수신자가 볼 수 없는 인벨롭 정보 대신, 수신자가 직접 보게 되는 메일 헤더의 발신자 정보를 이용합니다.
추가로 DKIM에서 사인할 때 이용하는 도메인정보에도 메일 헤더의 발신자 이메일 도메인을 이용합니다.
이로써, 수신자가 직접 보게 되는 발신자 정보를 인증할 수 있게 되었습니다.
매우 확고한 인증체계를 갖게 된 것이죠.
이제 이메일 유통과정이 훨씬 보안에 강해졌습니다. SPF, DKIM, DMARC를 이용하면 누군가 외부에서 나 모르게 나인 것처럼 행세하여 이메일을 발송할 수는 없게 된 것이죠.
메일호이에서 이 정보들을 어떻게 이용하여 세팅할 수 있는지 보시려면 다음 관련글을 참조해주세요.
관련글 : 메일호이 SPF, DKIM, DMARC 설정 – AKA. 발신자 도메인 인증