[PATCH gnupg] scd: Fix unblock (via a Reset Code) with KDF

Kirill Elagin kirelagin at gmail.com
Mon Apr 26 04:55:23 CEST 2021


* scd/app-openpgp.c (do_change_pin): Fix unblock with KDF
--

When KDF is enabled, instead of sending PIN verbatim we send its salted
hash. User PIN, Admin PIN, and Reset Code all use different salts.
When executing the `unblock` command (that allows the user to reset
their PIN using the Reset Code) we were incorrectly using salt number 0
(the one used for the Reset Code) to hash the User PIN.

Use the correct salt number 1 instead.

This bug was present since the original implementation of KDF back in
91303b7df9c3e810cfcd4920f78bac6f8b7df2b2.
---
 scd/app-openpgp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index 5508ec68e..506b58232 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -3454,7 +3454,7 @@ do_change_pin (app_t app, ctrl_t ctrl,  const char *chvnostr,
 
       rc = pin2hash_if_kdf (app, 0, resetcode, &result1, &resultlen1);
       if (!rc)
-        rc = pin2hash_if_kdf (app, 0, pinvalue, &result2, &resultlen2);
+        rc = pin2hash_if_kdf (app, 1, pinvalue, &result2, &resultlen2);
       if (!rc)
         {
           bufferlen = resultlen1 + resultlen2;
-- 
2.29.3




More information about the Gnupg-devel mailing list