PhilippC / PhilippC/keepass2android

[FEAT] Native YubiKey HMAC challenge-response (drop dep on abandoned ykDroid)

Open
#3,271 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C#
Stars
6.2k
Forks
478
Avg merge
1h 4m
Merged PRs (30d)
2

Description

I currently use keepass2android and KeepassXC (linux & mac) with a yubikey challenge-response as a hardware factor. I'm worried about the long-term viability of this setup, which I think is an ideal way to have hardware-factor security on all three platforms without relying on internet access or a private company.

Problem:
HMAC-SHA1 challenge-response with a YubiKey currently requires the external ykDroid app. ykDroid was last updated in 2023 and is unmaintained afaik. With Google's upcoming verified-developer rules, which requires developer government-ID verification, an abandoned app like ykDroid is supposed to become (nearly) uninstallable in a couple months. That would break challenge-response unlock for everyone relying on it.

Possible solution:
Replace the ykdroid dependency with direct use of the official yubikit-android library. YubiOtpSession.calculateHmacSha1(slot, challenge, state) does exactly what ykDroid returns today. The desktop KeepassXC app uses the driver provided by yubico.
I understand this is not trivial because yubikit-android is Java, so it would require some sort of binding like you have for Dropbox.

I don't know any of the languages involved, but I volunteer to test stuff (with a google pixel 10 and yubikey 5C NFC), and I'll donate more Oktoberfest beers. Thank you for your work on this essential app.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by inspecting the existing ykDroid integration and the Dropbox binding mentioned in the issue, then read the official yubikit-android API around YubiOtpSession.calculateHmacSha1. Done means the app uses the native library instead of ykDroid for HMAC-SHA1 challenge-response and the existing Android unlock flow still works.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, csharp, java
Domain
authentication, mobile-dev, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.