FlexSecure Practical Reference

This is my small contribution to the forum. A reference guide/bridge document born out of my exploratory research for use cases regarding the Vivokey Flex family of implants. I hope it’ll be of help to. If you spot anything that needs correcting, let me know but otherwise do with it as you will, feel free to build off of it.

Thanks to @Pilgrimsmaster for the initial review!

PS. The duress applet and behavioural analytics code wont be shared due to opsec.

VivoKey flexSecure — Practical Reference

April 2026 · Not affiliated with Dangerous Things or VivoKey

A working reference for the VivoKey flexSecure NFC implant as a hardware-bound cryptographic anchor. Covers hardware selection, placement, setup sequence, what the chip can do today, and operational failure modes.

> Scope

Covers: hardware specs, applet stack, GPG/SSH/FIDO2 setup, continuous authentication, duress framework, key lifecycle, audit, recovery, and failure modes.

Not covered here: threshold signing, DeFi/on-chain applications, post-quantum migration. A separate technical analysis covers the full design space.

:white_check_mark: Minimum viable configuration

FIDO2 registration and basic GPG key generation are a complete, usable configuration on their own. You do not need to implement continuous authentication, the duress framework, or threshold signing to get significant value from the hardware. Each section is independently usable. Start with what you need and add the rest only when you have a specific reason to.


1. Hardware

1.1 The chip

The VivoKey flexSecure uses an NXP JCOP4 / SmartMX3 P71 secure element, the same chip class as EU biometric passports, banking SIMs, and government identity cards. Common Criteria EAL6+ certified. All cryptographic operations execute on-chip. The private key is never exposed to the NFC interface and cannot be extracted through any command or interface the chip exposes.

Specification Value Note
Chip NXP JCOP4 / SmartMX3 P71 Same class as EU biometric passports
Certification Common Criteria EAL6+ Resistance to extraction under evaluated conditions
EEPROM storage 167,736 bytes Full applet suite with significant headroom
Dimensions 7.5 × 28 × 0.4mm Narrow flex — incision install, not needle punch
NFC frequency 13.56 MHz ISO 14443-A Compatible with any standard PC/SC reader
NFC read range 1–3cm Deliberate positioning required
Power Passive inductive No battery. No signal unless actively queried.
MRI compatibility Compatible Confirm blanket policies with specific facility
Metal detectors Does not trigger No ferromagnetic components
Border crossings No signal unless queried Passive device — invisible without an active reader
Rated lifespan 50+ years EEPROM write cycles are the practical constraint

1.2 Hardware Variants & Installation Methodology

The flexSecure platform is available in three form factors, each with distinct installation requirements and placement considerations. The “Narrow” flex is the most common, but the “Module” and “Spectrum” variants offer different trade-offs in terms of footprint and antenna geometry.

Variant Form Factor Installation Method Critical Notes
Narrow Flex 7.5mm x 28mm (Rectangular) Incision (Scalpel) or Custom Large-Bore Needle (12G+). Standard 5mm biohacking needles are too small for the 28mm length of the Narrow flex. Attempting a needle punch with a standard needle will damage the PCB. Incision is the recommended method for reliability.
Module Larger PCB (Square/Rect) Incision required. The larger footprint makes this variant unsuitable for the wrist or fingers. Best placed in the upper arm or chest where tissue stability is higher and movement stress is lower.
Spectrum Small Oval/Circular Incision required. The newest form factor. Incision is the method to ensure proper orientation and long-term stability. EEPROM capacity is more limited compared to the Narrow flex.

Placement Rationale:
Placement is highly subjective and dependent on individual anatomy, lifestyle, and the specific installer’s technique.

  • Stability: Avoid areas with high tendon movement (e.g., directly over the wrist joint or finger knuckles) to prevent long-term mechanical stress on the PCB and solder joints.
  • Geometry: The antenna alignment must match the reader. For the Narrow flex, a transverse orientation (long axis across the wrist) generally offers better coupling with standard phone antennas than a longitudinal orientation.
  • Consultation: Always consult a professional installer experienced specifically with flex implants. Experience with subdermal implants generally is not sufficient, as the insertion mechanics differ significantly.

1.3 Applet stack

The flexSecure ships with a standard applet suite and supports installation of any Java Card applet via GlobalPlatformPro using the admin key you hold. No Fidesmo dependency. No marketplace.

Applet Capability Notes
OpenPGP card 3.4 Ed25519/X25519 on-chip. Sign, decrypt, authenticate, certify. Private key never exportable.
FIDO2 / U2F Phishing-resistant hardware security key. Origin cryptographically bound. Works with any WebAuthn service.
HMAC-SHA1 Challenge-response. YubiKey-compatible. Used for Vaultwarden hardware unlock.
TOTP / OTP Hardware-stored seed. Cannot be extracted. Use where software TOTP seed exposure is unacceptable.
BIP32 wallet HD wallet seed and signing on-chip. Best for cold storage.
NDEF / NFC Sharing Broadcasts URL without authentication. Any NFC phone. Emergency info.
DuressApplet Multi-context identity: primary/decoy/burn. PIN-gated. Custom applet — not part of the standard DT suite. Not publicly distributed. See Section 5.
Custom Java Card Any Java Card 3.1 applet via GPP. Physical access control, key shares, custom protocols.

1.4 flexSecure vs Apex Flex

Factor flexSecure Apex Flex
Admin key You hold it Managed by Fidesmo
Third-party dependency None Fidesmo required
EEPROM 167,736 bytes 83,872 bytes
Custom applets Any Java Card applet via GPP Fidesmo marketplace only
Bricking risk Real — wrong master key attempts = permanent brick Low
Sovereign fit You control all key material Managed service in your body

A managed dependency in software is one risk profile. A managed dependency implanted in your body, where the exit option is a second surgical procedure, is a different one entirely.

1.5 Test card requirement

:warning: Order the J3R180 before ordering the implant

The J3R180 is the same NXP P71 chip in a contact card form factor (~€20). Order from Dangerous Things

Run the entire GPP setup workflow on it at least twice before the implant procedure. Master key rotation is irreversible. Too many wrong attempts permanently bricks the chip. No recovery path.

1.6 Reader

The ACR1252U is the recommended desktop reader. Preferred over the ACR122U, which conflicts with Linux kernel NFC modules, requiring manual blacklisting. Available from Dangerous Things. Stays on the desk permanently.


2. Placement

It’s wholly up to the Practitioner to decide install location, however there are recommended places pending on the size and shape of the implant, this is my own personal position. Right wrist, dorsal surface, outer (ulnar) edge, transverse orientation, above the watch line.

Transverse orientation places the long axis across the wrist, within the stable tissue zone between tendons. Longitudinal placement crosses multiple tendon channels as they diverge toward the forearm, creating long-term mechanical stress on the PCB.

Zone Recommendation Reason
Right wrist, dorsal, outer ulnar edge, transverse, above watch line Correct Stable tissue. Off central tendons. Good NFC geometry.
Mid-forearm above wrist zone Avoid Two muscle groups diverge here — PCB stress.
Over central extensor tendons Avoid High movement during wrist flexion/extension.
Longitudinal orientation Avoid Bridges tendon channels. Mechanical stress over time.
Wrist crease and below Avoid High nerve/tendon density.

> Installer requirement

Flex implant experience is mandatory. Incision technique, not needle punch. The Dangerous Things forum maintains an installer map with verified flex practitioners.

Brief the installer explicitly: outer ulnar edge, above watch line, transverse orientation.


3. What Can It Do For You Today

All entries below are deployable with existing hardware and applets. Entries marked “Reference implementation” use code produced alongside architecture work and is not publicly distributed.

Capability What it means in practice Status
Hardware-bound SSH Every SSH connection requires the chip within 1–3cm. Compromised host cannot authenticate — key never touches disk. Ready now
Phishing-resistant FIDO2 WebAuthn assertion includes origin domain cryptographically. Fake login page cannot replay a valid assertion. Ready now
Hardware-locked credential store Vaultwarden unlock requires master password AND chip. Neither alone is sufficient. Ready now
GPG signing and encryption Email, document, git commit signing on-chip. Private key never leaves the secure element. eIDAS-compliant. Ready now
Emergency medical info NDEF broadcasts URL to any NFC phone without authentication or app. Ready now
Physical access control P71 can emulate NFC card profiles via custom applets. Smart locks and Home Assistant. Ready now — custom applet required
Hardware TOTP Seed on-chip, cannot be extracted. Worth using where software TOTP seed exposure is unacceptable. Ready now
Continuous session auth Daemon issues periodic challenges. Chip absent = screen locks, SSH terminates. Reference implementation — restricted
Coercion-aware authentication Secondary PIN activates decoy identity — valid, plausible, low-value. Forced auth discloses decoy only. Applet restricted — see Section 5
Behavioural anomaly detection Daemon monitors typing and activity patterns. Deviation triggers session degradation independently. Reference implementation — restricted
Hardware-attested signing Key ceremonies and legal documents create auditable chain of custody tied to a non-extractable device. Ready now
Threshold signing (M-of-N) Implant holds one non-extractable share. Remote compromise of all other shares is insufficient. Ready now — requires FROST
Cryptocurrency cold storage BIP32 seed and signing on-chip. Seed never leaves the secure element. Ready now

4. Setup Sequence

4.1 Prerequisites

# System packages
sudo apt install openjdk-17-jre pcscd pcsc-tools opensc openssl python3-pip
pip install pyscard

# GlobalPlatformPro — download gp.jar from official releases, verify SHA256
# github.com/martinpaljak/GlobalPlatformPro/releases

pcsc_scan   # Verify reader is detected and chip recognised

:warning: Operations below this point are irreversible

Sections 4.2 onwards cover GlobalPlatformPro administration, applet installation, and chip configuration. These operations can permanently brick the chip if done incorrectly. Run every step on the J3R180 test card before touching the implant. If you are only here for FIDO2 or basic GPG, you can stop at Section 4.1.

4.2 GlobalPlatformPro — run on J3R180 first

:warning: Irreversible at step 3

Step 3 permanently changes the admin key. Store the new key in your password manager before executing.

# Step 1 — verify connection (safe, no auth required)
java -jar gp.jar --info
# Expected: ISD AID A000000151000000  status OP_READY

# Step 2 — generate new admin key and store it NOW
NEW_KEY=$(openssl rand -hex 16)

# Step 3 — rotate from factory default (publicly known)
java -jar gp.jar --key 404142434445464748494A4B4C4D4E4F \
  --unlock --new-key $NEW_KEY

# Step 4 — verify new key works
java -jar gp.jar --key $NEW_KEY --list

# Step 5 — install OpenPGP applet (verify SHA256 of CAP file first)
java -jar gp.jar --key $NEW_KEY \
  --install SmartPGPApplet-default.cap \
  --create D276000124010304C0FE000000010000

# Step 6 — clear key from environment
unset NEW_KEY && history -c

4.3 GPG key hierarchy

The master key lives on-chip and certifies subkeys only. If a subkey is compromised, revoke it without touching the master.

Master key (Ed25519)  —  CERTIFY ONLY  —  stored on flexSecure
    |
    +-- Signing subkey    (Ed25519)  —  email, git commits, documents
    +-- Encryption subkey (X25519)   —  decrypt inbound mail, files
    +-- Auth subkey       (Ed25519)  —  SSH authentication

Subkeys: 12–24 month expiry.  Master key: no expiry required.
gpg --card-edit
  admin    # enable admin commands
  passwd   # user PIN: 123456 -> yours  |  admin PIN: 12345678 -> yours
  generate # generate Ed25519/X25519 keys ON-CHIP — never touches disk
  quit

echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
ssh-add -L   # verify: pubkey with comment cardno:XXXXXXXX

# Git commit signing
git config --global gpg.format ssh
git config --global user.signingkey "$(ssh-add -L | head -1)"
git config --global commit.gpgsign true

gpg --keyserver keys.openpgp.org --send-keys YOUR_KEY_ID

4.4 FIDO2 registration order

Priority Account type Rationale
1 Email provider Controls password reset for all other accounts
2 DNS provider Controls domain — cascades to all services
3 Infrastructure consoles Lateral movement to production systems
4 Identity provider Cascades to all services behind it
5 Code repositories Supply chain attack surface
6 All other services Register backup FIDO2 key as secondary on each

> Register a backup FIDO2 key on every service

The flexSecure is NFC-only. Register a backup FIDO2 key (YubiKey 5 NFC or J3R180) as secondary. If the implant is unavailable, you need a recovery path that does not require surgery.

4.5 HMAC unlock — Vaultwarden

ykman otp chalresp --generate 2
# Store the slot secret in your password manager before continuing
# In Vaultwarden: Settings > Security > Two-step Login > YubiKey OTP Security Key
# Test unlock before relying on it

5. Duress Framework

> Conditional control

Relevant only when: (1) an adversary has physical access or coercive leverage; (2) you may be forced to authenticate; (3) the system cannot distinguish voluntary from coerced authentication.

5.1 What the DuressApplet is and is not

A hardware-enforced context switch. Single AID, uniform external interface. An observer cannot determine which context is active from the command set, response format, or timing. The PIN (equal length across all contexts) determines which key material is active. The applet is not publicly distributed.

The DuressApplet does The DuressApplet does not do
Store multiple keys in strictly isolated contexts Create decoy accounts or populate them
Guarantee decoy PIN only activates decoy context Switch SSH keys or GPG agents automatically
Prevent timing attacks from revealing active context Protect you if you access primary assets in decoy mode
Decrement all retry counters on mismatch Make a decoy believable if accounts are empty

:warning: The applet is the lock — you must build the house

Hardware guarantees context isolation. The decoy environment still requires: a dedicated account with realistic activity history, an isolated network segment, and a context-aware daemon that switches SSH keys and GPG agents on context ID.

5.2 Context model

Context PIN Contents Use case
Context 0 — primary Primary PIN Real keys. Full access. Normal daily operation
Context 1 — decoy Decoy PIN Valid low-value accounts. Plausible history. No path to primary. Coercion / forced authentication
Context 2 — burn Burn PIN Minimal. Disposable. High-risk environments

5.3 APDU reference

INS Code Function Auth
INS_SELECT_CONTEXT 0x20 Authenticate by PIN, activate context. All retry counters decrement on mismatch — constant-time. None
INS_GET_CONTEXT_ID 0x21 Return active context ID. 0xFF if none selected. None
INS_CHALLENGE 0x30 HMAC-SHA256 using active context key. Input: 1–64 bytes. Output: 32-byte HMAC. Context selected
INS_SET_KEY 0x40 Set 32-byte key for context. Admin or matching context
INS_SET_PIN 0x41 Set 4-byte PIN for context. Admin or matching context
INS_RESET_CONTEXT 0x42 Wipe and reinitialise context with random data. Admin only
INS_ADMIN_AUTH 0x60 Authenticate as admin (32-byte key). Session-scoped. Admin key
INS_VERSION 0xFF Return applet version. None

Status words: 9000 = Success · 6982 = PIN incorrect (all counters decremented) · 6983 = Context blocked · 6985 = No context selected · 6700 = Wrong length


6. Key Lifecycle

Key / credential Rotation cadence Trigger events
GPG subkeys 12–24 months Subkey expiry, suspected compromise, role change
HMAC secrets 6–12 months Suspected exposure, password manager migration
FIDO2 credentials Annually on critical services Service compromise, device replacement
GPP admin key On confirmed compromise only Triggers full reprovisioning
Threshold key shares On participant change Departure, compromise, or implant loss

Master key — no expiry

Subkeys carry expiry dates to force rotation. The master key does not expire. Its only function is to certify subkeys, an infrequent and deliberate action. Protected by the EAL6+ secure element, not by expiry.

Master key backup

> The on-chip master key cannot be exported — by design

Backup strategy: maintain a backup FIDO2 key; maintain GPG revocation certificates in encrypted offline storage; maintain the GPP admin key for replacement chip configuration.

On chip loss: publish revocation, acquire replacement, generate new master key, re-sign subkeys.

Decommissioning

Revoke all GPG subkeys and publish revocation certificates. Deregister all FIDO2 credentials. Rotate all HMAC secrets. Update SSH authorized_keys. The on-chip master key cannot be erased by command. The chip must be physically destroyed or permanently blocked via GPP. Document and sign the decommission event before destruction.


7. Audit

The audit chain provides integrity of record, not proof of voluntary action. A signed log proves it was not tampered with after creation. It does not prove the conditions under which each entry was created. This gap is irreducible.

Operation What to log Destination
SSH authentication Timestamp, source IP, server fingerprint, key fingerprint Server SSH log + personal audit trail
GPG signing Timestamp, document hash, key fingerprint, context ID GPG agent log + personal audit trail
FIDO2 authentication Timestamp, relying party, success/failure IdP logs + personal audit trail
HMAC challenge-response Timestamp, requesting service, response status Vaultwarden audit log
Presence verification Timestamp, challenge result, session state change Daemon log
Context switch Timestamp, context ID, action taken Daemon log — logged under active context
Threshold signing Timestamp, participants, document hash, ceremony ID Ceremony log — all participants sign

> External anchoring

“Stored separately” must mean a genuinely independent store: remote append-only storage (WORM policy), WORM media, or RFC 3161 trusted timestamping. A co-located log store that a compromised endpoint can also reach is not separate.


8. Recovery

:warning: Test the recovery sequence before the implant procedure

Run through chip-loss recovery on the J3R180 before the implant goes in. A backup that has never been tested is a belief, not a backup.

Backup Strategy (Dual-Flash):
Simply registering a YubiKey as a secondary FIDO2 authenticator is insufficient for a true hardware root of trust. To create a seamless, drop-in replacement for the implant in the event of damage or loss:

  1. Air-Gapped Generation: Generate your GPG master and subkeys on a completely offline computer (air-gapped).
  2. Dual Flashing:
    • Flash the exact same private subkeys to the FlexSecure (via GPP/OpenPGP).
    • Flash the exact same private subkeys to a YubiKey 5 NFC (via ykman or GPP).
  3. Result: Both devices now hold the identical private key material.
    • Scenario: If your implant is damaged or lost, you simply pick up the YubiKey.
    • Outcome: The server sees the same key fingerprint. No certificate re-issuance, no key rotation, and no downtime are required. The YubiKey acts as a true “hot-swap” backup.
  4. Storage: Store the YubiKey in a fireproof safe or safe deposit box (cold storage).

Note: This requires the YubiKey to support the OpenPGP applet (YubiKey 5 Series does). This strategy ensures that your identity anchor is not a single point of failure, even if the body-bound device is compromised.

Item Backup Recovery action
GPG private key Not backed up — non-exportable by design Revoke subkeys. Generate new master key on replacement chip.
GPG revocation certs Encrypted offline storage + password manager Publish immediately on chip loss.
HMAC slot secret Password manager Re-configure HMAC slot on replacement chip.
FIDO2 registrations Backup FIDO2 key registered as secondary on all services Use backup key. Re-register implant when replacement available.
GPP admin key Password manager + encrypted offline storage Required to configure any replacement chip.
Threshold key shares Co-signers hold remaining shares Coordinate share rotation. New chip rejoins threshold ceremony.

Recovery sequence — chip loss

  1. Revoke GPG subkeys. Publish revocation certificates to keys.openpgp.org immediately.
  2. Deregister FIDO2 from all services using the backup FIDO2 key.
  3. Update SSH authorized_keys on all servers.
  4. Rotate HMAC secrets. Reconfigure Vaultwarden unlock.
  5. Notify threshold co-signers. Coordinate share rotation.
  6. Acquire replacement chip. Run J3R180 verification workflow before provisioning.
  7. Provision replacement implant — full setup sequence from Section 4.
  8. Re-register FIDO2 on all services.
  9. Return backup FIDO2 key to secondary status.
  10. Rejoin threshold signing with new share via DKG ceremony.

9. Failure Mode Reference

Failure mode Attacker gains Detection Response
GPP admin key exposed Full chip administration Unexpected applet changes Rotate key. Revoke all credentials. Provision replacement.
GPG subkey compromised Forged signatures attributable to you Unexpected signatures in audit log Revoke subkey. Publish revocation cert. Master key unaffected.
HMAC secret leaked Credential store without chip Unexpected access events Rotate HMAC secret. Reprogram slot.
FIDO2 relay attempt Authentication bypass Origin check fails — service rejects FIDO2 origin binding defeats relay. Monitor logs.
Coercion — forced tap Forced auth — primary or decoy Behavioural anomaly; duress activated Duress framework (Section 5).
Chip read failure Reduced availability Intermittent presence check failures Backup hardware key. Monitor. Plan replacement.
Audit log tampered False event narrative Hash chain mismatch vs external anchor External anchor proves tampering. Investigate window.
Endpoint compromise post-auth Abuse of authenticated session Behavioural anomaly Tokens are short-lived. Rotate. Review audit log.
Wrong PIN under stress Primary identity exposed None — indistinguishable Prevention only: rehearse decoy workflow until automatic.

10. Kit and Resources

Hardware

Software

Community resources


VivoKey flexSecure · Practical Reference · April 2026 · Not affiliated with Dangerous Things or VivoKey.

2 Likes