Using RSA-PSS in OpenSSL 1.1.1b

Viktor Dukhovni openssl-users at dukhovni.org
Tue Mar 26 00:29:10 UTC 2019


On Tue, Mar 26, 2019 at 12:25:21AM +0100, Tobias Nießen wrote:

> I am using OpenSSL 1.1.1b and I have two questions regarding RSA-PSS. I 
> am using the following command to generate the private key:
> 
>  $ openssl genpkey -algorithm RSA-PSS -pkeyopt rsa_keygen_bits:2048 \
>    -pkeyopt rsa_keygen_pubexp:65537 -pkeyopt rsa_pss_keygen_md:sha256 \
>    -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt \
>    rsa_pss_keygen_saltlen:16 -out rsa_pss_private_2048_restricted.pem
> 
> This works, but I am unsure how to produce the corresponding public key 
> using the openssl CLI, it would be great if someone could give me some 
> pointers.

    $ openssl genpkey -algorithm RSA-PSS -pkeyopt rsa_keygen_bits:2048 \
        -pkeyopt rsa_keygen_pubexp:65537 -pkeyopt rsa_pss_keygen_md:sha256 \
        -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:16 \
        -out rsa_pss_private_2048_restricted.pem
    ....................................................................+++++
    ...........................+++++
    $ openssl pkey -in rsa_pss_private_2048_restricted.pem -pubout |
      openssl pkey -pubin -text
    -----BEGIN PUBLIC KEY-----
    MIIBUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEB
    CDALBglghkgBZQMEAgGiAwIBEAOCAQ8AMIIBCgKCAQEAtfBYSSrOvPmuwVzRJeOP
    h5o9iZEM2L9CTY3mJRW5cJOdoOwjEp6ITge3QxPbgoFlKwg88U1ejIj7/uNwZKIV
    yO5WRYRBFxS+rdBv6gQNyBn6z4LcxQ1chE6PgpmO0ZsDj56aRumf7mmg5ewFHOAG
    txeSRyT4NO6XMFb57OGGqGwhYm/nUrbrtmErCc8Y/HKP0TVHCnrvoGf2hgAkmvYG
    FxqbXs12nQrgcecPZVtszcdD/RelTaE62TnNrsHOCEdqLoOXTJ/64LQXKFrbAd7H
    YiBKXYA+PkJf5a053LJ9gIJlkYKpCbXqkI9cLRS/uX5WDg5/rJilR8Ng77tQSJvq
    LwIDAQAB
    -----END PUBLIC KEY-----
    RSA-PSS Public-Key: (2048 bit)
    Modulus:
	00:b5:f0:58:49:2a:ce:bc:f9:ae:c1:5c:d1:25:e3:
	8f:87:9a:3d:89:91:0c:d8:bf:42:4d:8d:e6:25:15:
	b9:70:93:9d:a0:ec:23:12:9e:88:4e:07:b7:43:13:
	db:82:81:65:2b:08:3c:f1:4d:5e:8c:88:fb:fe:e3:
	70:64:a2:15:c8:ee:56:45:84:41:17:14:be:ad:d0:
	6f:ea:04:0d:c8:19:fa:cf:82:dc:c5:0d:5c:84:4e:
	8f:82:99:8e:d1:9b:03:8f:9e:9a:46:e9:9f:ee:69:
	a0:e5:ec:05:1c:e0:06:b7:17:92:47:24:f8:34:ee:
	97:30:56:f9:ec:e1:86:a8:6c:21:62:6f:e7:52:b6:
	eb:b6:61:2b:09:cf:18:fc:72:8f:d1:35:47:0a:7a:
	ef:a0:67:f6:86:00:24:9a:f6:06:17:1a:9b:5e:cd:
	76:9d:0a:e0:71:e7:0f:65:5b:6c:cd:c7:43:fd:17:
	a5:4d:a1:3a:d9:39:cd:ae:c1:ce:08:47:6a:2e:83:
	97:4c:9f:fa:e0:b4:17:28:5a:db:01:de:c7:62:20:
	4a:5d:80:3e:3e:42:5f:e5:ad:39:dc:b2:7d:80:82:
	65:91:82:a9:09:b5:ea:90:8f:5c:2d:14:bf:b9:7e:
	56:0e:0e:7f:ac:98:a5:47:c3:60:ef:bb:50:48:9b:
	ea:2f
    Exponent: 65537 (0x10001)
    PSS parameter restrictions:
      Hash Algorithm: sha256
      Mask Algorithm: mgf1 with sha256
      Minimum Salt Length: 0x10
      Trailer Field: 0xBC (default)

> I also need to access the key restrictions (MD / MGF1 MD / salt length) 
> given only a pointer to the EVP_PKEY structure. I understand that the 
> information is stored in the RSA_PSS_PARAMS structure. How do I access 
> the restrictions using the public API?

EVP_PKEY_get0_RSA() gets you the underlying algorithm-specific RSA
key.  But there don't appear to be any accessors that use the
internal rsa_pss_get_param() function to return these parameters
(I could not find any).  Perhaps open an issue on github, or if
you are up for it, a pull request (with documentationa and code).

-- 
	Viktor.


More information about the openssl-users mailing list