public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Driver for Microsoft USB Fingerprint Reader
@ 2006-07-06  4:48 linux
  2006-07-06 12:26 ` Daniel Drake
  2006-07-06 17:38 ` Alan Cox
  0 siblings, 2 replies; 36+ messages in thread
From: linux @ 2006-07-06  4:48 UTC (permalink / raw)
  To: linux-kernel

Alan Cox wrote:
> The very cheap readers all appear to be fairly crude image scanners, and
> they even lack hardware encryption/perturbation so they are actually of
> very limited value.

I utterly fail to see why multiple, generally knowledgeable people are
claiming that encryption in a fingerprint scanner is desirable.

As far as I can tell, the only thing you want is AUTHENTICATION - you
want proof that you are getting a "live" scan taken from a user
who's present, and not a replay of what was sent last week.

This is called "freshness" and is usually provided by including a
random "nonce" (known in other contexts as "magic cookie") in the
authenticated data.

That is,

1) Computer generates random nonce and sends to fingerprint reader
   as part of the "please scan" command.

2) Fingerprint reader scans the image, and hashes it along with the nonce.

3) Fingerprint reader sends the (unencrypted) scan back to the computer.

4) Fingerprint reader computes a digital signature of the hash computed
   in step 2, and sends it to the computer.

5) Computer verifies the signature, thereby proving that the reader
   read the fingerprint after receiving the nonce (or has been
   compromised internally).

To do it right, I'd have a per-reader signing key, signed by a vendor
model key, signed by a top-level vendor public key that's widely
published.  These signatures and the public keys they sign can be stored
in ROM.

Also note that, if using DSA, the raw fingerprint reader's data, hashed
with the device private key and nonce, will make an excellent seed
to generate the per-signature random nonce K.  It is a security disaster
if you make two signatures on different data with the same K, but by
combining some secret information and all of the input used to generate
the hash value, you guarantee that that will only happen if the data
signed is the same, in which case it's harmless.

Put another way, given the hash H to sign and the private key X,
you can let K = SHA(H,X).  (You can also hash in other data, but H and
X are available and sufficient.)


If you don't have the signature verification information, you can still
use the device, you just can't be sure you aren't experiencing a replay
attack.

Encryption is useless, as is authentication without a host-provided
nonce or other means of guaranteeing freshness.  You can just sniff
and replay.  I'm sure keyghost.com would be happy to sell you the
necessary hardware.

Not that I expect "A-1 Computer Corporation" in Shenzhen to have a clue
about these things, but you'd think that Microsoft would have one or
two competent employees left on the payroll.

^ permalink raw reply	[flat|nested] 36+ messages in thread
[parent not found: <6vtYr-w2-5@gated-at.bofh.it>]
* Re: Driver for Microsoft USB Fingerprint Reader
@ 2006-07-05 16:32 Daniel Bonekeeper
  0 siblings, 0 replies; 36+ messages in thread
From: Daniel Bonekeeper @ 2006-07-05 16:32 UTC (permalink / raw)
  To: linux-kernel, kernelnewbies

As I said before, usefulness is something relative, and sometimes,
security is not a concern (even when talking about fingerprint
readers).
My intention with this is to try to create a catalog of fingerprint
readers' properties and I think that taking a look at vendors' SDKs
would be a good start.
As pointed out by Greg, it would be also interesting to export those
properties via sysfs instead of structure passing (or in addiction,
not sure yet).
I'm not sure though about relating fingerprint devices with V4L2 (even
the cheapest ones). Some other considerations discussed with Greg are
also:

1) extending those device informations to other classes, not only to
fingerprint readers
2) maybe using another layer to hold device properties based on
classes ( device driver -> device information layer -> sysfs+kobjects
) so we can have specific properties for "fingerprintreader" objects
and easier ways to export them to the sysfs layer, without explicit
declaration on the device driver
3) extend that layer also to non-USB devices ( bus-independent )

Maybe sysfs classes could have a list of default properties (for
example, /sys/class/fingerprint objects could hold a list of commom
fingerprint properties).

Bill, which fingerprint reader are you using ?

Daniel

-- 
What this world needs is a good five-dollar plasma weapon.

^ permalink raw reply	[flat|nested] 36+ messages in thread
* Driver for Microsoft USB Fingerprint Reader
@ 2006-07-03  6:51 Daniel Bonekeeper
  2006-07-03  8:52 ` Daniel Drake
                   ` (2 more replies)
  0 siblings, 3 replies; 36+ messages in thread
From: Daniel Bonekeeper @ 2006-07-03  6:51 UTC (permalink / raw)
  To: kernelnewbies, linux-kernel

Hello everybody.

I would like to develop a driver for any kind of fingerprint reader
that currently doesn't have a driver for linux, and I'm open for
suggestions on which device I should use. My first thought was the
microsoft usb fingerprint reader
(http://www.geeks.com/details.asp?invtid=DG2-00002-DT&cpc=SCH) because
it's a new device (and, of course, doesn't have any driver for linux),
it's cheap, and it's from MS (read "would be fun" =)

Before proceeding, I would like to know if:
1) Would it be ilegal to write a driver for such device (i.e., without
the permition of the hardware manufacturer) ?

2) Is there any standard on how the fingerprint should be presented to
userspace ? Currently the only fingerprint driver that I could find is
the Siemens ID Mouse driver (drivers/usb/misc/idmouse.c), and it
delivers the fingerprint as an image in pnm format thru a device like
/dev/idmouse0 (cat /dev/idmouse 0 > /tmp/fingerprint.pnm). Is this the
best way to deliver the image to userspace, or should we have an
centralized for that, or a centralized device like /dev/fingerprint0
(which then wraps to the idmouse driver or any other)

There are also other interesting devices like this
(http://www.geeks.com/details.asp?invtid=FIN002&cpc=SCH) that are
cheap and probably would be a better subject. I know that there are
some standards (something related to the resolution of the readers),
and some of the cheap ones don't meet some "high-profile security"
standards (I think from NSA or something like that). Maybe we should
also try any of those heavy-duty high-security gadgets too.

Another question: Is there any place (probably a webpage) where we can
see a list of hardware devices separated by category, and know if
there's already a driver for it (and the name/url of the maintainer)
or not, if there are plans to develop a driver for it or not, or to
form teams to develop it ? Like a webpage where I can browse and see
that the device X doesn't have any drivers for it (and people can go
and "vote" for a driver, so we can know which devices are most wanted
by users), and sign ourselves to develop it ? I think that it would be
cool. If there isn't anything like that, I can develop it myself and
somebody at kernel.org or another place could host it =]

Thanks,
Daniel

-- 
What this world needs is a good five-dollar plasma weapon.

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2006-07-06 21:40 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-06  4:48 Driver for Microsoft USB Fingerprint Reader linux
2006-07-06 12:26 ` Daniel Drake
2006-07-06 17:38 ` Alan Cox
2006-07-06 17:49   ` Joel Jaeggli
     [not found] <6vtYr-w2-5@gated-at.bofh.it>
     [not found] ` <6vFQ5-1iV-71@gated-at.bofh.it>
2006-07-06 21:39   ` Bodo Eggert
  -- strict thread matches above, loose matches on Subject: below --
2006-07-05 16:32 Daniel Bonekeeper
2006-07-03  6:51 Daniel Bonekeeper
2006-07-03  8:52 ` Daniel Drake
2006-07-03 10:04 ` Alon Bar-Lev
2006-07-03 18:04   ` Daniel Bonekeeper
2006-07-03 18:16     ` Alon Bar-Lev
2006-07-03 20:53       ` Daniel Bonekeeper
2006-07-03 21:45         ` Greg KH
2006-07-03 22:11           ` Daniel Bonekeeper
2006-07-03 22:26             ` Greg KH
2006-07-03 23:24               ` Daniel Bonekeeper
2006-07-03 23:29                 ` Greg KH
2006-07-04  0:04                   ` Daniel Bonekeeper
2006-07-04  0:13                     ` Greg KH
2006-07-05 17:58                     ` Daniel Drake
2006-07-05 18:09                       ` Daniel Bonekeeper
2006-07-05 18:55                         ` Daniel Drake
2006-07-05 19:46                           ` Daniel Bonekeeper
2006-07-05 23:23                             ` Daniel Drake
2006-07-06  2:05                               ` Daniel Bonekeeper
2006-07-06 10:35                                 ` Daniel Drake
2006-07-04  3:56               ` Daniel Bonekeeper
2006-07-04  3:58                 ` Greg KH
2006-07-03 22:35             ` Alan Cox
2006-07-03 22:49               ` Daniel Bonekeeper
2006-07-04  8:39                 ` Alan Cox
2006-07-05  4:01               ` Bill Davidsen
2006-07-05 15:55                 ` Daniel Bonekeeper
2006-07-03 11:44 ` Alon Bar-Lev
2006-07-03 15:00   ` Valdis.Kletnieks
2006-07-03 17:09     ` Alon Bar-Lev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox