openssl and DSA q size doubt

M K Saravanan mksarav at gmail.com
Wed Jul 24 16:09:18 UTC 2024


Hi,

I am trying to learn how DSA works by reading the book "Understanding
Cryptography" by Christof Paar and  Jan Pelzl.

I also understand that DSA is now deprecated as per FIPS 186-5 (Feb, 2023)
and ECDSA is preferred.

However just for learning purpose I was experimenting with DSA param
generation, key generation and cert generation using openssl.

As per the book, the recommended size for p and q values are:

p = 1024 bits, q = 160 bits

p = 2048 bits, q = 224 bits

p = 3072 bits, q = 256 bits.

>From the book, I also understand that the length of the DSA signature r and
s size will be the same as q size.

Thus if q = 160 bits, then r size is also 160 bits and s size is also 160
bits.

I used openssl:

$ openssl version

OpenSSL 3.0.14 4 Jun 2024 (Library: OpenSSL 3.0.14 4 Jun 2024)


and created a dsaparam file for 1024 bit key size and using that param
file, generated a dsakey.

$ openssl dsaparam -in dsaparam.pem -text -noout

DSA-Parameters: (1024 bit)

P:

    00:89:8b:28:2d:ae:59:55:19:de:ef:79:a8:f0:f1:

    44:39:b4:ee:32:fc:48:38:7e:bd:4a:d0:d7:ea:02:

    b1:e8:12:65:d4:f9:3e:ef:bb:03:d6:85:33:91:fa:

    a0:0f:88:96:a2:06:16:84:e6:6d:8c:41:ad:f7:ab:

    51:59:44:5d:df:c6:06:66:08:51:2b:f5:3c:1e:02:

    35:2a:78:1a:9b:7e:0c:d1:65:e6:0a:c5:63:ca:3a:

    58:84:6b:ff:b8:4a:9a:b7:97:a0:3d:6b:ba:e4:02:

    a9:97:fb:e8:98:4e:a4:42:8f:31:20:3d:31:50:31:

    00:7a:b0:01:37:80:f6:f8:15

Q:

    00:d5:eb:71:18:25:4e:6c:b9:e0:20:92:02:f4:86:

    5f:d9:cd:66:cc:ff:89:33:86:54:c6:19:90:f5

G:

    52:02:50:73:17:4f:12:35:f6:11:ed:c6:c1:b8:01:

    b4:e5:cf:5f:05:a4:6b:f8:d4:a5:d9:3e:a9:7a:97:

    f3:d2:db:28:4a:57:2e:a3:f4:a7:fc:16:65:75:9a:

    5d:67:b0:a8:ac:43:21:24:53:48:23:e3:13:52:ce:

    a3:b7:7e:85:b9:0f:51:e8:fe:32:16:12:82:16:44:

    29:85:83:eb:8e:3e:dd:9c:38:49:de:da:44:85:d1:

    31:01:20:c7:43:1f:30:3e:f3:a6:50:36:ee:e5:66:

    1c:40:a2:ca:1d:39:78:a5:4a:4a:04:83:15:df:4a:

    69:1c:d2:4f:ac:36:74:78

=======

Here the size of q is 28 bytes (ignore the leading 0x00 byte). so 28*8 =
224 bits.

I was expecting a q size of 160 bits, but here it is 224 bits.  Why?

Using above param, I generated a dsa key.

Using that key, I created a self signed cert for testing purpose.


-------------

$ openssl x509 -in ./dsacert.pem -text -nooout

Certificate:

    Data:

        Version: 3 (0x2)

        Serial Number:

            2f:40:b1:22:44:be:69:bc:36:01:25:a7:d0:c3:5d:33:0d:21:cc:eb

        Signature Algorithm: dsa_with_SHA256

        Issuer: C = SG, ST = SG, L = Suntec, O = F5, OU = ES, CN =
www.dsa1024eg.com, emailAddress = mksarav at gmail.com

        Validity

            Not Before: Jul 23 16:53:09 2024 GMT

            Not After : Aug 22 16:53:09 2024 GMT

        Subject: C = SG, ST = SG, L = Suntec, O = F5, OU = ES, CN =
www.dsa1024eg.com, emailAddress = mksarav at gmail.com

        Subject Public Key Info:

            Public Key Algorithm: dsaEncryption

                Public-Key: (1024 bit)

                pub:

                    0b:10:f8:f9:59:75:02:00:b3:b0:c7:4f:20:01:fe:

                    6b:6b:a0:1e:3c:44:b5:4c:e4:fb:16:39:1c:12:d8:

                    14:5d:ee:73:28:14:57:40:40:59:8f:37:54:7f:b8:

                    12:fd:55:5a:40:73:36:63:b7:1c:3f:39:87:76:56:

                    8b:8b:9c:df:41:a9:c6:56:ed:34:cb:5c:d2:db:55:

                    d4:37:d4:b1:59:25:b6:6a:7d:5c:61:9b:39:9a:6a:

                    a7:27:ac:2f:43:65:7f:53:76:bb:98:91:f0:f0:9c:

                    1d:99:88:43:44:4e:3c:c1:43:30:09:06:7b:c7:ad:

                    38:27:3a:6b:38:56:7e:38

                P:

                    00:89:8b:28:2d:ae:59:55:19:de:ef:79:a8:f0:f1:

                    44:39:b4:ee:32:fc:48:38:7e:bd:4a:d0:d7:ea:02:

                    b1:e8:12:65:d4:f9:3e:ef:bb:03:d6:85:33:91:fa:

                    a0:0f:88:96:a2:06:16:84:e6:6d:8c:41:ad:f7:ab:

                    51:59:44:5d:df:c6:06:66:08:51:2b:f5:3c:1e:02:

                    35:2a:78:1a:9b:7e:0c:d1:65:e6:0a:c5:63:ca:3a:

                    58:84:6b:ff:b8:4a:9a:b7:97:a0:3d:6b:ba:e4:02:

                    a9:97:fb:e8:98:4e:a4:42:8f:31:20:3d:31:50:31:

                    00:7a:b0:01:37:80:f6:f8:15

                Q:

                    00:d5:eb:71:18:25:4e:6c:b9:e0:20:92:02:f4:86:

                    5f:d9:cd:66:cc:ff:89:33:86:54:c6:19:90:f5

                G:

                    52:02:50:73:17:4f:12:35:f6:11:ed:c6:c1:b8:01:

                    b4:e5:cf:5f:05:a4:6b:f8:d4:a5:d9:3e:a9:7a:97:

                    f3:d2:db:28:4a:57:2e:a3:f4:a7:fc:16:65:75:9a:

                    5d:67:b0:a8:ac:43:21:24:53:48:23:e3:13:52:ce:

                    a3:b7:7e:85:b9:0f:51:e8:fe:32:16:12:82:16:44:

                    29:85:83:eb:8e:3e:dd:9c:38:49:de:da:44:85:d1:

                    31:01:20:c7:43:1f:30:3e:f3:a6:50:36:ee:e5:66:

                    1c:40:a2:ca:1d:39:78:a5:4a:4a:04:83:15:df:4a:

                    69:1c:d2:4f:ac:36:74:78

        X509v3 extensions:

            X509v3 Subject Key Identifier:

                2E:C6:63:46:C2:50:2C:24:9C:09:0F:2C:52:32:16:20:0B:B5:70:69

            X509v3 Authority Key Identifier:

                2E:C6:63:46:C2:50:2C:24:9C:09:0F:2C:52:32:16:20:0B:B5:70:69

            X509v3 Basic Constraints: critical

                CA:TRUE

    Signature Algorithm: dsa_with_SHA256

    Signature Value:

        r:

            2e:89:a2:92:51:f1:a8:94:0a:46:44:d5:4b:2d:d4:

            ce:3f:50:1a:52:92:57:3e:5a:52:13:00:3e

        s:

            2d:d7:fd:72:83:2a:27:1a:2a:72:c6:ad:68:10:9a:

            a0:26:00:27:fa:68:18:6e:58:81:01:60:68

-----------------

Here the r and s size are 28 = 28*8 = 224 bits which is same size as q size
as expected (here q size = 224 bits) since it is a self-signed cert.

But  my question is why q is not 160 bits but instead 224 bits was used by
openssl since the FIPS 186 standard clearly says to use q size 160 bits for
p size 1024 bits?

Can someone familiar with the topic, clarify my doubt please? Maybe I
missed some fine points in the standard.


Sorry if my question looks stupid and basic, I am just trying to learn
cryptography on my own by reading books, watching professors lecture online
and self experimentation.


with regards,

M K Saravanan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20240725/c3bebf75/attachment-0001.htm>


More information about the openssl-users mailing list