S/MIME(Secure/Multipurpose Internet Mail Extension)
S/MIME은 RSA는 무엇인가? Data Security사에서 제공하는 기술을 토대로 MIME(Multipurpose Internet Mail Extensions) 인터넷 이메일 형식 표준에 보안을 강화한 프로토콜입니다.
- S/MIME은 이메일의 기밀성, 무결성, 인증을 보호하기 위해 사용되며, 전자 서명과 암호화를 지원합니다.
- S/MIME은 공개 키 암호화 기술인 RSA 알고리즘을 사용하여 안전한 이메일 통신을 제공합니다.
운영
S/MIME은 4개의 메시지 관련 서비스를 제공한다: 인증,기밀성, 압축, 이메일 호환성
1. 인증
디지털 서명을 이용해 인증을 수행한다.
보편적으로 SHA-256을 사용한 RSA는 무엇인가?를 사용한다
인증 절차
- 송신자는 메시지를 생성
- SHA-256로 메시지로부터 256-bit 메시지 다이제스트를 생성
- 송신자의 개인 키와 RSA를 이용해서 메시지 다이제스트를 암호화한다.
- 그 결과를 메시지에 이어 붙임.
- 서명자를 인식할 수 있는 정보를 추가
- 추가 정보로 수신자는 서명자의 공개 키를 검색
- 수신자는 RSA와 송신자의 공개 키를 이용해서 복호화하고 메시지 다이제스트를 복구
- 수신자는 복구된 메시지로부터 새로운 메시지 다이제스트를 생성한 다음 이를 복호화한 해시 코드와 비교. 두 값이 일치하면 메시지가 정당한 것으로 받아들임
2. 기밀성
S/MIME은 메시지를 암호화하여 기밀성을 보장한다
대부분의 경우 128-bit 키를 사용하는 AES로 암호화 한다.
운용 모드는 암호 블록 체인 모드 (CBC)이다.
키 자체도 암호화하는데 RSA는 무엇인가?를 이용해서 암호화 한다.
항상 문제가 되는 키 분배(공유) 문제…
-
- 송신자는 메시지를 생성하고 128-비트 수를 생성하여 콘텐츠-암호 키로 사용합니다.
- 이 콘텐츠-암호 키는 해당 메시지에 오직 한 번만 사용됩니다.
-
- 송신자는 콘텐츠-암호 키로 메시지를 암호화합니다.
-
- 콘텐츠-암호 키를 RSA로 암호화하는데, 이때 수신자의 공개 키를 이용합니다.
- 암호화된 콘텐츠-암호 키를 메시지에 첨부합니다.
-
- 수신자는 자신의 개인 키로 RSA 복호화하여 콘텐츠-암호 키를 복구합니다.
-
- 콘텐츠-암호 키를 사용하여 암호문을 복호화하여 메시지를 복구합니다.
-
기본적으로 대칭 암호 알고리즘은 비대칭 암호 알고리즘 보다 속도가 빠르다
-
공개 키 암호 알고리즘을 이용하면 세션 키 배분 문제를 해결 할 수 있다.
기밀성과 인증
위의 그림에서 알 수 있다시피 기밀성과 암호화를 동일한 메시지에 적용 할 수 있다.
평문 메시지로부터 서명을 생성하고, 메시지에 그 서명을 붙인다.
그 후, 평문 메시지와 서명을 단일 메시지 블록으로 간주하여 대칭 암호 알고리즘으로 암호화 한다
대칭 암호화 키는 공개 키 암호로 암호화한다.
3. 압축
압축을 하면 이메일 전송량이나 파일 저장소 공간을 절약하는 장점이 있습니다
압축은 서명과 메시지 암호 2가지를 순서에 관계없이 실행할 수 있습니다
압축 지침 (RFC 5751)
- 바이너리 인코딩 된 암호 데이터를 압축하는 걸 권장하지 않음
- 압축이 효과적으로 되지 않음
- 서명시 손실 있는 압축 알고리즘을 사용하려면 압축을 먼저하고 그 뒤에 서명함
4. 이메일 호환성
S/MIME을 사용하면 적어도 전송할 블록의 일부가 암호화됩니다.
서명 서비스만 사용한다면 메시지 다이제스트는 암호화되며, 송신자의 개인 키로 암호화됩니다.
만약 기밀성 서비스를 사용한다면 메시지와 서명(없을 경우도 있음)을 하나로 간주하여, 일회용 대칭 키로 암호화됩니다.
S/MIME 컨텐츠 유형
Data
- 내부 MIME-인코드된 메시지 콘텐츠
- signedData, EnvelopedData나 CompressedData 콘텐츠 유형 속에 캡슐화
SignedData
- 메시지에 디지털 서명을 적용할 때 사용
EnvelopedData
- 모든 유형의 암호화된 콘텐츠와 수신자를 위한 암호화된 콘텐츠 암호화 키로 구성
CompressedData
- 메시지 압축시 사용
승인된 암호 알고리즘
S/MIME 명세에는 어떤 컨텐츠 암호 알고리즘을 사용할지를 결정하는 절차에 대한 논의를 해놓았다
핵심은 송신 에이전트가 암호화 알고리즘 난이도를 결정해야 한다는 것이다
- 송신 에이전트는 수신 에이전트가 주어진 암호화 알고리즘을 이용해서 복호화를 할 수 있는지 아닌지를 판단해야만 한다.
필수
- 규격에 대한 절대적인 요구사항
- 구현하려면 이 규격을 따르기 위해 기능을 필히 포함
권장 - 이런 특성이나 기능을 특정한 환경에서는 무시해야 할 정당한 이유가 있을 수 있다
- 하지만, 구현 할 때 그 특성이나 기능을 사용할 것을 권장한다
S/MIME 암호 알고리즘
S/MIME 메시지
S/MIME은 여러 가지 새로운 MIME 콘텐츠 유형을 이용한다
모든 새로운 응용 유형은 RSA 연구소에서 제시하고 S/MIME용으로 만든 공개 키 암호 규격(PKCS: public-key cryptography specifications)인 지정된 PKCS를 사용한다
MIME 개체 보호
S/MIME은 서명, 암호화 또는 두 가지를 모두 사용하여 MIME 개체를 안전하게 보호하는 기술입니다.
MIME 개체는 메시지의 전체 또는 멀티파트 MIME 콘텐츠 유형의 하나 이상의 서브파트를 나타냅니다.
일반적인 MIME 메시지 준비 규칙에 따라 MIME 개체를 준비합니다.
이후, MIME 개체와 보안과 관련된 데이터(알고리즘 식별자, 서명 등)를 결합하고 S/MIME으로 처리하여 PKCS 객체를 생성합니다.
PKCS 객체는 메시지의 내용으로 간주되며, MIME에 의해 적절한 MIME 헤더가 추가됩니다.
S/MIME 컨텐츠 유형
envelopedData
S/MIME 처리의 네 가지 부류 중 하나를 위해 사용되는 application/pkcs7-mime 서브유형입니다.
이 네 가지 부류는 각각 유일한 smime-type 매개 변수를 가지고 있습니다.
위 네 가지 부류에 해당하는 결과로 생성된 객체는 기본 부호화 규칙(BER: Basic Encoding Rules) 형식으로 표현됩니다.
BER 형식은 임의의 옥텟 열로 구성된 2진 데이터입니다.
이러한 객체는 외부 MIME 메시지 내에서 기저64(base64)로 전송 부호화됩니다.
EnvelopedDataMIME 개체를 준비하는 단계는 아래와 같습니다
- 특정 대칭 암호 알고리즘(RC2/40이나 삼중DES)에서 쓸 의사랜덤(pseudorandom)세션 키 생성
- 각 수신자를 위해 수신자의 RSA 공개 키로 세션 키를 암호화
- 각 수신자를 위해 RecipientInfo라고 알려진 블록을 준비
- 이 블록에는 수신자의 공개 키 인증서 식별자, 세션 키 암호에 사용된 알고리즘 식별자, 그리고 암호화된 세션 키 포함
- 세션 키로 메시지 내용을 암호화
EnvelopedData의 구조는 아래와 같습니다
- RecipientInfo 블록이 앞에 있고 바로 뒤에 암호화된 콘텐츠가 있는 형태
- 이 정보는 base64로 부호화
Signed Data
SignedData smime-type은 사실 한 명 혹은 여러 서명자에 의해 이용될 수 있습니다
SignedData MIME 개체를 준비하는 과정은 아래와 같습니다
- 메시지 다이제스트 알고리즘을 선택한다(SHA 혹은 MD5)
- 서명될 내용의 메시지 다이제스트나 해시 함수 값을 계산
- 서명자의 개인 키를 이용해서 메시지 다이제스트를 암호화
- SignerInfo라고 알려진 블록을 준비
- 이 서명자 정보에는 서명자의 공개 키 인증서, 메시지 다이제스트 알고리즘 식별자, 메시지 다이제스트를 암호화하는데 사용한 알고리즘 식별자, 그리고 암호화된 메시지 다이제스트가 포함
Signed Data 메시지의 예시는 아래와 같습니다
클리어 서명
서명된 서브유형을 갖는 멀티파트 콘텐츠 유형을 사용하여 얻는다
이 서명과정은 서명될 메시지를 변환하지 않기 때문에 메시지는 “있는 그대로(in the clear)” 보냅니다
그래서 MIME 기능은 있지만 S/MIME기능이 없는 수신자도 수신되는 메시지를 읽어볼 수 있죠
멀티파트/서명 메시지는 2파트로 이루어집니다
- 1 번째 파트
- 어떤 MIME(Multipurpose Internet Mail Extensions) 유형도 가능
- 송신자로부터 전송 되는 도중에 변경되지 ㅇ낳도록 준비
- 2번째 파트
- MIME(Multipurpose Internet Mail Extensions) 컨텐츠 유형의 응용과 서브유형 pkcs7-signature를 가진다
멀티파트/서명 메시지는 아래와 같이 나타납니다
등록 요청
응용 프로그램이나 사용자는 공개 키 인증서를 CA에 요청 할 수 있습니다
응용 프로그램과 사용자는 application/pkcs10 S/MIME 개체를 이용해서 인증서 요청 전송 가능합니다
인증서 요청에 포함되는 사항
- CertificationRequestInfo 블록
- 공개 키 암호 알고리즘의 식별자
- 송신자의 개인 키로 서명된 CertificationRequestInfo 블록의 서명
CertificationRequestInfo 블록이란?
인증서 주체(인증될 공개 키 소유자인 개체)의 이름과 사용자의 공개 키 비트열 표현을 포함하는 블록입니다
인증서용 메시지
등록 요청을 하고 나면, 답신으로 오직 인증서만 갖고 있는 경우 또는 오직 인증서 취소 목록(CRL: Certificate Revocation List)만 가진 메시지를 수신합니다.
이러한 메시지는 초기 상태(degenerate)의 smime-type 매개 변수를 가지며, application/pkcs7-mime type/subtype로 구성됩니다.
이 단계에서는 SignedData 메시지 생성 방법과 동일하게 메시지를 생성합니다.
하지만 이 경우에는 메시지 콘텐츠 필드가 없으며, SignerInfo 필드가 비어있는 차이가 있습니다.
S/MIME 인증서 처리
S/MIME 관리자와 사용자는 각 클라이언트에게 신뢰할 수 있는 키 목록과 인증서 취소 목록을 제공하여 클라이언트를 구성해야 합니다.
이는 수신된 서명을 확인하고 송신될 메시지를 암호화하는 데 사용할 인증서를 유지관리해야 함을 의미합니다.
S/MIME을 사용하는 당사자에게 인증서의 관리 책임이 있으며, 신뢰할 수 있는 인증서와 취소 목록을 유지하여 안전한 통신을 보장해야 합니다.
사용자 에이전트의 역할 : S/MIME 사용자가 수행야 할 키 관리 기능을 갖고 있다
- 키 생성
- 등록
- 인증서 저장과 검색
강화된 보안 서비스
- 서명된 수령증(Signed receipts)
- 보안 레이블(Security labels)
- 안전한 메일링 목록(Secure mailing lists)
- 서명 인증서(Signing Certificates)
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > Security' 카테고리의 다른 글
DNSSEC (0) | 2023.06.03 |
---|---|
Pretty Good Privacy (0) | 2023.06.03 |
이메일 위협과 종합적 이메일 보안 (0) | 2023.06.03 |
IEEE 802.11i 무선 LAN 보안 (1) | 2023.06.03 |
모바일 장치 보안 (0) | 2023.06.03 |