Yubico Forum https://forum.yubico.com/ |
|
[SOLVED] ykchalresp: Can not get the same response in python https://forum.yubico.com/viewtopic.php?f=30&t=1425 |
Page 1 of 1 |
Author: | corny [ Sat Jul 12, 2014 8:44 pm ] |
Post subject: | [SOLVED] ykchalresp: Can not get the same response in python |
Hi, I am playing around with the yubikey in challenge response and try to reproduce it in python. I initialize the yubikey like this: Code: # ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible Firmware version 2.2.3 Touch level 1795 Program sequence 3 Passphrase to create AES key: lsjdkflksdjf Configuration data to be written to key configuration 2: fixed: m: uid: n/a/ key: h:a60f076ca60e6d966f3bdcdc96f5e94c3c8efc32 acc_code: h:000000000000 OATH IMF: h:0 ticket_flags: CHAL_RESP config_flags: CHAL_HMAC|HMAC_LT64 extended_flags: SERIAL_API_VISIBLE I take it, that a60f076ca60e6d966f3bdcdc96f5e94c3c8efc32 is the stored hmac key. Now I run: Code: ykchalresp -2 -x 57642f9efa71d159181c0f3bbc93a84ccb8d378782e09eae21695395b441f5a22a3f35d46ee596fbab39e38d3fc0c4841780996fd272845af4d92cc31bf5134a cef9198f3a2d9a378289096da646b7c165090d60 Simuliation this in python I get another response: Code: import hmac import binascii import hashlib key = "a60f076ca60e6d966f3bdcdc96f5e94c3c8efc32" chal = "57642f9efa71d159181c0f3bbc93a84ccb8d378782e09eae21695395b441f5a22a3f35d46ee596fbab39e38d3fc0c4841780996fd272845af4d92cc31bf5134a" hmac.new(binascii.unhexlify(key), binascii.unhexlify(chal), hashlib.sha1).hexdigest() 'd8352dc4a5ce33639801fb2e2fa87444dbcae55e' What am I missing here? Thanks a lot and kind regards Cornelius |
Author: | corny [ Sun Jul 13, 2014 7:33 am ] |
Post subject: | [SOLVED] Re: ykchalresp: Can not get the same response in py |
So tell me! Why does 32byte challenges work although the yubikey claims to process 64 byte challenges? Code: cornelius@puckel ~/src/python-yubico/examples (git)-[master] % python Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import hmac >>> import binascii >>> import hashlib >>> import os >>> key = "a60f076ca60e6d966f3bdcdc96f5e94c3c8efc32" >>> chal = os.urandom(32) >>> print binascii.hexlify(chal) d1835d598bc20c4ce8312ba94f046a015f7a70c48631b88f29922f1183e77873 >>> hmac.new(binascii.unhexlify(key), chal, hashlib.sha1).hexdigest() 'c7f7a081d06a738f913dce36b538091adc6d2e93' >>> quit() cornelius@puckel ~/src/python-yubico/examples (git)-[master] % ykchalresp -2 -x d1835d598bc20c4ce8312ba94f046a015f7a70c48631b88f29922f1183e77873 c7f7a081d06a738f913dce36b538091adc6d2e93 So I need to be content with 32 bytes. Kind regards Cornelius |
Author: | Tom [ Mon Jul 14, 2014 9:01 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -a 303132333435363738393a3b3c3d3e3f40414243 HMAC-SHA1 challenge-response This method allows a challenge of up to 64 bytes (512 bits) to be hashed using the HMAC-SHA1 algorithm with a 20-byte (160 bits) secret |
Author: | corny [ Mon Jul 14, 2014 9:54 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
Hi Tom, yes, I read this, but when I use 64bytes, it does not work - while it works fine with 32bytes. I am willing to provide you any additional information! Kind regards Cornelius |
Author: | Tom [ Mon Jul 14, 2014 10:41 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
can you use KATs (Known Answer Tests) NIST PUB 198 A.2 test vectors? http://opensource.yubico.com/yubikey-pe ... esp.1.html |
Author: | corny [ Mon Jul 14, 2014 11:21 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
Hi Tom, this test runs perfectly. But this challenge is <=32bytes. And as soon as I use a challenge >32btes <=64bytes the python code does not produces the same result as the ykchalresp! Kind regards Cornelius |
Author: | Tom [ Fri Jul 18, 2014 7:23 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
use ykchalresp.exe -1 -H -x program the yubikey with the GUI Could you use our Python code https://github.com/Yubico/python-yubico ... e_response also, what version is your Yubikey firmware? |
Author: | corny [ Fri Jul 18, 2014 9:40 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
Hi Tom, (Read to the end, before clicking links - I have the error (my error) narrowed down) I am running this python code to initialize the yubikey: https://github.com/privacyidea/privacyi ... yubikey.py roughlty it does this in MODE_OATH and challenge_response==True: Code: Cfg = YK.init_config() key = binascii.hexlify(os.urandom(20)) Cfg.mode_challenge_response('h:' + key, type="HMAC") Cfg.ticket_flag('APPEND_CR', False) Cfg.extended_flag('SERIAL_API_VISIBLE', True) YK.write_config(Cfg, slot=slot) which pretty much looks the same to me like this https://github.com/Yubico/python-yubico ... t_test_key: Code: Cfg = YK.init_config() key='h:303132333435363738393a3b3c3d3e3f40414243' fg.mode_challenge_response(key, type='HMAC', variable=True) Cfg.extended_flag('SERIAL_API_VISIBLE', True) YK.write_config(Cfg, slot=slot) But still it does not work out for me. The command line tool creates another response, than my python program does... Code: % ykchalresp -2 -H -x 175ff6a6b675906d748b2a2b74dce6dc2f065685f4a69caa7f65e2167015745f4162f1b508d1eef7f5b319cf4bf3f435daca4e387152005e253e4694e9091781 2008b987214e073127006e4166ef189242dbf035 OK, using my initialized key with some very basic python code: Code: cornelius@puckel ~/src/privacyideaadm (git)-[master] % python Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import yubico >>> import sys >>> YK=yubico.find_yubikey() >>> chal_hex="175ff6a6b675906d748b2a2b74dce6dc2f065685f4a69caa7f65e2167015745f4162f1b508d1eef7f5b319cf4bf3f435daca4e387152005e253e4694e9091781" >>> import binascii >>> chal = binascii.unhexlify(chal_hex) >>> YK.challenge_response(chal, slot=2) " \x08\xb9\x87!N\x071'\x00nAf\xef\x18\x92B\xdb\xf05" >>> binascii.hexlify(YK.challenge_response(chal, slot=2)) '2008b987214e073127006e4166ef189242dbf035' >>> Well! This looks fine and produces the same response! So now I know the following: 1. My initialization is working fine. 2. My Yubikey is working fine 3. My response verification code has a problem with challenges larger than 32 bytes.... Thanks for you patience and help. I will look into this. Kind regards Cornelius |
Author: | corny [ Fri Jul 18, 2014 10:01 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
Hm, I did some more digging: The Yubikey calculates an HMAC SHA1 with the challenge. So this is roughly my verification code: Code: >>> hexkey="7b6b585de517c96560f5bd0db211ea58ba1500ca" >>> import binascii >>> import hashlib >>> import hmac >>> chal_hex="175ff6a6b675906d748b2a2b74dce6dc2f065685f4a69caa7f65e2167015745f4162f1b508d1eef7f5b319cf4bf3f435daca4e387152005e253e4694e9091781" >>> binascii.hexlify(hmac.new(binascii.unhexlify(hexkey), binascii.unhexlify(chal_hex), hashlib.sha1).digest()) 'b8a53bf4d40db429029e89bfc5cd6057645b3ea6' Indeed the 64 byte response of the python hmac libraray does not match the 64 byte response of the Yubikey. The python HMAC lib and the Yubikey itself get the same responses for 32 byte, but not for 64 byte. Thats bad, but at least I know the reason for this... I tested this on Ubuntu 14.04LTS, with python 2.7.6. Kind regards Cornelius |
Author: | Klas [ Mon Jul 28, 2014 7:48 am ] |
Post subject: | Re: [SOLVED] ykchalresp: Can not get the same response in py |
Hello, You seem to be using the hmac-lt64 option when programming the YubiKey. When this option is in effect the challenge is limited to 63 bytes, but may be less and any challenge longer than 63 bytes will be truncated to 63. I've verified with a 2.2.3 key and a piece of perl that it behaves correctly with challenges up to 63 bytes. There might be bugs in the yubico-python code, so it'd be good if you could verify with both that and the ykchalresp utility. /klas |
Page 1 of 1 | All times are UTC + 1 hour |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |