Discussion:
openssl cms -encrypt does not work with EC key/cert
Theodore Wynnychenko
2021-05-06 17:40:35 UTC
Permalink
Hi

I posted this to the openssl user list the other day, but now think that was
the wrong place, since it is libressl on openbsd, right?

So, let me ask here:

Hello


I recently decided to change from RSA to EC keys/certs.
I do this primarily as a learning exercise (there is no real corporate or
professional demand to have this working).
I am running OpenBSD current (6.9) from about 1 month ago.


Previously, I have been using "openssl smime" to sign and encrypt emails.

Now that I am migrating to EC keys/certificates, I need to switch to
"openssl cms".

However, I am unable to encrypt using the EC certificate.

When I use:
(I am going to obfuscate the emails in plain text.)

cat text.in | /usr/bin/openssl cms -encrypt -from 'User
<***@example.com>' -to 'Admin <***@example.com>' -subject "Test Email"
-aes256 encryption.pem > encrypted.out

with the old RSA certificate, everything works as expected.

But, when I replace the RSA cert with the EC certificate, it does not.
Instead, I see:

15724089243112:error:2EFFF06F:CMS routines:CRYPTO_internal:ctrl
failure:/usr/src/lib/libcrypto/cms/cms_env.c:124:
15724089243112:error:2EFFF074:CMS routines:CRYPTO_internal:error setting
recipientinfo:/usr/src/lib/libcrypto/cms/cms_env.c:944:
15724089243112:error:2EFFF068:CMS routines:CRYPTO_internal:cms
lib:/usr/src/lib/libcrypto/cms/cms_smime.c:850:

And the output file is zero size.

I tried a more basic command:

openssl cms -encrypt -in text.in -out encrypted.out -recip encryption.pem

Works with RSA certificate, same error with EC certificate.

I also tried (not really understanding):

openssl cms -encrypt -in text.in -out encrypted.out -recip encryption.pem
-keyopt ecdh_kdf_md:sha256

and got the same error.

I then created some very basic self-signed EC certs.

The first, with an email in the DN, and the email as the CN:

Certificate:
Data:
Version: 1 (0x0)
Serial Number:
cd:c8:e1:f4:f8:f7:32:dd
Signature Algorithm: ecdsa-with-SHA384
Issuer: C=US, ST=State, L=City, O=Org, OU=Home,
CN=***@example.com/emailAddress=***@example.com
Validity
Not Before: May 6 17:19:53 2021 GMT
Not After : May 6 17:19:53 2022 GMT
Subject: C=US, ST=State, L=City, O=Org, OU=Home,
CN=***@example.com/emailAddress=***@example.com
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:8e:11:20:73:c8:8d:5d:61:43:c4:6b:bf:04:fe:
c6:5d:a8:22:79:ae:0a:eb:de:0b:67:e6:32:24:43:
30:56:61:0a:e6:31:e4:82:cc:a8:9c:37:e9:90:01:
df:e7:90:79:dc:d5:f1:c6:0c:6e:2f:bd:51:f8:98:
4e:4b:1b:16:52:73:73:d6:fd:1f:00:a1:f6:39:03:
98:3e:64:43:77:c3:c5:95:61:c3:22:05:3c:e6:d2:
86:29:e1:a3:9c:b9:32
ASN1 OID: secp384r1
NIST CURVE: P-384
Signature Algorithm: ecdsa-with-SHA384
30:64:02:30:38:e0:dc:6d:2a:87:d0:a5:c8:9e:eb:c9:03:f6:
fc:6d:aa:80:8c:cf:8d:11:15:70:ee:1b:b6:29:21:53:40:a4:
3a:29:30:7d:5c:d5:ac:df:44:fc:a9:eb:a9:1a:b8:34:02:30:
15:42:91:ae:e3:2d:b3:3b:bd:78:63:9d:89:1c:5f:28:5c:bb:
c9:a0:01:6a:31:84:94:e0:e7:45:73:0a:51:84:0e:0b:79:a8:
04:eb:62:5b:71:cf:c8:6a:d1:86:3d:e6


The second with the CN as the email, but no email in the DN:

Certificate:
Data:
Version: 1 (0x0)
Serial Number:
e5:fd:15:21:f1:b2:71:de
Signature Algorithm: ecdsa-with-SHA384
Issuer: C=US, ST=State, L=City, O=Org, OU=Home, CN=***@example.com
Validity
Not Before: May 6 17:18:43 2021 GMT
Not After : May 6 17:18:43 2022 GMT
Subject: C=US, ST=State, L=City, O=Org, OU=Home,
CN=***@example.com
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:8e:11:20:73:c8:8d:5d:61:43:c4:6b:bf:04:fe:
c6:5d:a8:22:79:ae:0a:eb:de:0b:67:e6:32:24:43:
30:56:61:0a:e6:31:e4:82:cc:a8:9c:37:e9:90:01:
df:e7:90:79:dc:d5:f1:c6:0c:6e:2f:bd:51:f8:98:
4e:4b:1b:16:52:73:73:d6:fd:1f:00:a1:f6:39:03:
98:3e:64:43:77:c3:c5:95:61:c3:22:05:3c:e6:d2:
86:29:e1:a3:9c:b9:32
ASN1 OID: secp384r1
NIST CURVE: P-384
Signature Algorithm: ecdsa-with-SHA384
30:64:02:30:3f:06:2c:b1:e1:2f:b1:0b:1e:a1:1a:eb:29:1e:
8c:e5:c4:6a:73:f5:43:4e:24:77:88:bf:b1:99:51:15:02:50:
12:cd:50:ae:d1:7f:4f:e5:3b:ba:38:06:c4:26:ea:4b:02:30:
66:9d:a4:38:7e:45:ed:7d:db:7c:3e:f9:f7:68:80:e0:13:79:
8b:85:9c:5d:b6:29:91:73:59:04:6a:73:8e:bb:bb:15:49:cc:
68:63:25:b9:c6:fe:30:40:39:65:97:57

Both using the same EC secp384r1 key.

When I try to do the most (I think) basic openssl cms -encrypt, I get the
same error.

openssl cms -encrypt -in in.txt -out encrypt.out test.pem
openssl cms -encrypt -in in.txt -out encrypt.out -recip test.pem -keyopt
ecdh_kdf_md:sha256
openssl cms -encrypt -in in.txt -out encrypt.out -recip test.pem -keyopt
ecdh_kdf_md:sha256

with either of the certificates (email in DN or not), they all produce:

11034533897704:error:2EFFF06F:CMS routines:CRYPTO_internal:ctrl
failure:/usr/src/lib/libcrypto/cms/cms_env.c:124:
11034533897704:error:2EFFF074:CMS routines:CRYPTO_internal:error setting
recipientinfo:/usr/src/lib/libcrypto/cms/cms_env.c:944:
11034533897704:error:2EFFF068:CMS routines:CRYPTO_internal:cms
lib:/usr/src/lib/libcrypto/cms/cms_smime.c:850:

I am not sure what this error means, or how to address it.

Any suggestions would be great.

Thanks

Ted
Theodore Wynnychenko
2021-05-08 13:35:57 UTC
Permalink
Hello again:

I am re-posting this message with additional information..
While I have no expectation that there will be any reply, I am hopeful there
may be.

In any case, I have been struggling with this, and cannot get it to work
with EC certificates.
I am now wondering if this is a bug or a, currently, unsupported function in
Libressl..

$ openssl version
LibreSSL 3.3.2
Post by Theodore Wynnychenko
Hello
I recently decided to change from RSA to EC keys/certs.
I do this primarily as a learning exercise (there is no real corporate
or
professional demand to have this working).
I am running OpenBSD current (6.9) from about 1 month ago.
Now that I am migrating to EC keys/certificates, I need to switch to
"openssl cms".
It is my understanding that openssl smime only supports RSA certs, but
openssl cms should support RSA and EC certificates.
Post by Theodore Wynnychenko
However, I am unable to encrypt using the EC certificate.
(I am going to obfuscate the emails in plain text.)
cat text.in | /usr/bin/openssl cms -encrypt -from 'User
Email"
-aes256 encryption.pem > encrypted.out
with the old RSA certificate, everything works as expected.
But, when I replace the RSA cert with the EC certificate, it does not.
15724089243112:error:2EFFF06F:CMS routines:CRYPTO_internal:ctrl
15724089243112:error:2EFFF074:CMS routines:CRYPTO_internal:error
setting
15724089243112:error:2EFFF068:CMS routines:CRYPTO_internal:cms
And the output file is zero size.
openssl cms -encrypt -in text.in -out encrypted.out -recip
encryption.pem
Works with RSA certificate, same error with EC certificate.
openssl cms -encrypt -in text.in -out encrypted.out -recip
encryption.pem
-keyopt ecdh_kdf_md:sha256
and got the same error.
I then created some very basic self-signed EC certs.
...
Post by Theodore Wynnychenko
Version: 1 (0x0)
e5:fd:15:21:f1:b2:71:de
Signature Algorithm: ecdsa-with-SHA384
Issuer: C=US, ST=State, L=City, O=Org, OU=Home,
Validity
Not Before: May 6 17:18:43 2021 GMT
Not After : May 6 17:18:43 2022 GMT
Subject: C=US, ST=State, L=City, O=Org, OU=Home,
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
86:29:e1:a3:9c:b9:32
ASN1 OID: secp384r1
NIST CURVE: P-384
Signature Algorithm: ecdsa-with-SHA384
68:63:25:b9:c6:fe:30:40:39:65:97:57
Both using the same EC secp384r1 key.
When I try to do the most (I think) basic openssl cms -encrypt, I get
the
same error.
openssl cms -encrypt -in in.txt -out encrypt.out test.pem
openssl cms -encrypt -in in.txt -out encrypt.out -recip test.pem
openssl cms -encrypt -in in.txt -out encrypt.out -recip test.pem -
keyopt
ecdh_kdf_md:sha256
11034533897704:error:2EFFF06F:CMS routines:CRYPTO_internal:ctrl
11034533897704:error:2EFFF074:CMS routines:CRYPTO_internal:error
setting
11034533897704:error:2EFFF068:CMS routines:CRYPTO_internal:cms
However, if I do the same thing (create a basic, self signed RSA
certificate):

Certificate:
Data:
Version: 1 (0x0)
Serial Number:
df:31:84:a5:79:b6:d4:7a
Signature Algorithm: sha384WithRSAEncryption
Issuer: C=US, ST=State, L=City, O=Org, OU=Home, CN=***@example.com
Validity
Not Before: May 8 13:18:17 2021 GMT
Not After : May 8 13:18:17 2022 GMT
Subject: C=US, ST=State, L=City, O=Org, OU=Home,
CN=***@example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
00:b0:d7:22:59:62:e8:b0:f9:d8:e7:48:ee:12:dc:
da:16:8c:c4:a5:2d:74:86:08:2f:b0:58:fd:80:8b:
0d:d1:58:5a:9d:27:07:82:e5:cd:7b:c6:22:96:92:
86:46:bd:a4:3f:50:79:28:16:e3:20:f4:af:b7:da:
31:e3:54:fe:97:fa:e9:b4:fd:9b:fa:40:d2:64:37:
7c:4e:48:6a:61:2d:99:c2:f8:6a:c8:b0:47:26:9d:
91:9e:61:cf:34:16:51:d8:5b:1e:f0:40:b7:b7:87:
ae:4c:65:fc:9e:5b:f2:2e:db:30:ef:83:e9:9e:f0:
39:bd:aa:f4:78:ec:36:af:38:e7:8b:05:6f:91:5d:
4f:3d:02:ea:1d:0a:c6:fb:a3:2a:70:e7:12:35:c4:
08:16:40:17:43:81:03:df:1b:c3:af:1b:73:6a:0c:
61:f5:5c:f0:64:c9:83:a4:41:63:0f:28:a0:8d:4d:
d0:db:09:25:54:eb:56:58:16:71:18:da:1a:5a:42:
64:be:46:2d:52:68:6a:50:05:a2:72:1c:55:4d:b7:
e3:27:7a:96:f4:c5:b5:29:e1:a7:ca:7d:f5:92:fb:
3e:6e:15:38:30:4f:4a:68:cb:9b:73:07:82:7a:64:
14:9c:67:a6:a5:92:b5:91:e2:f1:e9:63:7c:f5:1b:
01:48:99:54:09:42:9d:d2:05:68:00:6e:63:1e:c0:
68:61:a6:36:c5:d2:14:f1:39:8e:e4:e0:b8:6e:c5:
c5:5a:9a:3a:da:52:13:0c:b5:8c:1b:c4:48:0b:a8:
59:db:cb:bb:4b:89:00:fb:6f:e9:65:77:89:a7:c4:
3d:a2:9e:e8:9a:67:26:d2:2d:da:d9:e3:9c:2d:97:
2c:59:8d:85:e1:b4:ba:07:ab:e1:34:fc:62:8f:4b:
1c:02:e3:9e:1d:27:83:da:8d:f1:a4:56:15:14:ba:
28:d6:54:58:47:33:11:93:c9:a2:bb:83:a0:3d:8e:
a6:c4:f8:70:72:7a:4d:31:7e:1b:fd:a1:a2:1e:c4:
c1:79:88:c6:33:48:50:e0:85:0f:57:f3:81:71:ed:
1b:32:79:63:14:ff:51:1c:88:c1:d7:e9:76:25:93:
94:d3:06:54:c0:29:c7:d0:c1:15:55:40:8d:0c:01:
2d:88:82:47:0d:52:eb:13:d3:48:69:bc:bf:d5:eb:
e1:dd:43:36:31:2e:6f:ce:0f:ad:90:0a:c3:81:c2:
5f:94:b3:ed:58:d3:80:44:37:d4:c5:86:ea:b7:cc:
8b:b4:b3:a0:f5:e8:7d:9f:7c:b1:cd:c0:04:c8:41:
41:e3:5c:8b:60:2f:5f:ba:00:6c:06:cc:7f:b7:e3:
fc:c6:77
Exponent: 65537 (0x10001)
Signature Algorithm: sha384WithRSAEncryption
92:26:cb:0d:8c:e9:37:f9:dc:ee:8d:5d:80:cd:db:bd:2a:5c:
a0:eb:88:2f:f6:b0:94:ff:fe:8d:40:25:9d:6d:49:45:13:92:
58:32:8d:bd:ae:15:e9:91:af:ff:3c:37:f3:bd:45:17:90:4d:
30:90:20:2a:d5:6d:32:d9:36:8a:cd:99:3f:c7:8d:ce:a7:eb:
8c:5e:39:29:94:e3:df:70:45:f6:91:a1:1c:ed:19:48:a8:66:
f3:74:d1:82:39:0f:bd:1c:d4:0c:13:5c:56:6f:4c:37:ca:21:
60:65:2d:2b:23:45:0e:44:c3:46:88:fd:b8:37:68:72:c2:58:
d4:d5:9d:ab:f9:b5:dd:6d:95:56:a7:a3:1b:e6:df:7d:02:4a:
7b:a0:7b:d9:9e:43:ae:a5:f9:1f:55:0e:b3:3b:2b:56:2b:18:
b0:00:7f:fb:a6:1e:ba:f6:f7:69:83:db:f6:14:41:4c:e4:c8:
4f:c9:f5:17:a9:d2:5a:22:ff:b6:71:ee:62:5a:d1:1d:27:b4:
91:4f:4a:2e:e5:b2:8f:4b:bc:20:cb:37:a5:6c:ba:1f:76:6d:
16:a4:b9:7b:a5:0e:6b:47:66:f7:ad:55:e8:5a:13:6c:e7:df:
66:0c:4d:6c:89:b4:d6:b4:3f:4e:57:4b:e0:06:34:e9:75:37:
1d:d5:68:9d:3d:6b:b0:23:a2:2b:1c:3e:9f:b0:6f:17:5a:36:
79:cc:b7:b6:26:54:c2:4f:71:57:3e:88:a6:20:3f:a2:49:f0:
25:e8:03:8f:9f:ed:bd:62:0f:65:44:11:97:7a:7a:a9:cc:d4:
e1:8a:aa:f2:65:47:9c:e9:de:41:fe:81:8b:73:0f:be:52:e5:
83:71:47:c6:c1:24:10:5d:be:c7:a4:fe:78:0e:3f:09:d8:7b:
f2:b6:83:10:49:d3:1c:b8:9a:26:9d:82:0a:24:62:64:06:5c:
31:a5:de:69:ba:8b:39:4f:b6:d7:58:6b:6e:14:64:43:3b:81:
e2:a8:5c:d2:e3:04:fb:28:04:d4:f1:ee:13:76:8f:fd:fa:4b:
14:18:70:29:4d:98:eb:1b:e2:87:45:84:24:f4:03:c6:a9:cc:
1d:b9:86:6c:36:70:6a:cb:6d:50:6c:d8:1c:39:ff:72:bf:f9:
ab:ba:17:f3:7c:e5:16:9f:e3:35:31:61:76:89:b4:30:21:60:
e0:10:59:04:08:21:7d:78:06:dd:c7:97:8c:88:e5:f5:78:d3:
0d:8a:56:71:8f:4d:df:30:c9:ef:cc:58:c1:d7:8b:ca:33:55:
42:69:f3:14:29:59:40:f5:fa:68:dc:06:c7:be:0e:45:34:ba:
b3:95:66:9d:00:24:31:5c

and then use the RSA cert:

openssl cms -encrypt -in in.txt -out encrypt.out test.rsa.pem

the data is encrypted without errors.
Post by Theodore Wynnychenko
I am not sure what this error means, or how to address it.
Any suggestions would be great.
Thanks
Ted
Stuart Henderson
2021-05-08 13:50:24 UTC
Permalink
Post by Theodore Wynnychenko
I am re-posting this message with additional information..
While I have no expectation that there will be any reply, I am hopeful there
may be.
Confirmed, and it also fails with OpenSSL 1.0.2u, but succeeds with
1.1.1k. I think perhaps this is just something that has been added
to newer OpenSSL but not added to LibreSSL yet.
Kinichiro Inoguchi
2021-05-10 11:34:07 UTC
Permalink
Post by Stuart Henderson
Post by Theodore Wynnychenko
I am re-posting this message with additional information..
While I have no expectation that there will be any reply, I am hopeful there
may be.
Confirmed, and it also fails with OpenSSL 1.0.2u, but succeeds with
1.1.1k. I think perhaps this is just something that has been added
to newer OpenSSL but not added to LibreSSL yet.
Hi,
I had investigated this and found some missing bits.
I believe this diff would solve your issue.
Can you check this if your problem has gone ?

Index: obj_xref.txt
===================================================================
RCS file: /cvs/src/lib/libcrypto/objects/obj_xref.txt,v
retrieving revision 1.2
diff -u -p -u -p -r1.2 obj_xref.txt
--- obj_xref.txt 9 Nov 2014 19:17:13 -0000 1.2
+++ obj_xref.txt 8 May 2021 13:26:38 -0000
@@ -46,3 +46,16 @@ id_GostR3411_94_with_GostR3410_94_cc id_
id_GostR3411_94_with_GostR3410_2001_cc id_GostR3411_94 id_GostR3410_2001_cc
id_tc26_signwithdigest_gost3410_2012_256 id_tc26_gost3411_2012_256 id_tc26_gost3410_2012_256
id_tc26_signwithdigest_gost3410_2012_512 id_tc26_gost3411_2012_512 id_tc26_gost3410_2012_512
+
+# ECDH KDFs and their corresponding message digests and schemes
+dhSinglePass_stdDH_sha1kdf_scheme sha1 dh_std_kdf
+dhSinglePass_stdDH_sha224kdf_scheme sha224 dh_std_kdf
+dhSinglePass_stdDH_sha256kdf_scheme sha256 dh_std_kdf
+dhSinglePass_stdDH_sha384kdf_scheme sha384 dh_std_kdf
+dhSinglePass_stdDH_sha512kdf_scheme sha512 dh_std_kdf
+
+dhSinglePass_cofactorDH_sha1kdf_scheme sha1 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha224kdf_scheme sha224 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha256kdf_scheme sha256 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha384kdf_scheme sha384 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha512kdf_scheme sha512 dh_cofactor_kdf
Index: obj_xref.h
===================================================================
RCS file: /cvs/src/lib/libcrypto/objects/obj_xref.h,v
retrieving revision 1.4
diff -u -p -u -p -r1.4 obj_xref.h
--- obj_xref.h 21 Dec 2016 15:49:29 -0000 1.4
+++ obj_xref.h 8 May 2021 13:26:38 -0000
@@ -44,6 +44,16 @@ static const nid_triple sigoid_srt[] =
{NID_rsassaPss, NID_undef, NID_rsaEncryption},
{NID_id_tc26_signwithdigest_gost3410_2012_256, NID_id_tc26_gost3411_2012_256, NID_id_GostR3410_2001},
{NID_id_tc26_signwithdigest_gost3410_2012_512, NID_id_tc26_gost3411_2012_512, NID_id_GostR3410_2001},
+ {NID_dhSinglePass_stdDH_sha1kdf_scheme, NID_sha1, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha224kdf_scheme, NID_sha224, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha256kdf_scheme, NID_sha256, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha384kdf_scheme, NID_sha384, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha512kdf_scheme, NID_sha512, NID_dh_std_kdf},
+ {NID_dhSinglePass_cofactorDH_sha1kdf_scheme, NID_sha1, NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha224kdf_scheme, NID_sha224, NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha256kdf_scheme, NID_sha256, NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha384kdf_scheme, NID_sha384, NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha512kdf_scheme, NID_sha512, NID_dh_cofactor_kdf},
};

static const nid_triple * const sigoid_srt_xref[] =
@@ -61,19 +71,29 @@ static const nid_triple * const sigoid_s
&sigoid_srt[5],
&sigoid_srt[8],
&sigoid_srt[12],
+ &sigoid_srt[32],
+ &sigoid_srt[37],
&sigoid_srt[6],
&sigoid_srt[10],
&sigoid_srt[11],
&sigoid_srt[13],
&sigoid_srt[24],
&sigoid_srt[20],
+ &sigoid_srt[34],
+ &sigoid_srt[39],
&sigoid_srt[14],
&sigoid_srt[21],
+ &sigoid_srt[35],
+ &sigoid_srt[40],
&sigoid_srt[15],
&sigoid_srt[22],
+ &sigoid_srt[36],
+ &sigoid_srt[41],
&sigoid_srt[16],
&sigoid_srt[23],
&sigoid_srt[19],
+ &sigoid_srt[33],
+ &sigoid_srt[38],
&sigoid_srt[25],
&sigoid_srt[26],
&sigoid_srt[27],

Loading...