Question: I'm given a choice between two banks's authentication procedures and I need help choosing the most secure and convenient option.

Option "hardware token":
Authentication into the web platform is done via username/password but transactions are performed via a combination of PIN and a onetime hardware token key.

Option "fingerprint":
Authentication into the web platform is also done via username/password but transactions are performed by authenticating into a software token app on the phone via a fingerprint and getting a onetime token key.

My understanding is that the hardware token option is more secure because phones and laptops nowadays can easily be infected with keylogging and other kinds of software to eavesdrop on my passwords. However, the fingerprint authentication is a biometric form of authentication and as far as I know can only be spoofed with a physical fingerprint and not software, thus possibly providing the same level of security.

Another weak point could possibly be the risk of stealing the software token's seed.

What do you think I should choose? Is hardware token still the way to go or is biometric identification a sane alternative in my scenario?

Answer: 
The fingerprint doesn't directly protect the token (it can't - we to date have no reliable way to consistently scan a fingerprint). The OS encrypts the token with your credentials. An API call into the OS allows applications to request the token which forces the user to re-authenticate.

So the risks on the mobile application come down to -

* How much do you trust the operating system on your device?
* (Related to above) How much do you trust the sand-boxing on the device to stop applications reading each others memory space.
* How much do you trust the application not to place the token anywhere accessible to other applications.
* How much do you trust the fingerprinting mechanisms to stop the phone/app being cloned (Personally I would view this as close to zero).

You also need to counteract this against how high is the risk? I.e. were the app mass exploitable would the bank cover losses? And are you a high risk target (for example a billionaire probably has a higher attack risk than average Joe).

For the vast majority of users I would argue the app when paired with a strong unique password should be viewed as secure enough. Were the app to be compromised the bank would likely take the hit and refund clients.

A hardware token in theory should be more secure - its effectively an airgapped system. For a private/public key system the private key never has to leave the device. However there have been historical issues with manufacturers design decisions and implementations.
No option is inherently better than the other.

* phone token is vulnerable to malicious apps on your phone, but it can secure whole process.
* hardware token is pretty invulnerable itself, but the whole chain usually remains unsecured against phishing, MiM attack and malicious apps on your PC/browser.

While the hardware token itself is secure, the problem is that typically it doesn't tell you what kind of operation you're authorizing. It's very easy for an attacker to trick the user into generating OTP for him. That was pretty common attack on hardware-token secured banking few years ago, major hole was requiring OTP for login - it was trivial to exploit by falsely claiming that first attempt was wrong. **IF the software token provides key information about the operation being authorized, this risk is eliminated.**

So the question rather boils down to "what part of the chain is easier to secure?" If you're sure about security of your computer with browser, it's connection to the bank and (most importantly) your vigilance against phishing, then hardware token is better. If you don't install apps from untrusted sources, then the phone is probably easier to secure.

If the mobile token works offline (based on challenge-response codes) and you can dedicate a phone that's permanently offline after activating token app (airgap), it's by far the most secure solution (albeit most cumbersome).

Fingerprint is not the best security-wise. Correctly implemented password or PIN would be more secure. But if the data is stored properly in phone's hardware secure enclave, it's good enough.

Basically, both options can be implemented right or wrong.