Computer Science/Network Security
[CS][알기 쉬운 정보보호개론 3판] Chapter14. 이메일 보안
y-seo
2023. 12. 6. 12:00
이메일과 프로토콜
- SMTP 와 IMAP/POP이 주로 사용된다.
- SMTP
- simple mail transfer protocol (정말 simpl해서 mail만 보낼 수 있다.)
- 발신지에서 목적지까지 인터넷을 통해 메세지를 이동하는 데에 사용하는 프로토콜
- 이메일 메세지를 봉투(envelope)에 캡슐화하고 캡슐화된 메세지를 발신지에서 목적지까지 다수의 MTA(mail transfer agent : 중간중간의 router)를 통해 전송
- 클라이언트-서버 사이에서의 SMTP
(송수신자 서버 사이에서 작동)- 클라이언트(이메일 송신자)가 서버(다음-홉 수신자)에 접촉하고 해당 메세지가 전송되어야 할 곳에 대한 정보를 말해주는 명령어 집합을 제시하며 메세지를 전송하는 역할
- MTA 간의 SMTP
- 한 MTA가 메세지를 수신하게 되면 SMTP 크라이언트 역할을 하고 메세지를 최종목적지까지의 경로를 따라 다음 MTA로 전송
- IMAP/POP
- 우리가 주로 마주하는 것
- MS(message store)에 저장된 메일을 MUA(mail user agent : 사용자 쪽 application)로 전송시키는 프로토콜 → 주로 IMAP 사용
- IMAP : MS와 MUA 동기화 (더 무거움)
- POP : MS → MUA로 이동하므로 MS에는 더이상 남지 않음 (더 가벼움)
- 사용은 취향 차이
MIME (Multipurpose Internet Mail Extension)
- SMTP나 RFC 5322의 확장으로 이들의 한계점을 극복한 새로운 메일 프로토콜
- SMTP가 사용되고는 있다. 말단에서는 MIME를 쓰지만 중간중간 MTA들은 지원 안하고 SMTP만 지원되는 것도 있기 때문에 이들 사이에서 SMTP를 사용한다.
- MIME 이전 메일 프로토콜의 한계점 및 극복방법
- SMTP는 실행 파일이나 바이너리 객체를 전송하지 못함
- SMTP는 국제 언어 문자(national language characters)를 포함한 텍스트 데이터를 전송하지는 못한다. (알파벳/숫자만 전송 가능, ASCII 코드만)
- SMTP 서버는 특정 크기 이상의 메일 메세지를 거절한다.
이메일 보안 위협들
- 인증-관련 위협 (Authentication-related threats)
- 기업 이메일 시스템에 허가받지 않은 접근 허용
- 무결성-관련 위협 (Integrity-related threats)
- 이메일 콘텐츠의 허가 받지 않은 수정을 허용 (내용이 바뀌어서 온다)
- 기밀성-관련 위협 (Confidentiality-realted threats)
- 민감한 정보의 허가받지 않은 노출을 허용
- 중간에서 보는 것, 요즘은 암호화되어 전송되어서 괜찮다.
- 가용성-관련 위협 (Availability-related threats)
- 종단 사용자가 메일 전송이나 수신하는 것을 방해
이메일 위협과 완화 방법
위협 대응용 표준 프로토콜
- STARTTLS
- SMTP에 TLS를 적용하기
- S/MIME SMTP
- 원래 MIME에 보안 기능을 추가
- DNS 보안 확장 (DNSSEC : DNS Security Extensions)
- DNS 데이터의 인증과 무결성 보호를 제공하며 다양한 이메일 보안 프로토콜에서 사용하는 기본 도구
- DNS가 해킹되면 목적지가 아닌 다른 곳으로 간다.
- 네임드 개체 DNS-기반 인증 (DANE : DNS-based Authentication of Named Entities)
- DNSSEC을 보완한 것
- 송신자 정책 프레임 워크 (SPR : Sender Policy Framework)
- DKIM (DomainKey Identified Mail)
- DMARC (Domain-based Message Authentication, Reporting, and Conformance)
- SPF와 DKIM을 이용해서 이메일 스푸핑을 찾아내는 이메일 인증 프로토콜
S/MIME
- Secure/Multipurpose Internet Mail Extension
- RSA Data Security사에서 제공하는 기술을 토대로 MIME 인터넷 이메일 형식 표준에 보안을 강화한 것
- S/MIME가 제공하는 서비스
1. S/MIME의 디지털 서명
- 이메일 내용의 무결성을 인증하는 데에 사용된다.
- 가장 보편적으로 SHA-256을 사용한 RSA를 사용한다.
- 서명 절차
- 송신자는 메세지를 생성한다. → 보내기 버튼 push
- SHA-256로 메세지로부터 256 비트 메세지 다이제스트를 생성한다.
- 송신자의 개인키와 RSA를 이용해서 메세지 다이제스트를 암호화한다. 그 결과(서명)를 메세지에 이어 붙인다. 서명자를 인식할 수 있는 정보를 추가한다. 추가 정보로 수신자는 서명자(송신자)의 공개키를 검색한다.
- 수신자는 RSA와 송신자의 공개키를 이용해서 서명을 복호화하고 메세지 다이제스트를 복구한다.
- 수신자는 복구된 메세지로부터 새로운 메세지 다이제스트를 생성한 다음 이를 복호화한 해시 코드와 비교한다(Email을 해시함수에 넣고 비교한다). 이 두 값이 일치하면 메세지가 정당한 것으로 받아들여진다.
2. S/MIME의 메세지 암호화
- 이메일 내용의 기밀성을 위해 암호화
- 대부분의 경우 128-비트 키를 사용하는 AES로 암호화 (블록/키 size 모두)
- 운용 모드는 CBC(Cipher Block Chaining) 모드
- 키 자체도 암호화하는데 RSA로 암호화 (대칭키를 수신자의 공개키로 암호화)
- 키 공유 및 메일 내용 암호화 절차
- 송신자는 메세지를 생성하고 1280비트 수(대칭키를 생성, 1회만 사용)를 생성하고 이를 콘텐츠-암호 키로 사용하되 이 메세지에 오직 한 번만 사용한다.
- 콘텐츠-암호 키로 메세지를 암호화 (이메일을 암호화)
- 콘텐츠-암호 키를 RSA로 암호화하는데 이때 수신자의 공개키를 이용한다. 암호화된 콘텐츠-암호 키를 메세지에 붙인다.
- 수신자는 자신의 개인키로 RSA 복호화한다. 이렇게 해서 콘텐츠-암호키를 복구한다.
- 콘텐츠-암호 키로 암호문을 복호화해 메세지를 복구한다.
- Email 내용을 확인할 수 있다.
S/MIME의 디지털 서명 및 암호화
- 둘 다 일어날 수도
- 서명 먼저 하고 서명을 포함해서 암호화를 한다.
3. S/MIME 암축
- 암호화 후에 압축을 한다.
- 압축을 하면 이메일 전송량이나 파일 저장소 공간을 절약한다.
- 암호화된 메세지와 서명을 모두 압축한다.
- 만일 손실 압축 알고리즘을 사용할 경우, 압축을 먼저 하고 그 뒤에 암호화 및 서명을 한다.
- 압축을 하면, 다시 압축을 풀었을 때 압축 이전 파일과 다른 경우 = 손실 압출
- 이미지, 영상, 음악 등에 사용
- 압축률 한계 X
- 압축을 하면, 다시 압축을 풀었을 때 압축 이전 파일과 다른 경우 = 무손실 압출
- 파일, 이메일 등에 사용
- 압축률 한계 O
- 압축을 하면, 다시 압축을 풀었을 때 압축 이전 파일과 다른 경우 = 손실 압출
4. S/MIME의 이메일 호환성 제공
- MTA나 수신자 중에는 SMTP만 지원하고 S/MIME를` 지원하지 않는 경우가 존재한다.
- 이들은 S/MIME를 이용하여 보안 처리 된 이메일을 전달하거나 읽어올 수 없다.
- 이를 위한 표준 중 하나로 Base 64 (기저 64) 변환을 사용한다.
- Base 64 : 6비트를 하나의 ASCII 문자로 변환하기 위한 규칙, 6bit마다 8bit로 바꿔준다, 남게 되면 처리 방법이 별도로 존재한다. 용량이 4/3배가 된다.
- Base 64를 사용하는 이유
- SMTP 서버 통과를 위해서
- 수신자가 Email 구버전을 쓸 때
S/MIME에 적용되는 보안 알고리즘들
S/MIME가 제공하는 기능들
- 사실 암호화와 서명이 둘 다 들어갈 필요는 없다 → 기능적 문제 때문에 한가지만 할 수도 있다.
- Enveloped Data
- 기밀성만 제공한다. (암호화만)
- 무결성과 인증성은 제공하지 않는다.
- 송신자는 대칭키를 선택하고 이 대칭키로 메일 내용을 암호화한다.
- 대칭키를 각 수신자의 공개키로 암호화한다.
- 각 수신자들을 위한 암호화된 대칭키들과 암호화된 메일 내용을 Base 64로 인코딩 및 전송한다.
- Signed Data
- 무결성과 인증성만 제공한다.
- 호환성이 없다.
- 송/수신자의 성능이 다를 경우, 받는 사람이 글자가 깨진 이메일을 받게 된다. 이메일 호환성 때문에 전체를 인코딩해서
- 서명만 해준다.
- 기밀성은 제공하지 않는다. (볼 수는 있어야 한다.)
- 이게 적용된 메일은 수신측 기기가 S/MIME를 지원할 때만 열어볼 수 있었따.
- 송신자는 메일 내용에 해시 함수를 적용하여 Message Digest를 얻는다.
- 송신자는 Message Digest에 자신의 비밀키로 서명한다.
- 송신자는 자신의 공개키 인증서가 포함된 SignerInfo라는 것을 준비하여 메일 내요으 서명 SignerInfo를 연결한다.
- SignerInfo : 인증서, 공개키가 누구 것인지 알 수 있도록
- 전체를 Base 64로 인코딩한 후 전송한다.
- Clear-signed Data
- 인증성만 제공한다.
- 호환성도 있다.
- 서명만 해준다.
- 이를 위해 Signed Data의 4번 과정에서 전체를 Base 64로 변환하지 않고 서명과 SignedInfo만 Base 64로 변환한다.
- Email 내용을 그대로 둔다. → 송/수신자의 성능 차이가 있어도 내용을 볼 수 있다. (진짜인지는 모르지만)
- 이렇게 하면, S/MIME를 지원하는 기기로는 메일의 확인 및 검증이 가능하고 그렇지 않은 기기로는 메일의 확인만 가능하다.
- Signed and Enveloped Data
- 디지털 서명과 암호화가 모두 적용된다.
- 가장 좋다.
- 압축, Base 64를 모두 적용한다.
PGP (Pretty Good Privacy)
- Phil Zimmermann 제작
- 이메일과 파일 저장 응용에 필요한 기밀성과 인증을 제공한다.
- S/MIME과 근본적으로 같은 기능이다.
- PGP와 S/MIME의 차이점
- 공개키와 연관있다.
- 키 인증 (key certification)
- S/MIME : 인증기관(CA)에서 발행한 X.509 인증서를 사용한다.
- OpenPGP : 사용자가 자신의 OpenPGP 공개 키와 개인 키를 생성하고 그들이 알고 있는 개인이나 조직의 공개 키에 대한 서명을 요청한다. (PGP 운영 관리자가 서명한다. (공인 인증 기관 X)
- 키 배분 (key distribution)
- S/MIME : 메세지에 송신자의 공개키를 첨부한다.
- OpenPGP : 메세지에 송신자의 공개키를 첨부하지는 않지만, 수신자는 송신자의 공개키를 다른 통로로 수집한다. 공개키를 PGP 관리자에게 따로 받아온다. (같이 보내지 않는다.)
OpenPGP
- 암호문이나 디지털 서명 형식을 정한 규격
- RFC: 표준, 만드려면 지켜야 하는 것
- RFC1991: (1991년) PGP 메시지 형식을 기술
- RFC2440
- RFC4880: (2007년) RSA와 DSA를 지원 for 디지털 서명
- RFC5581
- RFC6637: (2012년) 타원 곡선 암호(ECC)를 지원
- 공개키 암호화 방식으로 key의 사이즈가 작아야 한다. (bit가 작을수록 시간↓)
- Curve P-256, P-384, P-521이라는 3종류의 타원곡선을 사용하여 타원곡선 DSA(Elliptic Curve Digital Signature Algorithm) 알고리즘을 지원한다. (작은데도 보안 수준이 좋다.)
GNU Privacy Guard (GnuPG, GPG)
- OpenPGP 규격에 따라 만들어진 암호화 소프트웨어
- 암호화, 디지털 서명, 키 관리, S/MIME와 ssh 등을 지원
- PGP가 지원하는 것은 다 지원한다.
- GNU PGL에 기초한 프리 소프트웨어
PGP가 제공하는 보안 기능
- S/MIME과 유사하다.
- 대칭키 암호 : 이메일 내용을 암호화하며, AES, IDEA, CAST, 삼중 DES, Blowfish, Twofish, CFB모드를 사용한다.
- 공개 키 암호 : 대칭키를 암호화하기 위해 사용되며, RSA와 ElGamal 사용한다.
- 디지털 서명 : 이메일 내용을 서명하기 위해 사용되며, RSA와 DSA 사용한다.
- DSA : 공개키 기반 암호 알고리즘, 이산로그를 푸는 것이 어렵다는 것에 근거한다.
- 일방향 해시 함수 : 이메일 내용의 해시값을 계산하기 위해 사용되며, MD5, SHA-1, RIPEMD-160 등을 사용한다.
- 인증서 : OpenPGP에서 정의한 자체 인증서를 사용하며, X.509 표준을 따른다.
- 관리자가 인증해준 것이다.
- 압축 : ZIP, ZLIB, BZIP2 등을 이용하여 압축한다.
- 이진 데이터의 ASCII로의 변환 : radix-64를 이용하여 호환성을 보장한다.
- 큰 파일의 분할과 결합
- 키 고리 관리 : 자신의 키 쌍이나 공개키를 관리하는 기능
PGP의 이메일 서명 및 검증
PGP의 이메일 암/복호화 및 서명/검증
신뢰망
- S/MIME나 다른 공개키 인증서 기반 프로토콜과는 달리, PGP는 공개키를 인증할 수 있는 공인인증기관이 없다. 그래도 공개키를 사용한다. (그 공개키를 관리자가 아닌 다른 이에게 받았을 때의 이야기)
- 대신, PGP는 신뢰망을 이용하는데 PGP 사용자가 신뢰할 수 있는 다른 사람의 공개키에 서명을 하는 방식을 기반으로 한다
- 사용자가 다른 사람의 공개키를 인증하는 기준은 다음과 같다. (이렇게 공개키를 얻는다.)
- 경우1 : 자기 자신의 디지털 서명으로 확인한다. (원래부터 가지고 있는 것을 확인한다.)
- 경우2 : 자신이 항상 신뢰하고 있는 사람의 디지털 서명으로 확인한다. (신뢰하고 있는 사람이 그 다른 사람의 공개키를 서명했을 경우)
- 경우3 : 자신이 부분적으로 신뢰하고 있는 사람들의 디지털 섬여으로 확인한다. (부분적으로 신뢰하고 있는 사람들이 그 다른 사람의 공개키에 서명했을 경우이다.)
DNSSEC (DNS 보안 확장)
- 웹/이메일 등에서 다른 곳으로 가게 할 수 없게 만드는 기술
- 웹에서 Pharming을 방지하기 위해 만든 기술
- DNS 서버가 해킹 되더라도 위장 사이트에 접속하지 못하게 하는 기술이다.