Author Archives: Daniel Drake

libfprint v0.0.5 supports new MS hardware


A while ago, Microsoft released a new revision to their fingerprint reader product. The new revision includes some extra security and the open source software that I’ve previously written for the earlier models does not work with the new revision as a result.

The newly added security is a challenge-response algorithm, where the device challenges the authenticity of the driver soon after the device is plugged into the computer:

  1. The device sends a 16 byte challenge
  2. The driver sends a 16 byte response

The challenge produced by the device changes on every plugin and is probably just a random number. The driver then receives the challenge, applies a known secret algorithm to it, and sends the resultant data as a response. The device also knows the secret algorithm, and hence knows the correct response that the driver should send back. If the driver does not send back the correct response, the driver is not able to operate the useful functions of the device.

Naturally this poses a challenge for an open source driver implementation – unless we know the secret challenge-response algorithm, we are unable to operate the device. Previously, all reverse engineering of these devices has been done through bus traffic analysis alone (looking at the USB packets sent and received by the official Windows drivers, and making educated guesses as to what each packet means). It would not be practical to attempt to apply the same reverse engineering techniques to determine the secret challenge-response algorithm – we’re effectively talking about breaking 128 bit encryption by analysing a data set…

So, I got in contact with a 3rd party and we performed chinese wall reverse engineering on this particular part of the Microsoft driver. The 3rd party looked at disassembled instruction code of the Windows driver and documented the algorithms without reproducing any of their code. I received the documentation, and produced a clean-room reimplementation of the authentication scheme in my driver.

The secret challenge-response algorithm in use is simply AES with a specific decryption key.

I have released libfprint v0.0.5 which now supports these devices out of the box. Enjoy!

fprint project featured in LWN

fprint is featured in the November 21 edition of LWN, which should be helpful in spreading the word further!

The article mentions that libfprint does not support identification (one-to-many fingerprint matching) yet. I just released libfprint v0.0.4 which adds identification support, and fprint_demo v0.4 which includes a GUI to demonstrate it. Talk about yesterday’s news ;-)

Torkild Retvedt contributed a logo, which you can see above. I’m happy to consider further logo submissions, but I do like Torkild’s and it will do very nicely for an initial project logo. Thanks Torkild!

Patrick Guignot spotted the LWN article, did some further research, and then published an article about fprint on linuxfr.org. I have only seen the google translation, but I must say, translation artifacts aside, that is an extremely well written article which has hit on exactly what I’m trying to achieve. I’ve written to Patrick to see if he’ll translate it into English or give me permission to find someone else to do so – I will publish any results here.

Update: Patrick doesn’t know English well enough to write his own translation. Any French-speaking volunteers who wouldn’t mind spending some time translating this into English?

fprint project releases

Things are still busy with my new project. Here are a few more fprint releases which add some crucial features:

  1. libfprint v0.0.3 adds support for the Authentec AES1610 found in various common laptops/tablets, contributed by Anthony Bretaudeau. These fingerprint readers only see a small area of the finger so imaging performance isn’t great, but it is usable!
  2. pam_fprint v0.2 adds an enrollment application contributed by Vasily Khoruzhick, and has been fixed not to activate itself for logins over SSH.
  3. fprint_demo v0.2 and v0.3 add various bits of functionality: enrollment GUI, image saving functionality, plus the ability to count and plot detected minutiae points.

fprint_demo v0.3 showing minutiae plotted on scan image

A Christmas Collection

Following the success of Someone to watch over me, The Pavao String Quartet have released 2 new albums as of today. Kerenza, the lead violinist, is a relative of mine.

The first, titled “A Christmas Collection”, is a collection of Christmas carols uniquely arranged for the quartet by Carlo Martelli. At £6.99, it makes for an ideal Christmas gift and £1 of each sale goes to the Breakthrough Breast Cancer charity. Buy from Amazon or hmv.com.


Track list

  1. Silent Night
  2. Away In A Manger
  3. God Rest Ye Merry Gentlemen
  4. Angels From The Realms
  5. Christmas Medley
  6. Vaughan William’s Carol
  7. The Shepherd’s Farewell
  8. Have Yourself A Merry Little Christmas
  9. Sleigh Ride
  10. O Little Town Of Bethlehem
  11. Once In Royal David’s City
  12. Suite From The Snowman


The second album release of today features performances of two classical quartets composed by Bax and Elgar. It is released in celebration of Elgar’s anniversary. Buy it from Amazon.co.uk or HMV.


Track list

  1. String Quartet No 1 In G (Bax)
  2. String Quartet In E Minor Op 83 (Elgar)


More fprint releases

The fprint project has kicked off to a good start. Thanks to everyone who provided feedback so far. Any extra help spreading the word is much appreciated!

Immediately after the initial release, Vasily Khoruzhick contributed a fix for my aes2501 driver, as his is mounted in his laptop 180 degrees rotated, it’s upside down (actually I’m not sure which way round mine is supposed to go, but thanks to Vasily it now works either way). I also modified the aes2501 driver to perform fewer USB transactions, resulting in much improved image quality and overall scanning experience.

Jan-Michael Brummer contributed a driver for the UPEK TouchChip fingerprint sensor (USB ID 0483:2015) found in the Samsung P35 laptop. Jan-Michael indicates that the image processing performance is good but not brilliant.

libfprint v0.0.2 has been released with the above changes and a few others.

I also have been working on a simple demonstration GUI which may also help development in future. It’s called fprint_demo. Here’s a screenshot:

Gentoo ebuilds for all released fprint components can be found here.

Announcing fprint project

If you’ve been following my previous work with DigitalPersona fingerprint readers on Linux, you’ll be aware that what was an active and exciting project was reduced to almost nothing when it became apparent that open source fingerprinting code was possibly in conflict with U.S. export control laws.

Well, after studying the export control documents in detail, I discovered that these restrictions simply do not apply. I decided to propose my 3rd year university project as an open source software project to really sort out the state of fingerprinting on Linux. This project is now underway. For an overview, look at this poster.

The core project component, libfprint, aims to make it easy for application developers to add fingerprinting support to their applications – be it imaging or verification (or in future, identification). libfprint strives to provide you a single API for manipulating fingerprint readers in the most generic of fashions. Internally, a variety of different devices are supported through a driver-like abstraction. These devices do differ tremendously, but libfprint works to wrap that up so that as an application developer, you don’t care what type of device the user has plugged in.

As this is an academic project, it was necessary to keep development closed while I implement the fundamentals myself. I’m now at a point where I’m able to release this as open source and accept contributions in the normal way. I plan to keep this project going beyond the academic project schedule and I’d love to see a community forming. In the long term I’m aiming for inclusion with major distros, integration into desktop environments, etc.

Quick summary of where things are at:

  • libfprint is relatively stable and works well with most devices
  • a PAM module named pam_fprint has been created, which allows you to use your fingerprint to login to your system
  • The code is all in git repositories, there are initial releases but there are no guarantees of stability or forwards-compatibility
  • API documentation is mostly complete, but is subject to change without notice
  • I’ve been working hard to get a decent amount of content on the project website

Hardware currently supported:

  1. UPEK TouchStrip (found in many ThinkPads) – works great, we already knew this as ThinkFinger is quite successful
  2. DigitalPersona/Microsoft devices – these work fantastically well
  3. Authentec AES2501 – an imaging device, swipe sensor, works well (requires a little extra care while scanning).
  4. Authentec AES4000 – an imaging device I haven’t really played with before. Image quality isn’t that brilliant, but it’s good enough for fingerprint login if you’re careful.

I’m very happy with the project so far. I’m pretty sure I’m the first person to fully implement open source fingerprint login for the DigitalPersona devices, the AES2501, and the AES4000, plus I’ve done it in a generic way which interchangeably works with all supported devices.

Please direct all questions/bug reports to the mailing list, please don’t use the comment form on this post for anything other than comments.

gentoo-sources-2.6.23 feature changes

Linux 2.6.23 was released a few hours ago. See the kernelnewbies changelog lots of details.

In addition to all the upstream changes, gentoo-sources-2.6.23 (which will be in portage very soon) has some Gentoo-specific feature changes worth noting:

vesafb-tng replaced with uvesafb

Michal is the author of vesafb-tng, which is popular as it allows you to use higher frequency refresh rates on the VESA framebuffer to stop you getting headaches on CRT monitors.

Michal has always been first to admit that vesafb-tng was an ugly hack and has no future. He’s now able to refrain from insulting his own coding abilities though, as he has reimplemented the functionality in a way that isn’t an ugly hack.

uvesafb is the replacement. The fundamental difference is that much of the functionality has been moved out of the kernel into userspace, so the kernel doesn’t have to worry about the ugly details.

The big change on the inside means that it’s unfortunately not a direct switchover to uvesafb from vesafb-tng. There are installation instructions on the uvesafb project homepage.

In fact, the uvesafb code is so non-ugly that it has been accepted into the upstream Linux kernel for the 2.6.24 release. Thanks Michal!

fbsplash replaced by fbcondecor

Michal also authored fbsplash, a kernel patch to allow you to place a pretty splash image behind the framebuffer console.

Due to confusion in the naming, fbsplash has been renamed to fbcondecor (FrameBuffer CONsole DECORations). However, this is just a simple rename, so the migration path is not difficult. See Michal’s blog for further details.

speakup isn’t back yet

speakup is an in-kernel speech synthesizer for blind/hard-of-sight Linux users.

We dropped speakup for 2.6.22 as it was no longer compatible with the kernel. I was planning to revive it for 2.6.23 but I haven’t had time, so it will have to wait for 2.6.24.

IBM University Team Challenge 2007

At the end of last week, myself and five other 3rd years represented the University of Manchester at the IBM University Team Challenge. We competed against 16 other UK universities at IBM’s site in Hursley (near Southampton).

After a meal the previous evening and various introductions we were given 2 hours 30 minutes to complete as many challenges as we could. There were 24 challenges, grouped by category: maths, logic, communication, sensory, mystery, physical. In one challenge, 5 of us had to communicate a map to our team mate who had to transcribe it, but our communication was limited to 4 picture cards, 4 smells, and a rattle (no talking allowed).

The most amusing challenge we undertook was in the physical category, pictured below:

In this challenge we had to strap colanders to our heads and catch badminton shuttles in them, which were batted by a team mate from behind a wall!

The second half of the competition was a quiz, with various dynamics to mix things up a bit.

The winning team – Cambridge – won a ThinkPad each and £1000 for their university. As we didn’t come in the top 3 overall, we were not told our position, but we do know that we came 2nd in the first half of the competition with 7 challenges completed (plus a bonus for completing at least one challenge in each category).

It was a fun trip and interesting to meet some IBM people and look around their site. It’s nice to see IBM organising and sponsoring student events like this, it can’t be cheap…

21 today!

I’m finally 21!

I’ve spent the last few weeks on holiday with my family. We started off just outside Toronto, at a lovely lakeside house owned by some friends. After a week there, we drove to Niagara Falls and did the usual tourist things on the Canadian side, which was an amazing experience. Next we flew into Boston and then spent a few days at a nice beach-side house on Cape Cod. We’ve spent the last few days in Boston and my family will return home on Tuesday.

Tonight, my family, 20 friends and myself will be gathering for a meal in Boston. Then we’ll be hitting up some bars for my first true taste of American nightlife (the under 21 thing isn’t much fun out here!).

It’ll also be a bit of a farewell do, as on September 4th I end my American experience and return back to England. It’s going to be strange leaving all this behind so suddenly, it’s also a little sad. For those of you who stumble across this post, I’d like to thank all of my new friends in the US who have made this year so enjoyable, especially those who helped with the moving and settling in. I’ve had a fantastic time and will definitely be visiting in the near future.

What’s next for me? Well, in a few weeks time I return to the University of Manchester (UK) to resume my studies. I’ll be entering the 3rd year of my Computer Science masters degree.