How to get Feitian MultiPass FIDO U2F working with OnePlus 3T? Feitian MultiPass FIDO has 3 ways to work as a hardware token: BLE, NFC and USB. I'd like to use it either with NFC or BLE because the USB input can be occupied, and I have a feeling anyway that the USB usage would require some udev rule modifications (https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules) just like it did with my other token for my Linux desktop.


NFC: simply didn't work. I held the key to the back of the phone, moving it around a little (not sure where is the NFC sensor exactly). Since I read somewhere that the NFC is very weak in the key (which can be an advantage for security because an attacker would have a harder time to pick the signal up from distance), I even stripped my phone of it's thin OnePlus carbon protective cover, but didn't help either.
BLE: I press the button long and the BLE pairing icon starts to blink on the key. The Google U2F BLE setup page shows the device. Here you'd click on the device and you'd need to enter the 6 digits on it. When I select the device from the list though, the app errors out with the very descriptive "Something went wrong" error message. (That's what the Linux desktop Chrome did as well, extremely descriptive error message for sure).


So how can I get this to work? Here is some logcat: https://pastebin.com/X6HLK7a0

Two errors I see:


Not sure how related it is:

E WCNSS_FILTER: do_ioctl,tty_clock_flag=USERIAL_OP_CLK_OFF,clock=USERIAL_OP_CLK_ON
Related for sure:

E BluetoothEventManager: Got bonding state changed for 78:8C:EB:56:23:F1, but we have no record of that device.

D StatusBarManagerService: manageDisableList userId=0 what=0x0 pkg=Window{3d9a72b u0 Something went wrong} token=android.os.Binder@20e9287 which=1

E BluetoothEventManager: Got bonding state changed for 78:8C:EB:56:23:F1, but we have no record of that device.


The debug entry wedged in between the two errors might be accidental. I don't see it always. Any help is appreciated, I'd like to transition to hardware tokens to be protected against SIM hijacks.

One more thing: my OxygenOS is rooted because I had to use a hack to be able to run DayDream apps. Because of that I cannot use Google Pay. I hope rooting is not the reason why I cannot pair the key.
The "Something went wrong" error message was an indirect result of the fact that the device was rooted (+ I have custom bootloader (TWRP), although I'm using stock ROM). I also couldn't use Android Pay in the past because of the rooting although I tried SU Hide techniques for SuperSU. Tonight I reflashed and this time I used the latest beta 14.3 Magisk, which has auto hide feature. 

This Magisk could successfully cloak the custom boot loader and the rooting from SafetyNet, which framework+API is used by Android Pay to see if the device is stock. I assume that the U2F key addition uses the same library as well, because now I could get the BLE part working. NFC is still no bueno. Also, after many tries it become clear that I had to add the MultiPass key first on my desktop using a Chrome browser, and only after that I could complete the rest of the procedure (BLE pairing, ...) on the phone.

The workflow on the phone is weird, because at some point the Bluetooth pairing view got into the background abruptly. I thought something failed again and kept retrying, until I realized that the view is there in the background.

Overall it wasn't an easy ride, but now I removed the phones from my 2FA configuration, and I only have the security keys and the Google authenticator app. You cannot remove that latter one, it's needed for 2FA.

I assume other devices than OnePlus 3T would experience the same thing: if you don't hide the custom bootloader and rooting adequately, software which query SafetyNet will be trippin'.