Designing Solo, a new U2F/FIDO2 Token
conorpp.com
conorpp.com
Imagine signing up to a site or service,all you need to do is allow it to generate a unique public/private key pair on your personal hsm. You would optionally associate a username with the public key,but that's it!
No need to enter name,address,phone,email,etc.., Unless required for the service. You won't even need a password(!!)
Lost the personal hsm? No worries,you wrote down a recovery key on paper and stored it next to your social security card and passport.
Here is my thing, simpler security is better security. I use a yubi everyday and it's nice but I also use TOTP and SMS every day. If I am using a hardware security device,why do I need any other form of authentication?
Why can't that same device be used for TLS client certificate storage for every site I visit,storing SSH private keys,trusted root CA store I can use with any device, message(email,signal,telegram,etc...) Encryption,message non-repudiation(think a twitter post or even this comment being signed by my hsm so I can't say 'the hackers did it'). You can use it for banking,voting,signing important documents online,etc...
You can already see how much work goes into adopting something like a yubikey. Why not make it a general purpose hsm that solves all these security problems.
You know what I like about this the most? Minimal user education required,just plug it in,click yes on the app's prompt and press the button on the hsm. Not only that,you can't phish or some other way social engineer the user to give up the private key. Users can keep it on their keychain or building access badge that would give physical attackers similar level of access(they can unlock your house keys and steal pii or get in the building with your badge and steal your laptop).
A user friendly usbarmory for the lay-person!
A cheap smartphone without radio,screen,large battery with a custom os and a usb connection would be an even cheaper phone. The only things a personal hsm would add might be nfc and hardware rng. I'm surprised yubikey hasn't gotten cheaper even with companies like google using it.
The cost is probably much cheaper, but there is no reason for them to lower prices when there isn't really major (popular) competition.
I think once Google releases their key for general sale, Yubi will be forced to drop prices to compete.
- FIPS compliant RNG and key generation
- Hardware based key protection
- Secure (encrypted) on chip key (ECC, AES, SHA HMAC) and data storage
- Guaranteed Unique 72-bit Serial Number
- Boot validation
But that's not what people on this thread are asking for; they want it to do all the crypto stuff they do normally, with all the keys secured in hardware.
I'm a little out of my depth on this stuff; I've done chipset work but my part of those projects always starts with the C code. Maybe you can accomplish what you want with a cheap crypto IC. I'm really just pushing back on the idea that because you can build a smartphone out of a cheap ARM core, you can also build an HSM out of one.
You can put AES keys in the slots and have the IC perform operations with them.
> and you don't necessarily care if the whole package is secure against DPA, that part is a cheap way to get that.
Go get the NDA datasheet.
> (HSM out of ARM core alone)
We agree here.
Does the data sheet talk about hardware side channel mitigation?
USBArmory is around ~$100,I'm essentially talking about a mass produced user friendly version that cuts 40-60% of the cost due to mass production and slightly less extravagant hardware.
https://krypt.co https://krypt.co/developers
It acts as a U2F token, but can also hold a private key for SSH authentication and/or git commit signing. On iOS, it can use the secure enclave.
Think of the hsm as just another key on your keychain. It has no ui other than a button,does not need charging and will remain in your pocket until needed. You don't want someone grabbing it off your hand while texting or making a call,that would mean they can access all your accounts.
http://www.hexview.com/~scl/neo/
https://www.avnet.com/shop/apac/products/nxp/a7005cghn1-t1ag...
So, in the foreseeable future on the web, the devices are useful just for authentication.
I’m not sure if the restriction to authentication has substantially simplified the WebAuthn API. The restriction is caused by a speed optimization, not design simplification. If the actual payload was sent to the authenticator, rather than just its hash due to bandwidth limitations, then it seems like the API could be used for signing messages, not just authentication. I do agree that the user interfaces surrounding the APIs will be simpler due to the focus on authentication.
Hardware breaks.
Hardware is easily stolen.
Hardware-to-hardware interfaces require compatibility. You will probably respond, "but USB". To which I will say, "but BLE. but NFC. but data-over-audio ala square".
No security is perfect. When a hardware flaw is discovered, or comms technology changes, you have to buy new hardware.
If it does break or is stolen, how will you recover your account? This is not trivial.
If your use case is that you want them to be secure from a wealthy nation-state - well, thats probably a tall order. What you are probably most interested in is that the cleaning person in your hotel can't clone your key. The thing with digital security, though, is that it real hard / impossible to really define intermediate security levels - what is possible for a nation state to do, may be only a research paper or code leak away from everyone else being able to do.
So, I'd really hope that any serious security key would be designed to defend against physical attacks.
To protect from physical attacks you need stronger devices, for example Yubico now has an entire new line of FIPS certified products. Note that the cost is higher than the FIDO2 usb-a only key.
As Conor mentioned in other places, to obtain stronger hardware we'd need to sign NDAs with vendors, and thus we couldn't make our key open source. Personally, I really hope that this first iteration will be a success, so we'll be able to push the industry for even more open hardware, and eventually we'll be able to address threats like the one you reported.
That's not true. First, you won't even be eligible to sign an NDA with a secure chip vendor. Second, this won't limit you from having your application (running on their chip) subject to the NDA.
Things may change when 1fa will be more widely adopted, but for the time being we're going to keep it as simple as the "competition" is, i.e. just a button that you press to log in.
PCB assemblies are pretty impossible to secure in themselves so you have to confine security functions to a small portion of the system and work hard to make sure nothing leaks from there.
My biggest problem is how many things I have to configure to even be able to start to use the key.
There is a reason why Duo got bought for >2Gigabucks. 2FA is a PITA to administer.
On the other hand TOTP is simple to add for .NET apps.
I get that simple U2F key registration is not what's seen in a lot of time in the real world, but most implementations are needlessly complex IMO.
Or just click: https://myaccount.google.com/signinoptions/two-step-verifica...
It takes time. And I have a ton of accounts. I like my U2F key but it is still a pain in the ass.
At work, Okta at least will handle it for us, but personally? It really sucks.
I will let your imagination run wild with what a nefarious person could do if every browser has the ability to detect if you are using a specific type of USB keyboard. I could point you in direction of device fingerprinting to start, but that's the bare minimum of what you expose.
[0]: https://www.yubico.com/product/yubikey-4-series/#yubikey-4-n...
WebAuthN is able to tell you that the web page wants you to put a hardware key in. That should be enough to be able to prompt users who've opted into using such a key elsewhere that they can do so here.
Which account? Where is the account? Who runs that account?
In a 10-person office, I want to be able to hand 3 keys to each person (1 for use, 1 for loss, and 1 just in case the other two somehow foul up), and then have them use those keys for computer login, email login, AWS login, GCP login, NXP/ST/SiLabs support forum login, etc.
And when one of them goes to another company (it happens), I need to be able to shut those keys down without their cooperation.
Until I can do this, 2FA is going to remain the province of big companies and not be very useful.
If it does have to be big enough to be on a lanyard or something, I need it to be flexible, like a short cable dongle. A long skinny USB stick is an accident waiting to happen.
The tomu/yubikey nano are great products for a certain population, and certain use cases. I have a nano, for example, that I use for vpn and for conveniency. I don't use it, for example, for authentication to my personal accounts, because it's always connected to my laptop, and often time I'm not in physical possession.
This is incorrect.
The atec family can derive keys using a static master seed and variable nonce. Such keys are derived internally and kept internally, never leaving the chip.
By storing a single derivation master secret, you can use the hashed u2f appid as the nonce. I would additionally have a 2nd hmac secret to apply to the nonce, and use that as the key derivation nonce rather than the appid directly.
It seems like you could use existing tooling to generate the phrase and then use some existing code/processes to derive the key backing the token's u2f private key?
The problem that we need to solve securely, is that you as a user must be sure you know all devices with that private key, i.e. no one else can trigger a backup without you knowing that, even with a temporary access to the key.
Isn't what you're discussing (prevent unknown backups) more a function of how the private key is held in the Solo itself (and in my example, how securely your seed phrase is stored)? Or is there an element of U2F that I'm missing here? (Does the token itself have an identity that you want to be unique while still preserving the same key for authentication, or is there some other detail I'm missing?)
You can, for example, set up a pin or passphrase, however the fido2 protocol doesn't (necessarily) work like that. You buy a key, and you just start using it. There are multiple options to implement a backup protocol, but no standard one to the best of my knowledge. My original point was just that in designing such a protocol, it's important to consider this "unknown backup attack".
I'm not perfectly fluent in the U2F/WA protocol but shouldn't it be possible to have two devices but one is programmed to only accept registration and not allow normal operation?
That way you could put the fully functional one into a bank deposit and use the other to register that key...
This would be a really good stop gap until the industry has transitioned everyone over to usb-c.
Open/hackable firmware? Price?
Some short term advantages of Solo: open firmware that can be verified by the community. Somehow a reference implementation maybe. Prices will be slightly lower, yes, but not a massive advantage imo. I also hope we can build an open documentation system, to make it easier for people to start using fido2 devices.
Long term dreams.
1) Open hardware will allow for experimentation. I'm personally hacking security keys into jewels, and I hope that people will take Solo design, alter it, and embed security keys into other objects and shapes. Keys are getting obsolete.
2) Pushing the industry. Again Yubico is not the "closed one" here. Security coprocessors/chips are. Hopefully, by having more and more open hardware, there'll be a market for even more open chips.
Imagine you have a malware on your PC; it can send another transaction than the one you see in the browser, while the URL would still match. Having transaction summary on the token would be the last verification point where can still spot something is wrong.
https://www.ledger.com/products/ledger-nano-s
It's $100, which is probably too much for your average user, but cheap enough that it's got to be feasible for a U2F kind of thing in a few years.
I guess even the addition of the screen, though, kind of necessitates using a cord so you can see that screen, which makes it less clean than my Yubikey Nano (which is far less obtrusive). But I think we're getting closer.
Otherwise, this looks great, I'll definitely sign up for the newsletter later on...
the problem with the mechanical button is that it will torque the usb port. this is more of a problem with your design, where the usb contacts are just contact area on the pcb, as opposed to a fully enclosed usb-a "connector".
admittedly, a small problem, but since cap touch would have been easy, it seems a problem that would have been worth tackling maybe?