Yubico Forum
https://forum.yubico.com/

Test vectors
https://forum.yubico.com/viewtopic.php?f=8&t=45
Page 1 of 1

Author:  Simon [ Mon May 19, 2008 11:13 am ]
Post subject:  Test vectors

To make it easier to port the basic server libraries to other languages, we publish below some test vectors that can be used to detect errors in your code. People have expressed a desire to port our libraries to Python and Perl, and we'd certainly like to see that happen!

Code:
Test vectors for Yubikey
------------------------

The YubiKey output consists of a two fields concatenated with each
other:

YubiKey = [identity]<otp>

The "identity" field is a variable-length ModHex encoded identity
field.  If no static identity is wanted, it may be omitted (i.e., of
zero length).

The "otp" field is a 32 characters fixed-size ModHex encoded field
with a AES encrypted plaintext block of a specific format.

Test vectors are needed for ModHex, AES in ECB mode, and internal
parsing of the plaintext.

In this file, we'll use the sample YubiKey
'dteffujehknhfjbrjnlnldnhcujvddbikngjrtgh' for demonstration purposes.

Modhex
------

Modhex is an encoding mechanism, much similar to hex-encoding but the
alphabet is the alphanumeric string 'cbdefghijklnrtuv' instead.

The input is an arbitrary binary string.  The output is a ASCII
string, twice as large as the input.

INPUT:     hknhfjbrjnlnldnhcujvddbikngjrtgh
DECODE:    69b6481c8baba2b60e8f22179b58cd56 (in hex)

More test vectors:

INPUT:     test
ENCODE:    ifhgieif

INPUT:     test
ENCODE:    hhhvhvhdhbid

AES-ECB
-------

This is standard AES-128 in "raw" mode, i.e. Electronic Code Book.  It
is assumed that the same input is never encrypted twice.  We only use
key sizes of 128 bits.

INPUT:    69 b6 48 1c 8b ab a2 b6 0e 8f 22 17 9b 58 cd 56
AESKEY    ec de 18 db e7 6f bd 0c 33 33 0f 1c 35 48 71 db

OUTPUT:   87 92 eb fe 26 cc 13 00 30 c2 00 11 c8 9f 23 c8

Plaintext
---------

The following plaintext converted into a structure:

PLAINTEXT:  87 92 eb fe 26 cc 13 00 30 c2 00 11 c8 9f 23 c8

  uid: 87 92 eb fe 26 cc
  counter: 19 (0x0013)
  timestamp (low): 49712 (0xc230)
  timestamp (high): 0 (0x00)
  session use: 17 (0x11)
  random: 40904 (0x9fc8)
  crc: 51235 (0xc823)

The CRC value is not used for cryptographic authentication, just as a
sanity check.  It is CRC-16 checksum computed on the entire structure
(including the provided crc value from the plaintext), and the residue
should be 0xf0b8.  The CRC-16 value computed on the above PLAINTEXT
would be:

  crc: F0B8

This matches the expected residue.

Questions?
----------

Talk to <simon@yubico.com>.

--
$Id: test-vectors.txt,v 1.3 2008-04-03 14:50:25 jas Exp $

Author:  Simon [ Mon Jun 09, 2008 12:47 pm ]
Post subject:  Re: Test vectors

There have been requests for more test vectors for real OTPs, so here is a bunch from a key with this AES key:

Code:
B64 secret: BoKVLTNj8iVlS1inOxMSWQ==
Hex secret: 0682952d3363f225654b58a73b131259
Modhex secret: chjdkgdteehevddghgfngjlienbebdgk


A few OTPs are:

Code:
ndgtriluugngkuhguutjdfihfkleuvnjtjiljkbtbngb
ndgtriluugnghggtkhvrbbrrgtdfeivgklbkviteggcu
ndgtriluugngvlbnjllchllugvhhftndludrjubuuvkh
ndgtriluugngvukkrdlbvnettvhdhcjfgtjljkufulfe
ndgtriluugngnfdeicbdnfhlinhjvkufikdvbunjjvbn
ndgtriluugngbclrcivunvrbghicrfkeflvgrkdrfbve
ndgtriluugngvkdlfkvljfcvbehdvbtelhuutgdhfdku


You should be able to print debug info using the 'tool' program from the yubico-c project, see: http://code.google.com/p/yubico-c/

Outputs for the first two OTPs are:

Code:
jas@mocca:~$ tool chjdkgdteehevddghgfngjlienbebdgk ndgtriluugngkuhguutjdfihfkleuvnjtjiljkbtbngb
warning: overlong token, ignoring prefix: ndgtriluugng
Input:
  token: kuhguutjdfihfkleuvnjtjiljkbtbngb
          9e 65 ee d8 24 76 49 a3 ef b8 d8 7a 89 1d 1b 51
  aeskey: chjdkgdteehevddghgfngjlienbebdgk
          06 82 95 2d 33 63 f2 25 65 4b 58 a7 3b 13 12 59
Output:
          c5 fc 55 c3 76 7f 0d 00 00 00 00 00 1a 33 6d 9d

Struct:
  uid: c5 fc 55 c3 76 7f
  counter: 13 (0x000d)
  timestamp (low): 0 (0x0000)
  timestamp (high): 0 (0x00)
  session use: 0 (0x00)
  random: 13082 (0x331a)
  crc: 40301 (0x9d6d)

Derived:
  cleaned counter: 13 (0x000d)
  modhex uid: rgvrggreihiv
  triggered by caps lock: no
  crc: F0B8
  crc check: ok
jas@mocca:~$


Code:
jas@mocca:~$ tool chjdkgdteehevddghgfngjlienbebdgk ndgtriluugnghggtkhvrbbrrgtdfeivgklbkviteggcu
warning: overlong token, ignoring prefix: ndgtriluugng
Input:
  token: hggtkhvrbbrrgtdfeivgklbkviteggcu
          65 5d 96 fc 11 cc 5d 24 37 f5 9a 19 f7 d3 55 0e
  aeskey: chjdkgdteehevddghgfngjlienbebdgk
          06 82 95 2d 33 63 f2 25 65 4b 58 a7 3b 13 12 59
Output:
          c5 fc 55 c3 76 7f 0d 00 16 00 00 01 5f 97 0b 46

Struct:
  uid: c5 fc 55 c3 76 7f
  counter: 13 (0x000d)
  timestamp (low): 22 (0x0016)
  timestamp (high): 0 (0x00)
  session use: 1 (0x01)
  random: 38751 (0x975f)
  crc: 17931 (0x460b)

Derived:
  cleaned counter: 13 (0x000d)
  modhex uid: rgvrggreihiv
  triggered by caps lock: no
  crc: F0B8
  crc check: ok
jas@mocca:~$


Happy hacking,
Simon

Author:  hasterguf [ Mon Jun 09, 2008 4:21 pm ]
Post subject:  Re: Test vectors

Hi,

if you need more testvectors

You can make all the test-vectors you like here: http://zyz.dk/yk/generator_0.2/yubi_generator.php
And you can test-decode otp's here: http://zyz.dk/yk/class_0.5/yubikey_test_decode.php

Best regards,
Alex

Author:  caitsith6502 [ Mon Jun 09, 2008 6:18 pm ]
Post subject:  Re: Test vectors

Simon: when was the last time you used the yubikey that you gave test vector samples of? A few simulated inserts later, and this is the end result. (And check the test your key page, in OTP mode only. (Remove and reinsert till you get in.) (Although You may be able to get that info directly.).

(Note, all yubikey OTPs that were used to get me here, were generated on http://zyz.dk/yk/generator_0.2/yubi_generator.php.) As a result, the real physical yubikey, that is in Simon's possession, will end up hitting on the REPLAYED_OTP error for the next few inserts.

Author:  hasterguf [ Mon Jun 09, 2008 7:16 pm ]
Post subject:  Re: Test vectors

caitsith6502: Ups it's already up to 60000 now (giving me a NON-REPLAY-OTP)... wonder what happens when it reaches 65535 :) wrap around?
Well I am not going to spoil that virtual yubikey. But whenever someone hits the magic 2^16 - lets see how yubico's servers handle that :)

Best regards,
Alex

Author:  caitsith6502 [ Mon Jun 09, 2008 9:15 pm ]
Post subject:  Re: Test vectors

Key is absolutely dead when this happens. (unless the admins manually rewrap the key back to 0 everything on the server.)

Note, Just the 8 hz timer is enough to detect that the key has not been replayed, even if the other counters has not wrapped, but once that reaches 16777215, with button press counter at 255, and insert counter at 65535 (Actually detected as 32767 with caps lock activation), and that OTP is played, no further OTPs from that key will ever work, without a reset. This condition has already been met, by my hands.

Author:  Simon [ Tue Jun 10, 2008 9:33 am ]
Post subject:  Re: Test vectors

I'm not sure I understand perfectly here, but I really hope that nobody has reached the 2^15 limit for a real yubikey -- since I gave away the AES key for that yubikey, a software implementation will be able to "kill" that yubikey as far as the server believes. But if you give away the AES key, the security is gone... so this is all to be expected, right?

/Simon

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/