• Stars
    star
    279
  • Rank 142,705 (Top 3 %)
  • Language
    C
  • License
    BSD 2-Clause "Sim...
  • Created over 13 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

YubiKey Personalization cross-platform library and tool

Installation of the Yubikey Personalization package

Yubikey Personalization

The YubiKey Personalization package contains a library and command line tool used to personalize (i.e., set a AES key) YubiKeys.

Documentation

The complete reference manual on the YubiKey is required reading if you want to understand the entire picture and what each parameter does. Download it from http://www.yubico.com/

Dependencies

Getting and installing dependencies depends on your operating systems, we give example for some flavours. If you know how to install dependencies on other systems, let us know. Debian hints should apply to Debian derivatives as well, including Ubuntu.

Yubico-c is needed, see: https://developers.yubico.com/yubico-c/

Debian:           apt-get install libyubikey-dev
Fedora:           dnf install libyubikey-devel

Pkg-config simplify finding other dependencies, see: http://www.freedesktop.org/wiki/Software/pkg-config

Debian:           apt-get install pkg-config

Yubikey-personalization depends on libusb or libusb-1, so you will have to get it. We recommend using libusb-1.

Debian libusb-1:  apt-get install libusb-1.0-0-dev
Debian libusb:    apt-get install libusb-dev
Fedora:           dnf install libusb-devel

The JSON library is an optional dependency, see: https://github.com/json-c/json-c/wiki

Debian:           apt-get install libjson-c-dev

You need json-c version 0.10 or later to get pretty printing of JSON output. This project will build with version 0.9 too, but will not pretty print the JSON output.

License

The project is licensed under a BSD license. See the file COPYING for exact wording. For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval.

Building from Git

Skip to the next section if you are using an official packaged version.

You may check out the sources using Git with the following command:

  git clone https://github.com/Yubico/yubikey-personalization.git

This will create a directory yubikey-personalization. Enter the directory:

  cd yubikey-personalization

When building from source Yubikey-personalization depends on asciidoc, xsltproc and DocBook to build its manpage.

  Debian:           apt-get install asciidoc xsltproc docbook-xsl

Autoconf, automake and libtool must be installed.

Generate the build system using:

  autoreconf --install

Building

The build system uses Autoconf, to set up the build system run:

  ./configure

Then build the code, run the self-test and install the binaries:

  make check install

Using

Warning
By using this tool you will destroy the AES key in your YubiKey. This prevents it from being useful against Yubico’s validation server. It is possible to upload a new AES key to Yubico, using a random YubiKey prefix, to restore it. But it is not possible to get back your old yubikey prefix if you decide to re-program your YubiKey.
Important
When running any of the utils that need to access the YubiKey you will either need to run as root, or you will have to have made sure that the current user has permission to access the device. These permissions can be set up by copying the udev rules files (69-yubikey.rules and 70-yubikey.rules) to /etc/udev/rules.d/

With that out of the way, here is how you would program a YubiKey with an all-zero AES key and a dummy prefix:

$ ./ykpersonalize -1 -ofixed=cccccccccccc -a00000000000000000000000000000000
Firmware version 1.3.1 Touch level 9840 Program sequence 10
Configuration data to be written to key configuration 1:

fixed: m:cccccccccccc
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags:

Commit? (y/n) [n]: y
$

Using the "ykparse" tool from the yubico-c package, you can check that the OTPs are correct. For example:

$ ykparse 00000000000000000000000000000000 ccccccccccccdkrkedgchtlfefghcekefhlifbchijrd
warning: overlong token, ignoring prefix: cccccccccccc
Input:
  token: dkrkedgchtlfefghcekefhlifbchijrd
          29 c9 32 50 6d a4 34 56 03 93 46 a7 41 06 78 c2
  aeskey: 00000000000000000000000000000000
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Output:
          00 00 00 00 00 00 01 00 53 ea 63 00 6f 9e c4 24

Struct:
  uid: 00 00 00 00 00 00
  counter: 1 (0x0001)
  timestamp (low): 59987 (0xea53)
  timestamp (high): 99 (0x63)
  session use: 0 (0x00)
  random: 40559 (0x9e6f)
  crc: 9412 (0x24c4)

Derived:
  cleaned counter: 1 (0x0001)
  modhex uid: cccccccccccc
  triggered by caps lock: no
  crc: F0B8
  crc check: ok
$

To program a YubiKey in static mode, you use the -ostatic-ticket flag as follows:

$  ./ykpersonalize -1 -ofixed=cccccccccccc -a00000000000000000000000000000000 -ostatic-ticket
Firmware version 1.3.1 Touch level 9856 Program sequence 11
Configuration data to be written to key configuration 1:

fixed: m:cccccccccccc
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags: STATIC_TICKET

Commit? (y/n) [n]: y
$

To program a YubiKey in static mode with a strongly looking password (i.e., also containing numeric and upper case letters), you use the -ostatic-ticket flag together with -ostrong-pw1 and -ostrong-pw2 (note YubiKey 2.0 only!) as follows:

$  ./ykpersonalize -1 -ofixed=cccccccccccc -a00000000000000000000000000000000 -ostatic-ticket -ostrong-pw1 -ostrong-pw2
Firmware version 2.0.0 Touch level 1792 Program sequence 3
Configuration data to be written to key configuration 1:

fixed: m:cccccccccccc
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags: STATIC_TICKET|STRONG_PW1|STRONG_PW2

Commit? (y/n) [n]: y
$

Alternatively on a YubiKey 2.0, you can program the second configuration, which defaults to be the static key configuration:

$  ./ykpersonalize -2 -ofixed=cccccccccccc -a00000000000000000000000000000000
Firmware version 2.0.0 Touch level 1792 Program sequence 3
Configuration data to be written to key configuration 2:

fixed: m:cccccccccccc
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags: STATIC_TICKET|STRONG_PW1|STRONG_PW2

Commit? (y/n) [n]: y
$

To program a YubiKey with a lock code (to prevent others from easily reprogramming it), you use the -oaccess= flag as follows:

$ ./ykpersonalize -1 -ofixed=vvvecdcedvjj -a00000000000000000000000000000000 -oaccess=001100001100
Firmware version 2.0.0 Touch level 1792 Program sequence 3
Configuration data to be written to key configuration 1:

fixed: m:vvvecdcedvjj
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:001100001100
ticket_flags: APPEND_CR
config_flags:

Commit? (y/n) [n]: y
$

To re-program a YubiKey that has a lock code set, you use the -cXXX.. flag as follows:

$ ./ykpersonalize -1 -c001100001100 -ofixed=vvvecdcedvjj -a00000000000000000000000000000000 -oaccess=001100223300
Firmware version 2.0.0 Touch level 1792 Program sequence 3
Configuration data to be written to key configuration 1:

fixed: m:vvvecdcedvjj
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:001100223300
ticket_flags: APPEND_CR
config_flags:

Commit? (y/n) [n]: y
$

To disable the lock code on a YubiKey, program it with a lock code set to zeros. For example:

$ ./ykpersonalize -1 -c001100001133 -ofixed=vvvecdcedvjj -a00000000000000000000000000000003 -oaccess=000000000000
Firmware version 2.0.0 Touch level 1792 Program sequence 7
Configuration data to be written to key configuration 1:

fixed: m:vvvecdcedvjj
uid: h:000000000000
key: h:00000000000000000000000000000000
acc_code: h:000000000000
ticket_flags: APPEND_CR
config_flags:

Commit? (y/n) [n]: y
$

More Repositories

1

yubioath-flutter

Yubico Authenticator for Desktop (Windows, macOS and Linux) and Android
Dart
832
star
2

yubikey-manager

Python library and command line tool for configuring any YubiKey over all USB interfaces.
Python
729
star
3

yubico-pam

Yubico Pluggable Authentication Module (PAM)
C
650
star
4

pam-u2f

Pluggable Authentication Module (PAM) for U2F and FIDO2
C
498
star
5

libfido2

Provides library functionality for FIDO2, including communication with a device over USB or NFC.
C
461
star
6

python-fido2

Provides library functionality for FIDO 2.0, including communication with a device over USB.
Python
362
star
7

java-webauthn-server

Server-side Web Authentication library for Java https://www.w3.org/TR/webauthn/#rp-operations
Scala
354
star
8

libu2f-host

Yubico Universal 2nd Factor (U2F) Host C Library
C
321
star
9

php-u2flib-server

(OBSOLETE) U2F library in PHP
PHP
292
star
10

python-u2flib-server

Python based U2F server library
Python
287
star
11

yubico-piv-tool

Command line tool for the YubiKey PIV application
C
255
star
12

yubioath-android

Yubico Authenticator for Android
Kotlin
240
star
13

python-yubico

Python code to talk to YubiKeys
Python
220
star
14

ykneo-openpgp

OpenPGP applet for the YubiKey NEO
Java
214
star
15

yubikey-manager-qt

Cross-platform application for configuring any YubiKey over all USB interfaces.
QML
200
star
16

yubikey-personalization-gui

YubiKey Personalization GUI
C++
183
star
17

yubikit-ios

Yubico Mobile iOS SDK - YubiKit
Objective-C
171
star
18

php-yubico

PHP class for Yubico authentication
PHP
133
star
19

java-u2flib-server

(OBSOLETE) Java server-side library for U2F
Java
130
star
20

yubikey-val

YubiKey OTP validation server in PHP
PHP
130
star
21

libu2f-server

Yubico Universal 2nd Factor (U2F) Server C Library
C
94
star
22

yubico-c

YubiKey C low-level library (libyubikey)
C
92
star
23

yubico-c-client

Yubico C client library
C
87
star
24

Yubico.NET.SDK

A YubiKey SDK for .NET developers
C#
81
star
25

yubikit-android

Yubico Mobile Android SDK - YubiKit
Java
77
star
26

u2fval

Python based U2F Validation Server
Python
75
star
27

yubihsm-shell

yubihsm-shell and libyubihsm
C
73
star
28

python-pyhsm

Python code for YubiHSM
Python
67
star
29

ykneo-oath

OATH App for the YubiKey NEO
Java
63
star
30

yubico-java-client

Client library for verifying YubiKey one-time passwords (OTPs).
Java
62
star
31

yubikey-neo-manager

Cross platform personalization tool for the YubiKey NEO
Python
57
star
32

yubico-windows-auth

YubiKey Logon for windows
C++
56
star
33

yubikey-ksm

YubiKey Key Storage Module
Perl
55
star
34

webauthn-recovery-extension

Asynchronous delegated key generation without shared secrets (DRAFT)
Python
54
star
35

yubico-dotnet-client

Yubico validation protocol 2.0 client
C#
52
star
36

developers.yubico.com

Source code for generating our website
HTML
49
star
37

python-u2flib-host

Python based U2F host library
Python
47
star
38

python-yubihsm

Python
43
star
39

wordpress-u2f

A Wordpress U2F plugin.
PHP
42
star
40

yubiclip-android

YubiKey NEO OTP to clipboard app for Android
Java
41
star
41

yubikey-piv-manager

Tool for configuring your PIV-enabled YubiKey
Python
40
star
42

yubiauth

Authentication backend written in Python
Python
29
star
43

yubix

Yubico reference authentication software stack. This package installs and configures various packages contained in the YubiX stack.
Perl
29
star
44

yubihsm-connector

Go
28
star
45

yubioath-ios

Yubico Authenticator for iOS
Swift
27
star
46

ykneo-curves

Applet for testing ecc curves
Java
25
star
47

android-u2f-demo

U2F demo app for Android using NFC
Java
24
star
48

yubix-vm

Scripts for building a VM image for Yubi-X
Shell
18
star
49

u2fval-client-php

PHP connector library for communicating with a U2FVAL server
PHP
17
star
50

yubico-shibboleth-idp-multifactor-login-handler

Multi-factor Login Handler for Shibboleth IdP.
Java
16
star
51

yubico.github.com

Release artifacts for all projects.
HTML
15
star
52

u2fval-client-python

Python connector library for communicating with a U2FVAL server
Python
14
star
53

yubico-j

Low-level library for decrypting and parsing Yubikey One-Time Passwords (OTP), written in Java.
Java
14
star
54

yubikey-neo-demo

Android demo application for uses of the YubiKey NEO
Java
14
star
55

python-yubicommon

Common utility modules shared between various Python based Yubico projects.
Python
13
star
56

yubico-bitcoin-java

Java client library for communicating with the ykneo-bitcoin applet for the YubiKey NEO
Java
13
star
57

yubitotp-android

Android application for TOTP with YubiKey NEO
Java
13
star
58

yubico-dbus-notifier

Get D-Bus notifications when a YubiKey is inserted/removed
Python
12
star
59

libykneomgr

YubiKey NEO CCID Manager C Library
C
11
star
60

yubiadmin

Web based administration tool for Yubico software components including YK-VAL, YK-KSM and rlm_yubikey
Python
11
star
61

yubico-perl-client

AnyEvent based Perl extension for validating YubiKey OTPs against the Yubico Validation Protocol version 2.0
Perl
11
star
62

ifd-yubico

Yubico OS X libccid patcher
Python
10
star
63

yubikey-personalization-gui-dpkg

Debian packaging of yubico-personalization-gui
C++
8
star
64

yubihsmrs

rust wrapper for libyubihsm
Rust
8
star
65

yubico-pam-dpkg

Debian packaging of yubico-pam
Shell
7
star
66

rlm-yubico

FreeRADIUS module for using YubiKeys for authentication
Perl
7
star
67

yubikey-neo-manager-dpkg

Debian packaging for yubikey-neo-manager
Python
7
star
68

yubikey-salesforce-client

Apex classes for validating YubiKey one-time passwords
Apex
7
star
69

yubico-piv-tool-dpkg

Moved to https://salsa.debian.org/auth-team/yubico-piv-tool
C
7
star
70

yubikey-personalization-dpkg

Debian package of yubikey-personalization
C
6
star
71

yubioath-desktop-dpkg

Debian package for yubioath-desktop.
Python
6
star
72

yubico-bitcoin-python

Python client library and command line tool for communicating with the ykneo-bitcoin applet for the YubiKey NEO
Python
6
star
73

gradle-gpg-signing-plugin

GnuPG signing backend for Gradle's Signing plugin
Java
5
star
74

python-yubico-dpkg

Debian packaging of python-yubico
Python
5
star
75

python-yubico-client-dpkg

Debian package for python-yubico-client.
Python
5
star
76

python-pyhsm-dpkg

Debian packaging of python-pyhsm
Python
4
star
77

yubihsm-setup

Rust
4
star
78

libu2f-server-dpkg

Debian packaging for libu2f-server
Shell
4
star
79

ykneo-ccid-tools

YubiKey NEO CCID Tools
Objective-C
4
star
80

yubico-c-dpkg

Debian packaging of the Yubico C library (libyubikey)
Shell
4
star
81

yubikit-swift

Yubico Swift SDK - YubiKit
Swift
4
star
82

pam-u2f-dpkg

Debian packaging for pam-u2f
Shell
3
star
83

php-yubico-dpkg

Debian packaging of php-yubico
PHP
3
star
84

yubikey-piv-manager-dpkg

Debian packaging for yubikey-piv-manager
Python
3
star
85

webauthn-sign-kem-extensions

DRAFT: WebAuthn extension(s) for arbitrary signing and key encapsulation
3
star
86

yubico-c-client-dpkg

Debian package of Yubico C Client
Shell
2
star
87

libu2f-host-dpkg

debian packaging of libu2f-host
Shell
2
star
88

yubikey-ksm-dpkg

Debian package of YubiKey KSM project
Perl
2
star
89

yubiauth-dpkg

Debian package of the YubiAuth project
Python
2
star
90

yubikey-val-dpkg

Debian package of YubiKey VAL project
PHP
2
star
91

globalplatform-dpkg

Debian packaging for globalplatform
C
2
star
92

libykneomgr-dpkg

Debian packaging of libykneomgr
Shell
2
star
93

rlm-yubico-dpkg

Debian package of rlm-yubico
Perl
2
star
94

gpshell-dpkg

Debian packaging for gpshell
C
2
star
95

yubiadmin-dpkg

Debian package for yubiadmin
Python
2
star
96

gppcscconnectionplugin-dpkg

Debian packaging for gppcscconnectionplugin
Shell
2
star
97

arkg-rfc

Internet-Draft: The Asynchronous Remote Key Generation (ARKG) algorithm
Makefile
2
star
98

yubico-perl-client-dpkg

Debian packaging for yubico-perl-client
Perl
2
star