CMS ๋ Cryptographic Message Syntax ์ ์ฝ์๋ก RFC5652 ์ ์ ์ ๋ ํ์ค์ด๋ค.
CMS ๋ช
๋ น์ด๋ ๋ฐ์ดํ ์๋ช
์ด๋ ๋ฐ์ดํ ์ํธํ๋ฅผ ์ํ ํ์ค ๋ฐ์ดํ ํ์์ด๋ค.
์ด ๋ฐ์ดํ๋ PKCS#7 ํ์์ ๋ฐ์ดํ ์ด๋ค.
์์ธํ ๋ช
๋ น์ด ์ค๋ช
์ฃผ์์ด๋ค.
https://www.openssl.org/docs/man3.0/man1/openssl-cms.html
CMS ๋ฉ์ธ์ง ASN.1 ํ์
์๋ ASN.1 ํ์์ CMS ๋ฉ์ธ์ง์ ๋ํ ์ผ ๋ถ๋ถ์ ํ์ ๋ด์ฉ์ ๋ณด์ฌ ์ค๋ค.
ContentInfo ::= SEQUENCE {
contentType ContentType,
content [0] EXPLICIT ANY DEFINED BY contentType }
ContentType ::= OBJECT IDENTIFIER
SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }
EnvelopedData ::= SEQUENCE {
version CMSVersion,
originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
recipientInfos RecipientInfos,
encryptedContentInfo EncryptedContentInfo,
unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
Signed Data ๋ฉ์ธ์ง ์์ฑ
์ด ๋ฉ์ธ์ง๋ ์๋ฌธ์ ์ ์ ์๋ช ์ ์์ฑํ๊ณ ์๋ฌธ์์ฒด๋ ๊ทธ๋๋ก ๋ณด์ฌ ์ค๋ค.
openssl cms -sign -in test.txt -out out.msg -signer ecdsa_cert.pem -inkey ecdsa_private_key.pem
out.msg : ์์ฑ ๋ SignedData ๋ฉ์ธ์ง ์ด๋ค.
๊ฒฐ๊ณผ ํ์ผ์ ๋ด์ฉ์ ๋ณด๋ฉด
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg="sha-256"; boundary="----9200C78F9435257A83D6408C600DC4DF"
This is an S/MIME signed message
------9200C78F9435257A83D6408C600DC4DF
test message^M
------9200C78F9435257A83D6408C600DC4DF
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
MIIDmQYJKoZIhvcNAQcCoIIDijCCA4YCAQExDTALBglghkgBZQMEAgEwCwYJKoZI
hvcNAQcBoIIBwTCCAb0wggFjoAMCAQICCAvGymLEvWh7MAoGCCqGSM49BAMCMEAx
CzAJBgNVBAYTAktSMQ4wDAYDVQQKEwVSYW5peDEOMAwGA1UECxMFRGV2ZWwxETAP
BgNVBAMMCEVDRFNBX0NBMB4XDTIzMDQwNjA5MzYwMFoXDTI0MDQwNjA5MzYwMFow
QjELMAkGA1UEBhMCS1IxDjAMBgNVBAoTBVJhbml4MQ4wDAYDVQQLEwVEZXZlbDET
MBEGA1UEAwwKQ01TX1NpZ25lcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJUZ
Fpx8Uvbset2RED8HpgHZmPpnuHswjSaDl65sl2JMy43E8ME13LphsOr5B9dd86A4
swfRT9lJ3UPQA761NnqjRTBDMA4GA1UdDwEB/wQEAwID+DAxBgNVHSUEKjAoBggr
BgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDBDAKBggqhkjOPQQD
AgNIADBFAiEA2mqmjaawFtRpEtklxaMjMxVaRySMxA3qsVMNOFO/5CQCICqcaUs+
x4MyBBgFuGqSvIYIRTZdznc1D2VlXBNWHwv9MYIBnjCCAZoCAQEwTDBAMQswCQYD
VQQGEwJLUjEOMAwGA1UEChMFUmFuaXgxDjAMBgNVBAsTBURldmVsMREwDwYDVQQD
DAhFQ0RTQV9DQQIIC8bKYsS9aHswCwYJYIZIAWUDBAIBoIHkMBgGCSqGSIb3DQEJ
AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDQwNjA5MzkyNFowLwYJ
KoZIhvcNAQkEMSIEID2+rP15X+LtXg5WMjtDQmjETKwoOsQzZCuW8s/EQ2NbMHkG
CSqGSIb3DQEJDzFsMGowCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBFjALBglghkgB
ZQMEAQIwCgYIKoZIhvcNAwcwDgYIKoZIhvcNAwICAgCAMA0GCCqGSIb3DQMCAgFA
MAcGBSsOAwIHMA0GCCqGSIb3DQMCAgEoMAoGCCqGSM49BAMCBEcwRQIhALmYtZhM
r6rLZLUn23FoAOtBmKmB03D8n7NmTRmzXYeYAiAm4aOpdcbYHCy0r5JGYupLl/yX
6PW6lTGMQ14nUMH0og==
------9200C78F9435257A83D6408C600DC4DF--
์ฌ๊ธฐ์ ํด๋น ๋ด์ฉ์ BerEditor ๋ก ๋์ฝ๋ฉ ํ ๊ทธ๋ฆผ์ ๋ค์๊ณผ ๊ฐ๋ค.

Signed Data ๋ฉ์ธ์ง ๊ฒ์ฆ
openssl cms -verify -in out.msg -signer ecdsa_cert.pem -CAfile chain.crt -out content.txt
chain.crt : ecdsa_cert.pem ์ ๋ํ ์ฒด์ธ ์ธ์ฆ์ ์ ๋ณด๊ฐ PEM ํ์์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
์ฒด์ธ ํ์ผ์ ecdsa_cert.pem ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ CA์ธ์ฆ์ ๋ถํฐ ์ต์์ RootCA ์ธ์ฆ์๋ฅผ PEM ํ์์ ์ธ์ฆ์ ์ ๋ณด๋ฅผ ๋์ดํ ํ์ผ์ด๋ค.
Enveloped Data ๋ฉ์ธ์ง ์์ฑ
openssl cms -encrypt -in test.txt -recip ecdsa_cert.pem -out enc_data.txt
์์ฑ๋ enc_data.txt ํ์ผ์ ์ด์ด ๋ณด๋ฉด ๋ค์ ์ฒ๋ผ ๋์จ๋ค.
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64
MIIBQQYJKoZIhvcNAQcDoIIBMjCCAS4CAQIxgfOhgfACAQOgUaFPMAkGByqGSM49
AgEDQgAEKkl2wlB6iHgqLzzLab5MCcclfuKMQAJBEF9nWoMP0gezqI4SLSW/xSwU
yAbU3X/6wB6/H0d4t4L60anVBpi2OzAcBgkrgQUQhkg/AAIwDwYLKoZIhvcNAQkQ
AwYFADB6MHgwTDBAMQswCQYDVQQGEwJLUjEOMAwGA1UEChMFUmFuaXgxDjAMBgNV
BAsTBURldmVsMREwDwYDVQQDDAhFQ0RTQV9DQQIIC8bKYsS9aHsEKOQzy0VBgpF9
dr2TnmjgGFyHHd7e0wgCgkJm3z/AeaaszvmtYiZoB3YwMwYJKoZIhvcNAQcBMBQG
CCqGSIb3DQMHBAjwK4BkxX3LEIAQPKe81tqYB3KgN3Rdikh5hA==
๊ทธ๋ฆฌ๊ณ ์์ฑ ๋ ๋ด์ฉ์ BerEditor ๋ก ๋์ฝ๋ฉ ํ๋ฉด์ด๋ค.

Enveloped Data ๋ณตํธํ
openssl cms -decrypt -in enc_data.txt -inkey ecdsa_pri.pem -out plain_data.txt
์ฌ๊ธฐ์๋ ๊ฐ๋จํ SignedData ์ EnvelopedData ํ์์ CMS ๋ฉ์ธ์ง์ ๋ง๋๋๊ฒ์ ํด๋ณด์๋ค.
์ฌ์ค CMS ๋ PKCS#7 ์ ๊ฐ์ ํ์์ด์ง๋ง ๋ฒ์ ์ ๋ฐ๋ฅธ ์์ ์ฐจ์ด๋ ์กด์ฌํ๋ค.
'Manual > OpenSSL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OpenSSL] OCSP ์ TSP ๋ช ๋ น์ด (0) | 2023.04.07 |
---|---|
[OpenSSL] PKCS#12 (PFX) ํ์ผ ๋ง๋ค๊ธฐ ๋ช ๋ น์ด (0) | 2023.04.07 |
[OpenSSL] RSA ๊ฐ์ธํค (PrivateKey) ์์ฑ ๋ช ๋ น์ด (0) | 2023.04.06 |
[OpenSSL] ECDSA ์ฉ Self-Sign ์ธ์ฆ์ ๋ง๋ค๊ธฐ (0) | 2023.04.05 |
[OpenSSL] TLS ์๋ฒ ํ ์คํธ (0) | 2023.04.05 |