Re: ECDH internal functions and FIPS140-2 mode
Nicolas Mora <[email protected]> Sun, 28 Feb 2021 20:17:24 -0500
| Newsgroups | gmane.network.gnutls.general |
|---|---|
| Message-ID | <[email protected]> |
Hello, Le 2021-02-25 à 00 h 54, Daiki Ueno a écrit : >> >> There are 2 feedbacks though: >> 1- I have a memory leak in the _gnutls_ecdh_compute_key function >> I've attached a sample code to reproduce the problem and the valgrind output > > I believe this should be fixed in: > https://gitlab.com/gnutls/gnutls/-/merge_requests/1380 > which is not part of any release yet. > Indeed, thanks! > >> I'm very willing to help with that with test cases and help with the >> code if required. > > Sure, if you come up with an MR, that would be greatly appreciated. > So I have created an MR for one of the use case: ecdh keys computation [1]. So far this MR only adds one function to generate a shared secret between 2 ecdsa keys. But after looking at it, it might be extended to other key types, such as DH, or even X25519/X448. But if I'm right, it's not possible yet to generate DH, X25519 or X448 private keys. gnutls_privkey_generate return -50 when used with GNUTLS_PK_ECDH_X25519 or GNUTLS_PK_DH. I don't see a GNUTLS_PK_ECDH_X448 nor GNUTLS_ECC_CURVE_X448 to calculate the curve length, nor GNUTLS_ECC_CURVE_DH, even if there is a GNUTLS_PK_DH. [DH] - Would it be a good idea to use _gnutls_dh_generate_key to improve gnutls_privkey_generate? [ECDH] - I've "released" _gnutls_ecdh_generate_key from ENABLE_FIPS140 but I don't use it, is this function different from what gnutls_privkey_generate returns when used with GNUTLS_PK_ECDSA? Or should it stay hidden in FIPS140 mode? [X25519] From what I understand, an X25519 key is an EDDSA private key, but the 'x' parameter is calculated using k*G. Nettle seems to has the routines required for X25519 key computation [2] - If my above assumptions are right, one can improve gnutls_privkey_generate to generate X25519/X448 private keys [General] If other curve types are allowed for gnutls_*_compute_key, I'd go with only one function gnutls_ec_compute_key that would have the same parameters as gnutls_ecdh_compute_key but would use the correct key computation depending on the curve type. What do you think? It's my first contribution to GnuTLS so I may be very wrong with my assumptions and suggestions, I'm open to feedbacks. /Nicolas [1] https://gitlab.com/gnutls/gnutls/-/merge_requests/1395 [2] https://www.lysator.liu.se/~nisse/nettle/nettle.html#Curve-25519-and-Curve-448 _______________________________________________ Gnutls-help mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnutls-help
OpenPGP_0xFE82139440BD22B9.asc
(application/pgp-keys, 3 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFmJqr8BEADBhkCFzusIdcIn8V8+Maee1V+GhD/sNS/GuqDL5WwVlrdv6TDrEiiIGvX76fs+ F1/wP9z/8P2QVm6pxZG+MGpARmWyYkMyklMpqjuXN8JMutjAM9ymouEtVcb3CV20AgXU7Qe1M2Do fmg4waRM5vHsLI0gvARgo5Rxxc+DoKS8GApE2nbXB8imFLJ48L1FnDVbQWpIW+mzO7dtMY6XQkpv qtRkYrEfxvVDHD06fG4SIzVF8QL1iiRHncG+5u24AU1FxKxxFNYUTcQxCQZ5JNHsANmgsWCcheEL 15B0eDYrJ7jDPaGiN2Ullh4csO9zlYyfWA84I4CGi3En5C69M7uvOxvyg7LL9GsrAaH51ksR1ksD H41OMSBVkeLSpU8RPudy8bpIsGXNtqpAOFjhGoJz6POggY/HmAJeqRDF1HfjPFFm3dZ7E0dLR0aP vxTwuzIERRcjKrzMqslLTjgOVUXSfjhCtWPmcRbwCHWR2k/icho20wnEVJsVrbNld/0fMvxenrWS muwawnDHTSwK5Sy5ec2JQy6qvQ2zJIYrdg0eHur/sURiSbAyNmfoOII9GBTAFm13XkHWbBysppGQ VAyowYO2h0JC+6MVxQRndBsCC4jRNiT9wptl4rOho4GYW4d/smGlCbki/bYdSItbtk4rjHAyl+WY M6Jpy1sZXe7SDQARAQABzSVOaWNvbGFzIE1vcmEgPG5pY29sYXNAYmFiZWxvdWVzdC5vcmc+wsF3 BBMBCAAhBQJZiaq/AhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJEP6CE5RAvSK5ZTkP/3PN +SPKLKOcgG/C3ZI9KxM93y4AKZ0zUCBtr2QJDt8viFKq3jPsSo6+Rw1UuY2oDx4wWUXqlsp3NKnv oKWMip6UVVH0XB48iLe4Tiu0PVqIfHB/MIdE/QSYLFZzX0n4AgTlrho7Hd+S7TZMtf15FKF4/8y5 lLVXK86cbZhaOEPcJyb9taT4IVkU5M22aNfuZAUjexeCsn/em4pjEyREilht8Fo9tND9Nr/w2SOJ NAKWZp+JlKR1ok3zsFvEN5rAEsdA9gvQ/5ubs8iXM0KfBHLa0wp/YWRLRrDFoCEqrkZdBetGxJn4 G+wNdhb4TTsXHTfb/0Je179uF2jcFawr/DhJb/bKJUB236u2+0e53QufYq8brBqA4aONDCfOVAHV NjazruCKWli2E2lHvJLVQeFkBP2Mo9IiWO8uNdXpK5QUjcipW5t6fxN1beNzJdZLiHVjjVKskVue oLDYtHt0TzPY75I6Bgy/oRz5e1sP6UjYsZs5+ZUFOw7Zii5kXcPDrhXb1sEd9ZvB4f9XdvxtE91h aUz9EW63XIvsUYsnjqdTznojBVeLVVnZJKp3RlWFw0o0xT90JuOkA5Pw8oL0GpBRA9vaPi1phs2D CbCRe/U188HkNmhiH1C9dY+J/4h8IvicjIgTI0+27FPFxp6nMlkH4OgjUHZrbvE9E8SrzonrzsFN BFmJqr8BEADrI5lstjLaS6IXxH37GWvfPLdjLyTFK5kJqyZkhGNMWHmwmRU3BVrz0M0Tva/a3Z1B +fXJGzKevQhKMBsrpYhkbKkbMg7vreiWhZjQyy5nvbKA4aMhZ1ckmYWExOk2QiUpTDoLDBN7VEZG +FV9Hw5ZVeH1k5LnbIxxxIGdzK1mxcCBgJodvzHsp1SZefVIKBKLH+y+scAZDbnDfSUo/1pPgruo gskpg67XrtDP/mZxgf7GB0wlrQrrJt9eBuCD5NXIjtl8KvEIPKTxAlYf/Gu8ZCuu0cwHLl/79WUH 6wT35XByAsBMtuG8dHDidj50/XkpP2L6GE52KYTNoQVv5XoAIzpuwXDxcTML0JjE1EKAfRFeyuui MncX9dgtRdJGMgN/4HYzIiSvWsjYkgVUFrh/ZlENbE6Dhy4NLqDEBQb5RMIWrO7VVaAKosRysY72 G3Z1FmS2m2dPAlNNLGHESlcLp3nwnNFFneQif4Kf1ZdFMZJCy8D6n+TbuZmY8eMC624Ot5h18an0 yBWFE8E/XU4yQR6savhhinY1Yc4EKjcNiP4cTrphh4cE7XgMitX+0yc1D9s7umuiBdqw9VAsyA20 NfLZCMxieiGYcgda1WPA5V7jQc3m8G+CJyg762Tb3XyPGBPy4TDfghpw1RqYf8wYAi8e74wKHck/ uAP6R1lc7wARAQABwsFfBBgBCAAJBQJZiaq/AhsMAAoJEP6CE5RAvSK5Y4AP/Rb0F2lmB6uDu66B hCYX7Z2hcnt4/LZK1hYb6fRO3mnW8XClntYOGbKoAGAQDS3PrIx2EJkUr5FiWMpnneQPcwfNuL7V lSqlcFfwN+kkjTcsIjrw3KMgGNbjjQ83jCUzidyQ4eg18AKKaxb0NrA8UNRTvtK0ozSThxnzLZ20 nu/mU9NJhcMVx2QzIEUiJK5ag3uXli/r52ILle5Wq9LPxjPEsl0oGlqNMGcCZLr20tHXm0XLrSVE enWKL8hjaEudPNdcKMLBWVsp0VIS/di1fsQgwhuJ9C+fwhtqaGsL5DsKDYhrUo1iKi4avX0f8Idz enQSKFsoJf+t+kHIm5/ZdZ8jMN081RznIvz8p8BxWOzbg+BZCCkOIsCxypmU9WgMMJ3hXgRa2OIh QZQ3AnBc/U843uU/7HVRMhd4efzjNw/v1joDd4KEJEHnS/jT/s9jxEyikOtQW9otJBLgZpoEG+9R FCKPu4TV8RB9kZCHOM5lwSwq7CIwwVltF1pMRokm6X7lyclZ4iCEtfZAM6ZuvN/fh1GbIJxft+hI WqDPiG9bPtoXZMArUi1zCaSmFdzba/15+P+B3EyaadYiSjVn9WBhe6syxZ8WYo0ehvJEe42BLGcG RcQl+l2Jt57D3FPDYYJEUkl72sGhhKbrg4YBVfCoWuchD0wXvR9ARXtLK5H4 =1rnn -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature
(application/pgp-signature, 840 B) - not displayed