다음을 통해 공유


SignedCms 메시지

CMS/PKCS #7에서는 SignedCms 클래스를 제공하여 메시지에 디지털 서명합니다.

메시지 디지털 서명 기능은 엔터티 인증 및 데이터 무결성이라는 보안 서비스를 적용하여 메시지를 보호합니다. 엔터티 인증을 통과하면 메시지의 작성자 또는 보낸 사람이어야 하는 엔터티가 실제 해당 엔터티일 가능성이 커집니다. 엔터티는 사용자, 소프트웨어 응용 프로그램 또는 고유 ID가 있는 다른 소스일 수 있습니다.

데이터 무결성을 통과하면 삭제 또는 중복을 비롯하여 어떤 방법으로든 메시지 자체가 변경되지 않았을 가능성이 커집니다.

SignedCms 클래스를 사용하여 이러한 보안 서비스를 모두 또는 하나만 메시지에 적용할 수 있습니다. 메시지 보낸 사람 또는 작성자의 신뢰성을 확인하거나 메시지를 저장 또는 전송하는 중(또는 저장과 전송 모두를 수행하는 중) 메시지가 수정되지 않았는지 확인하려는 경우 이 클래스를 사용합니다.

S/MIME 보안 표준을 사용하는 전자 메일은 SignedCms 클래스를 사용하여 보안을 제공하는 방법에 대한 예제입니다. 다른 보안 서비스 외에 S/MIME는 전자 메일 메시지 자체의 무결성을 확인할 뿐만 아니라 메시지를 보낸 사람에 대한 신뢰성을 확인하는 기능도 지정합니다.

메시지에 여러 개의 서명을 적용할 수 있습니다. 이 기능이 필요할 수 있는 응용 프로그램에 대한 예제로는 문서 작성 및 읽기 응용 프로그램이 있습니다. CMS/PKCS #7은 여러 개의 서명을 지원하므로 응용 프로그램에서 여러 명의 문서 작성자는 작성 중인 문서에 각각 서명할 수 있습니다. 또한 문서 판독기를 통해 요구된 작성자가 실제 문서 작성자인지 확인하고 문서가 서명된 이후 수정되지 않았는지 확인할 수 있습니다.

SignedCms 클래스의 ComputeSignature 메서드 중 하나를 사용하여 메시지 서명을 계산할 수 있습니다. System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner) 메서드를 사용하려면 먼저 응용 프로그램에서 CmsSigner 개체를 생성하여 메시지 서명자의 특징을 설정해야 합니다. CmsSigner 클래스는 다른 속성 외에 서명자의 X509 인증서도 저장합니다. System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature 메서드는 사용자가 적절한 서명자의 인증서를 선택할 수 있도록 대화 상자를 표시합니다.

서명자의 인증서 체인은 System.Security.Cryptography.Pkcs.CmsSigner.Certificates 속성 내에 전부 또는 일부 포함될 수 있습니다. 인증서 체인을 포함하는 양에 영향을 주도록 System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption 속성을 설정합니다.

SignedCms 메시지는 분리되지 않음 또는 분리됨 중 하나가 될 수 있습니다. 부울 속성 System.Security.Cryptography.Pkcs.SignedCms.Detached는 메시지의 분리 여부를 결정합니다. 분리되지 않은 SignedCms 메시지에는 서명된 메시지가 있습니다. 분리된 SignedCms 메시지에는 서명된 메시지가 있지 않지만 서명 및 특성과 같은 메시지의 다른 모든 속성이 들어 있습니다. 분리된 SignedCms 메시지가 사용될 수 있는 응용 프로그램에 대한 예제로는 문서 읽기 응용 프로그램이 있습니다. 이 경우 용량이 큰 서명된 문서의 저장소를 주 저장소 위치 외에 SignedCms 메시지에 저장하여 중복하는 것은 좋지 않습니다. 용량이 큰 내용에 서명하는 응용 프로그램이 분리된 SignedCms 메시지를 사용할 가능성이 높습니다.

CMS/PKCS #7에서는 연대 서명을 지원합니다. 연대 서명은 다른 디지털 서명의 디지털 서명입니다. 따라서 이 기능은 메시지의 내용이 아닌 서명의 인증만 제공합니다. 디지털 서명은 여러 명의 연대 서명자에 의해 연대 서명될 수 있습니다. 그러나 CMS/PKCS #7에서는 한 수준의 연대 서명만 지원합니다. 연대 서명 자체는 연대 서명될 수 없습니다. 연대 서명을 사용할 수 있는 응용 프로그램에 대한 예제로는 디지털 공증 서비스가 있습니다.

SignerInfo 클래스의 ComputeCounterSignature 메서드 중 하나를 사용하여 연대 서명을 계산할 수 있습니다. System.Security.Cryptography.Pkcs.SignedCms.SignerInfos 속성은 메시지 서명 결과인 SignerInfo 개체의 컬렉션입니다. ComputeCounterSignature 메서드는 SignedCms 클래스의 ComputeSignature 메서드와 비슷하게 작동합니다.

SignedCms 메시지에는 연관된 서명별 특성이 있을 수 있습니다. 이러한 특성은 서명되거나 서명되지 않을 수 있습니다.

서명된 특성을 적절한 서명자의 System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes 속성에 설정하여 해당 메시지에 배치할 수 있습니다. 해당 서명자에 대해 서명을 계산하면 서명된 특성은 System.Security.Cryptography.Pkcs.SignedCms.ContentInfo 속성의 내부 내용과 함께 서명됩니다. 메시지가 System.Security.Cryptography.Pkcs.SignedCms.SignerInfos 속성의 해당 서명자에 대해 System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes 속성에서 서명된 후에 서명된 특성을 사용할 수 있습니다. 유용할 수 있는 서명된 특성의 예제로는 Pkcs9SigningTime 서명 시간 특성이 있습니다. 이 특성에는 메시지가 서명된 시간이 있습니다.

서명되지 않은 특성을 적절한 서명자의 System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes 속성에 설정하여 해당 메시지에 배치할 수 있습니다. 이러한 특성은 서명되지 않았으므로 인증되거나 무결성이 있다고 가정할 수 없습니다. 메시지가 System.Security.Cryptography.Pkcs.SignedCms.SignerInfos 속성의 해당 서명자에 대해 System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes 속성에서 서명된 후에 서명되지 않은 특성을 사용할 수 있습니다. CMS/PKCS #7에서 내부적으로 사용하는 서명되지 않은 특성에 대한 예제로는 연대 서명이 있습니다. 연대 서명은 이미 서명 형식이므로 다시 서명될 필요가 없습니다. 서명되지 않은 상태로 남아 있을 수 있는 특성에 대한 예제로는 Pkcs9DocumentDescription 클래스에서 사용할 수 있는 문서 설명이 있습니다.

SignedCms 클래스의 CheckSignature 메서드 중 하나를 사용하여 메시지 서명, 연대 서명 및 서명된 특성을 확인할 수 있습니다. SignedCms 메시지에는 해당 확인에 필요한 서명자의 인증서가 있습니다. 서명 확인은 이러한 메서드에 대한 verifySignatureOnly 매개 변수 값에 따라 결정된 대로 서명 확인에서 서명자의 인증서를 확인할 수도 못할 수도 있습니다.

분리된 SignedCms 메시지를 확인하려면 먼저 메시지 내용과 SignedCms 메시지를 연결합니다. 이 작업은 해당 메시지 내용이 있는 ContentInfo 개체를 생성하여 수행합니다. 예를 들어, 해당 개체를 사용하면 SignedCms 생성자를 사용하여 SignedCms 개체를 생성할 수 있습니다. 두 번째 매개 변수를 true로 설정하여 메시지가 분리되었음을 나타냅니다. Decode 메서드를 사용하여 확인할 인코딩된 SignedCms 메시지를 디코딩합니다. 마지막으로 이전에 설명한 대로 서명을 확인합니다.

SignedCms 메시지를 사용하는 여러 코드 예제는 System.Security.Cryptography.Pkcs 사용을 참조하십시오.

참고 항목

작업

방법: 한 명의 서명자가 메시지 서명
방법: 여러 명의 서명자가 메시지 서명
방법: 메시지 연대 서명

참조

CmsSigner
SignedCms
SignerInfo

개념

방법: 메시지 서명 및 포함
CMS/PKCS #7 메시지 유형

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.