|
2 | 2 |
|
3 | 3 | ## Overview |
4 | 4 |
|
5 | | -This repository contains sources for a FIDO2 CTAP2.1 compatible(-ish) |
6 | | -applet targeting the Javacard Classic system, version 3.0.4. In a |
| 5 | +This repository contains sources for a feature complete, FIDO2 CTAP2.1 |
| 6 | +compatible applet targeting the Javacard Classic system, version 3.0.4. In a |
7 | 7 | nutshell, this lets you take a smartcard, install an app onto it, |
8 | 8 | and have it work as a FIDO2 authenticator device with a variety of |
9 | 9 | features. You can generate and use OpenSSH `ecdsa-sk` type keys, including |
10 | 10 | ones you carry with you on the key (`-O resident`). You can securely unlock |
11 | 11 | a LUKS encrypted disk with `systemd-cryptenroll`. You can log in to a Linux |
12 | 12 | system locally with [pam-u2f](https://github.com/Yubico/pam-u2f). |
13 | 13 |
|
14 | | -In order to run this, you will need |
| 14 | +100% of the FIDO2 CTAP2.1 spec is covered, with the exception of features |
| 15 | +that aren't physically on an ordinary smartcard, such as biometrics or |
| 16 | +other on-board user verification. The implementation is not 100% standards |
| 17 | +compliant, but you can expect very good results generally. |
| 18 | + |
| 19 | +In order to run this outside a simulator, you will need |
15 | 20 | [a compatible smartcard](docs/requirements.md). Some smartcards which |
16 | 21 | describe themselves as running Javacard 3.0.1 also work - see the |
17 | 22 | detailed requirements. |
@@ -55,38 +60,37 @@ I suggest [reading the FAQ](docs/FAQ.md) and perhaps [the security model](docs/s |
55 | 60 |
|
56 | 61 | ## Implementation Status |
57 | 62 |
|
58 | | -| Feature | Status | |
59 | | -|-------------------------------------------|---------------------------------------------------------| |
60 | | -| CTAP1/U2F | Implemented (see [install guide](docs/certs.md)) | |
61 | | -| CTAP2.0 core | Implemented | |
62 | | -| CTAP2.1 core | Implemented | |
63 | | -| Resident keys | Implemented, default 50 slots | |
64 | | -| User Presence | User always considered present: not standards compliant | |
65 | | -| ECDSA (SecP256r1) | Implemented | |
66 | | -| Self attestation | Implemented | |
67 | | -| Basic attestation with ECDSA certs | Implemented (see [install guide](docs/certs.md)) | |
68 | | -| Other crypto, like ed25519 | Not implemented | |
69 | | -| CTAP2.0 hmac-secret extension | Implemented | |
70 | | -| CTAP2.1 hmac-secret extension | Implemented | |
71 | | -| CTAP2.1 alwaysUv option | Implemented | |
72 | | -| CTAP2.1 credProtect option | Implemented | |
73 | | -| CTAP2.1 PIN Protocol 1 | Implemented | |
74 | | -| CTAP2.1 PIN Protocol 2 | Implemented | |
75 | | -| CTAP2.1 credential management | Implemented | |
76 | | -| CTAP2.1 enterprise attestation | Implemented but always rejected | |
77 | | -| CTAP2.1 authenticator config | Implemented | |
78 | | -| CTAP2.1 minPinLength extension | Implemented, zero RPID storage capacity | |
79 | | -| CTAP2.1 credBlob extension | Implemented, discoverable creds only | |
80 | | -| CTAP2.1 authenticatorLargeBlobs extension | Not implemented | |
81 | | -| CTAP2.1 largeBlobKey extension | Not implemented | |
82 | | -| CTAP2.1 bio-stuff | Not implemented (doesn't make sense in this context?) | |
83 | | -| APDU chaining | Supported | |
84 | | -| Extended APDUs | Supported | |
85 | | -| Performance | Adequate (sub-3-second common operations) | |
86 | | -| Resource consumption | Reasonably optimized for avoiding flash wear | |
87 | | -| Bugs | Yes | |
88 | | -| Code quality | No | |
89 | | -| Security | Theoretical, but see "bugs" row above | |
| 63 | +| Feature | Status | |
| 64 | +|------------------------------------|---------------------------------------------------------| |
| 65 | +| CTAP1/U2F | Implemented (see [install guide](docs/certs.md)) | |
| 66 | +| CTAP2.0 core | Implemented | |
| 67 | +| CTAP2.1 core | Implemented | |
| 68 | +| Resident keys | Implemented, default 50 slots (max 255) | |
| 69 | +| User Presence | User always considered present: not standards compliant | |
| 70 | +| ECDSA (SecP256r1) | Implemented | |
| 71 | +| Self attestation | Implemented | |
| 72 | +| Basic attestation with ECDSA certs | Implemented (see [install guide](docs/certs.md)) | |
| 73 | +| Other crypto, like ed25519 | Not implemented - availability depends on hardware | |
| 74 | +| CTAP2.1 hmac-secret extension | Implemented | |
| 75 | +| CTAP2.1 alwaysUv option | Implemented | |
| 76 | +| CTAP2.1 credProtect option | Implemented | |
| 77 | +| CTAP2.1 PIN Protocol 1 | Implemented | |
| 78 | +| CTAP2.1 PIN Protocol 2 | Implemented | |
| 79 | +| CTAP2.1 credential management | Implemented | |
| 80 | +| CTAP2.1 enterprise attestation | Implemented but never provided to RPs | |
| 81 | +| CTAP2.1 authenticator config | Implemented | |
| 82 | +| CTAP2.1 minPinLength extension | Implemented, zero RPID storage capacity | |
| 83 | +| CTAP2.1 credBlob extension | Implemented, discoverable creds only | |
| 84 | +| CTAP2.1 largeBlobKey extension | Implemented | |
| 85 | +| CTAP2.1 authenticatorLargeBlobs | Implemented, default 1024 bytes storage (max 4k) | |
| 86 | +| CTAP2.1 bio-stuff | Not implemented (doesn't make sense in this context?) | |
| 87 | +| APDU chaining | Supported | |
| 88 | +| Extended APDUs | Supported | |
| 89 | +| Performance | Adequate (sub-3-second common operations) | |
| 90 | +| Resource consumption | Reasonably optimized for avoiding flash wear | |
| 91 | +| Bugs | Yes | |
| 92 | +| Code quality | No | |
| 93 | +| Security | Theoretical, but see "bugs" row above | |
90 | 94 |
|
91 | 95 | ## Software Compatibility |
92 | 96 |
|
@@ -125,8 +129,11 @@ There are two compatibility issues in the table above: |
125 | 129 | hardwired to use only "passkeys". If a site explicitly requests a non-discoverable credential, |
126 | 130 | you will be prompted to use an NFC security key, but this is only CTAP1 and not CTAP2. There's |
127 | 131 | nothing fundamentally preventing this from working on Android but the current state of Chrome |
128 | | - and Fennec are that CTAP2 doesn't, because both use the broken Play Services library. |
| 132 | + and Fennec are that CTAP2 doesn't, because both use the broken Play Services library. It's also |
| 133 | + worth noting that if you install an untrusted attestation certificate, some implementations will |
| 134 | + reject your created U2F/CTAP1 credentials. |
129 | 135 | 1. Some browsers support FIDO2 in theory but only allow USB security keys - this implementation |
130 | 136 | is for PC/SC, and doesn't implement USB HID, so it will only work with FIDO2 |
131 | 137 | implementations that can handle e.g. NFC tokens instead of being restricted to USB. This prevents, |
132 | | - for example, Firefox on Linux from using FIDO2Applet. |
| 138 | + for example, Firefox on Linux from using FIDO2Applet. Phyiscally USB-connected smartcards are |
| 139 | + still PC/SC devices, not HID ones! |
0 commit comments