Die einfachste Variante ist per WebAuthN.
Aber wir reden hier, befürchte ich, von Desktop-Anwendungen?
Der Yubikey (ist ja ein USB-Device) meldet sich als HID (Human Interface Device) an, und kann sozusagen wie eine Tastatur funktionieren.
Wenn Du ihn einsteckst und drauf drückst, generiert er Dir einen OTP (One-Time Password) und gibt ihn sozusagen als Keypresses an Deine Anwendung.
Das OTP basiert zum einen auf der ID des Keys, und zum anderen aus einem Shared Key, den Deine Applikation auf den Yubikey programmiert (bzw. auf einen sogenannten "Slot" setzt).
Wenn Du nun den User Authentifizieren willst, dann suchst Du den Shared Key zu dem User (und dessen Yubkey Key-ID).
Den Zeichensalat den der Yubikey an Deine Anwendung "tippt" kannst Du nun gegen diese zwei Werte validieren (steckt auch alles im Yubikey
SDK drin), und das sagt Dir dann ob das wirklich von dem Key kam oder nicht.
Siehe auch:
https://docs.yubico.com/yesdk/users-...redential.html
und
https://docs.yubico.com/yesdk/users-...onse-code.html