Can't create Google passkey in pico_fido_pico-5.12.uf2 & pico_fido_pico-6.0.uf2 #72
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hello,
And first i would like to thank you for this awesome project
I noticed an error/bug (or my fault?) which doesn't allow me to create a google passkey in version 5.12 and 6.0 (not nightly) but in 5.8 it is working
I tested it on waterfox and chrome on my windows 10 pc
OS Name: Microsoft Windows 10 HomeOS Version: 10.0.19045 N/A Build 19045
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
After clicking "create passkey" and entering my security pin

I was stuck for some minutes at this step
Before i finally get the message "Couldn't complete singup" or something similar
(I couldn't catch a screenshot because it's so fast gone)
I hope this information is in someway helpful and wish you a nice evening/morning/day (where ever you are)
(this is my first time writing an issue so i hope it's at least somewhat usable)
Does it work with webauthn.io ?
Yes i did test it on the 6.0, 5.12 & 5.8 with webauthn.io or https://www.token2.com/tools/fido2-demo and it always worked flawless
I've tried right now with Chrome in macOS and worked. Perhaps is the middle layer that Windows use.
Can you try with macOS or Linux?
This is a little embarrassing but it seems i can't use on a freshly new installed ubuntu desktop (on my laptop).
First i tried without installing anything but then after some research installed these
pscscd pscsc-tools sssd libpam-sss opensc-pkcs11
And i still can't use it (even after repeatedly reflashing with 6.0 and 5.8 version)
I tried it on firefox and chromium before digging deeper and i found out that
in most cases the pico doesn't even get detected
at least not with pcsc_scan and the browsers
Only from pamu2fcg did i get some success which is another error message
$ pamu2fcfgNo U2F device available, please insert one now, you have 6 seconds
Device found!
Enter PIN for /dev/hidraw0:
error: fido_dev_make_cred (39) FIDO_ERR_OPERATION_DENIED
Or in case i press the button after entering the key without waiting for any message
$ pamu2fcfgEnter PIN for /dev/hidraw0:
error: fido_cred_verify (-7) FIDO_ERR_INVALID_ARGUMENT
In case i forgot to install a driver or maybe to configure a service let me know?
And on a site note is it normal for the pico to be detected as smartcard/keyboard by windows?


(version 6.0)
I thought it is more like a fido key( yubikey and so ) i noticed it while trying to detect it with libfido2 for 2 hours before seeing that windows calls it a smartcard
For being recognized by OpenSC, you must commission it with known VID & PID. More info at https://www.picokeys.com/pico-commissioner/
Note that using known VID & PID is only necessary for CCID interface and 3rd party tools like Yubikey Manager or similar. FIDO should work with any VID & PID. It has not been tested with PAM.
Pico Fido has FIDO, Keyboard, CCID and WebCCID interfaces, so yes, it is normal.
When I said "try with macOS or Linux" I referred to create Google passkey using Chrome in macOS or Linux.
Thanks for the explanation
And maybe i said it poorly but i meant i can't use the pico-fido at all in firefox/chrome on ubuntu it just doesn't get detected.
I tried first with webauthn.io but and get the message in firefox to press the button, nothing happens if i do and in chromium to insert the key.
So i tried to troubleshoot it with pamu2fcfg.
I don't know if for linux i forgot to install some packages or similar.
Ok now also tested on linux mint with chromium.
with libu2f-udev pcscd installed and that 70-u2f.roles file
Again tested with version 6.0 and 5.8
6.0:
Webauthn.io works fine but in chrome but for the google passkey i don't get past the "Press the button on your key" part
It just doesn't react to the button press
similar to the windows case.
5.8:
It works with google just fine
But do you press the BOOT button to confirm? Not the reset one.
Yes the button with the text "BOOTSEL" above it also the only button onboard

Are you using Pico board? The same as the pic.
Exactly, it is the same.
Seems a problem of timeout.
In webauthn.io (and probably others) the process is this:
Can you confirm you press BOOTsel button twice in less than 10 seconds after click on Register/Authenticate and PIN input?
Strange,
I tested it on windows 11 and it worked just fine
But on windows 10 it's getting stuck after entering the pin
So i don't even get to the "waiting for button" state.
This is what i do.
Expected happenings




Here it's stuck for a minute or two

And error messages following


Same issue


But do you press twice the button? One after click on "Register" and one after introducing the PIN.
After entering the PIN for the security key, the system will get stuck in
getting things readyfor a while and report an error:Could't complete sign-in. Try again and ensure you do the follow-up action.Prior to this, I had already used Pico Commissioner to set VENDOR to Yubikey 4/5. During this process, the system did not require me to press a buttonI tested if i can login in google after creating the key on windows 11.
And it worked.
But if i try to create the key it fails.
Also it (creating the key) doesn't work in linux mint with firefox or chromium
Update:
I tested it today it on a PICO 2 with the firmware 6.0
On Windows 10:
Firefox and Chrome (same responses):
For webauthn.io i get stuck at the same
"getting things ready"errorbut for fido2-demo it's working
google doesn't even find it, error message
"Are you there? Use your security key to sign in.Edit:
After using the comission tool with "Nitrokey Fido2" it suddenly worked for webauthn.io
So i tried to replicate it and after flashing nuke.uf2 and doing it again it didn't work.
Also i want to note the pico2 often crashes ( i think it crashes because the led stops)
Linux Mint:
Chrome can create a key but only on webauthn.io but nothing else
Registered key can be used to login on any OS or browser.
Firefox doesn't work at all, like windows firefox
Hello,
It's been a while today i gathered some useful troubleshooting infos from the windows even viewer
Here are the logs as txt, xml and windows event viewer format pico_fido.zip
Also i used chrome to gather additional data

I hope these are use full
Anyway even after flashing the file onto the pico and afterwards using the commission tool to set the timeout to 0
In linux it works with webauthn.io but google still has the problem where it loads without any end in sight.
Led is still blinking.
In windows 10 it sometimes works on webauthn.io? but only once then i could not replicate it.
It still is the same problem where the pico seems to crash (led not blinking, either stuck at glowing or being not on).
And that "getting things ready" error is ever present.
i added here the chrome logs from windows 10 chrome
chrome://device-log/?refresh=5
Also checked if it's not the pico which may be damaged but with the 5.8 version it's working just fine.
Tested on two windows 10 pc
And a linux mint
PS:
Thanks for taking your time to work this issue
What happens if you run the tests?
pytest testsDone
I should have started with this right?
Anyway here are the logs for 6.0 with and without the comission where the timout is set to 0.
picofido_6.0_night_dev_with_comission.log
picofido_6.0_night_dev_without_comission.log
Enviroment is windows and scripts are run with admin privs.
Otherwise pytest gives me an Access denied error.
Try using the nightly build and disable the Power cycle after reboot option in the Commissioner.
Hi
Sorry for the delay,
It is still not working as intended (as in getting stuck at "Getting things ready" even on webauthn.io)
Here the logs and i wasn't sure which nightly so i did both:
PicoFido_nightly-dev_Commision-PowerCycle_7-12-2024_windows10.log
PicoFido_nightly-stable_Commision-PowerCycle_7-12-2024_windows10.log
Thanks
hey i am facing the same problem
Win10
when using on discord or webauth.io it works
but when trying to use it on binance or google it get stuck in "getting things ready phase"
if anyone have any solution let me know
There seems to be a problem with the handling of the excludelist in the cbor_make_credential function. webauthn.io does not allow multiple keys to be registered. As a result, it works because excludelist is never used. For a quick check, I was able to register a key by deleting the range shown below.
7a59b51849/src/fido/cbor_make_credential.c (L282-L298)https://w3c.github.io/webauthn/#dom-scopedcredentialoptions-excludelist
But this is the expected behavior. If a credential is already created and relayed by the RP, then it fails creating a new one (because it has been already created). It is described here:
https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-errata-20220621.html#op-makecred-step-if-excludeList
I already created passkeys in google without problems.
Sorry for the poor explanation.
I wanted to explain why it works with webauthn.io.
I think the problem may be caused by omission of initialization of the structure.
7a59b51849/src/fido/credential.c (L146-L160)/src/fido/cbor_make_credential.c
I tried to create a new passkey in Google without problems. Here's the flow (it's in catalan but easily recognized):
Two options: "Create a passkey" or "Use a security key". Click on "Use a security key", the good one.

Configure this key to be used by Google. OK or NOK?

Google will get the vendor name and model. Are you sure?

Introduce the PIN

Touch the BOOTSEL button.

And voilà. After touching the key is registered.

You're right @jcodeth . If it is not properly initialized, it might crash on credential_free() afterwards. I'll push a fix.
I think I have the same issue, arch linux using chrome 131. Firefox doesn't work at all, but that looks expected from some of the other issues. Works perfectly fine with github and webauthn.io, but creating a passkey for a google account fails at the same point:

Pretty sure it is properly initialised, through the web commissioner
I found the bug and it is related with the timeout/keepalive procedure. By specified in the FIDO documents, the authenticator must send keepalive commands regularly, to inform the client the command is still being processed. But taking the old U2F specifications, no keepalive was specified. So, it is in the client side the procedure to check the timeout.
Depending on the platform, google may decide to use CTAP2 (FIDO) protocol or CTAP1 (U2F). If it chooses CTAP2 (my above examples), it works normally. But if it chooses CTAP1, then it does not expect any keepalive command, regardless the specification. Once the keepalive is sent, it throws an error about "unknown command" and closes the connection.
I put a fix which mainly sends a keepalive command only if we are in a middle of CTAP2 transaction. Hopefully it will fix all these errors you have. I pushed the fix to
developmentbranch. You can wait for the nightly development build tonight or build yourself.oh thanks for the update this issue i was facing with
Google
Binance
mostly both having same issue hope this fixes binance one too
Awesome! Worked perfectly for me

Thanks for this project!!
@samsell how can i update my pico ? where can i get the new file?
@79812b it's in the releases section, click the nightly development build and look for the pico-fido .uf2 file. Or the link is here if you have the standard pico: https://github.com/polhenarejos/pico-fido/releases/download/nightly-development/pico_fido_pico-6.0.uf2

Hello I was trying this project out on my pico on Firefox and Chromium on Linux and was having this exact issue, so I started to go trough this thread and found this message, tried it out and now it works, I'm now able to use my pico to authenticate for me, I was only able to register the device on Chromium though but that's already been mentioned elsewhere if I'm not mistaken.
Thanks a lot!