指纹扫描仪的输出是什么?是否有任何确定性的识别信息?

What is the output of a fingerprint scanner? Is there any deterministic identifying information?

我正计划从一个人的确定性识别信息中生成一组 public/private 密钥,并计划使用指纹。

因此,我的问题是:指纹扫描仪的输出是什么?是否有任何我可以使用的确定性输出,或者它是否总是 "confidence level" 的问题?即我是否总是得到一个 "number" 如果与数据库完全匹配,将允许访问,或者我宁愿得到一个数字,如果 "close enough" 与数据库中的存储值相匹配,则允许访问,基于高度的置信度,而不是完全匹配?

我很确定第二个选项是答案,但只是想仔细检查一下。有没有办法获得某种确定性输出?我希望每次都重新生成密钥,而不是实际存储指纹数据。这样一来,错误的指纹只会生成一个新的无用密钥。

有什么建议吗?

提前致谢。

指纹扫描仪寻找指纹上的线条分开或结束的特征。然后计算这些特征之间的距离和角度以尝试找到匹配项。

以下是关于该主题的更多阅读材料: https://www.explainthatstuff.com/fingerprintscanners.html 在 "How fingerprints are stored and compared" 部分。 来源是我能找到的最好的解释,但再仔细看看,似乎所有指纹扫描仪都使用某种算法来生成可以匹配的数据。

存储原始指纹不仅会占用更多 space 数据库,而且如果该信息被泄露,还会带来相当大的安全风险,因此除非绝对必要,否则不会真正这样做。

根据该算法判断,我会假设总有一些 "confidence level"。扫描之间的角度和距离永远不会 100% 相等,因此必须有一些回旋余地以确保即使手指更用力地压在扫描仪上或手指的角度略有不同,仍能找到匹配项。

基于此,我假设可以根据指纹生成密钥对,前提是您能想出一种方法使类似的扫描产生相同的信息。简单地四舍五入角度和距离可能有效,但可能会引入两个不同的人生成相同密钥对的情况,或者相同指纹的不同扫描很有可能生成多个不同密钥的情况。

出于几个原因我不建议这样做。

  • 指纹不是完全确定的。正如@ImSimplyAnna 回答中所建议的那样,您可能 'round' 结果以便有更多机会获得确定性结果。但这会显着减少 possible/plausible 指纹的数量,因此不符合密码算法的搜索 space 大小要求。最重要的是,与始终基于高质量随机数的现代算法的要求相比,我怀疑这种结果的熵在某种程度上较低。
  • 指纹不是秘密,我们一直将它们暴露给每个人,它们可以随时暴露给攻击者,并使用简单的相机存储在照片中。密钥必须是秘密,我们唯一知道可以存储秘密而不暴露它们的地方是我们的大脑(这就是我们使用密码的原因)。
  • 加密密钥的一项重要功能是,如果有理由相信当前的密钥可能已被泄露,则可以生成新的密钥。这是指纹做不到的。

这就是我反对它的原因。在全球范围内,我不鼓励任何人(包括我自己)编写 his/her 自己的密码算法,因为很容易搞砸它们。在您可以编写的所有内容中,这可能是最容易搞砸的事情,因为攻击者 如此恶毒 !
唯一的好方法,如果你不是一个熟练的专家,就是使用被广泛使用的库,因为它们是由专家编写的,并且它们已经受到许多攻击和破坏它们的尝试,所以那些仍然存在的将提供比非专家可以写的任何东西(或者基本上是一个人可以写的任何东西)更好的保护级别。
您还可以在加密堆栈交换上查看 at this question。他们还不鼓励 OP 使用经过战斗强化的算法或协议以外的任何其他东西。

编辑:

I am planning on generating a set of public/private keys from a deterministic identifying piece of information

实际上,一开始它并没有打动我(它应该打动我),但是不能从任何非随机的东西中生成密钥。从来没有。
你必须随机生成它们。如果不这样做,您已经向攻击者提供了比 he/she 想要的更多的信息。作为一名程序员并不能使你成为一名密码学家。您的用户信息受到威胁,请不要冒险(如果您不是密码学家,您实际上不会受任何影响)。