失去好比得到

https://www.douban.com/doulist/150186338/ https://movie.douban.com/doulist/150186338/  麦戴尔的过往时间 https://weibo.com/ttarticle/p/show?id=2309404762472379973715

导航

jar的智能调整

由于我一直在研究机器可读的旅行文件,我决定用支持NFC的智能手机(Android)来做一点概念验证。

这并且基,它提供了所有必要的底层细节。

正如我指来,电子护照的标准发生了很大变化,从无保护到BAC,再到EACv1、EACv2和SAC(取代BAC)。安全性仍然令人怀疑,因为大多数护照和检查系统需要向后兼容BAC。这种情况正在慢慢消失,但即使BAC消失,输入PACE协议的CAN(卡认证号)也足够了,因此该应用程序仍然可以进行微小的修改。

该应用程序的作用是:

  1. 建立NFC通信
  2. 使用预先输入的护照号码、出生日期和到期日期(目前硬编码在应用程序中)验证护照。注意,协议的低安全性是由于这种组合的低熵,暴力破解是一种选择,因为护照在连续失败后无法锁定。
  3. 读取强制数据组-护照中的所有个人信息,包括照片。在示例代码中,仅读取第一个数据组(DG1 ),个人标识符显示在屏幕上。读取数据组的方法如下:
    1
    2
    InputStream is = ps.getInputStream(PassportService.EF_DG1);
    DG1File dg1 = (DG1File) LDSFileUtil.getLDSFile(PassportService.EF_DG1, is);
  4. 执行芯片认证EAC的第一步,确保芯片不会被克隆——它需要存储在芯片受保护区域的私钥的所有权证明。

该代码有一些有问题的编码实践——例如InputStream处理(IDE最初不允许我使用Java 7,我也没有多努力),但我希望如果在实际项目中使用,这些问题会得到解决。

一个警告——对于Android来说,需要SpongyCastle(这是BouncyCastle安全提供者的一个端口)。然而,这还不够,因此两者都必须存在,某些算法才能得到支持。不幸的是,jMRTD在一个方法中硬编码了对BouncyCastle的引用,这导致了用于芯片认证的复制粘贴方法。

https://baa.yiche.com/DEUSdiandongpaoche/thread-41987541.html

EAC还有一个步骤——终端认证,这将允许应用程序读取指纹(是的,遗憾的是,这里有指纹)。然而,EAC使这一点变得更加困难。我实际上无法正确地测试它,因为芯片拒绝验证甚至有效的证书,但无论如何,让我解释一下。EAC依赖于大型基础设施(PKI ),其中每个参与国都有一个文档验证者CA,其根证书由所有其他参由DVCA签署的短期(1天)证书,用于检查系统(边境政策和自动门)。证书链现在包含所有国家的根证书,接着是DVCA证书,然后是检查系统证书。芯片必须验证这个链是有效的(通过验证证书上的每个签名确实是由发行者的私钥执行的)。芯片本身有自己国家的根证书,所以有了链的根,可以进行验证(这其实是第一步)。最后,为了确保检查系统证书确实由当前执行协议的一方拥有,芯片发送一个由终端签名的询问。

所以,除非发现碰撞,在链上附上假证书,否则不能轻易进行“终端认证”。除非某个地方的检测系统泄露了密钥对。然后,因为芯片没有时钟,即使证书是短暂的,它们仍然允许读取指纹,因为芯片不知道它们已经过期(它将时间与每次成功的证书验证同步,但这仅发生在通过机场边境控制时)。事实上,你也可以尝试用一个巨大的链来垃圾邮件芯片,它会在某个时候“崩溃”,也许它会做一些它通常不会做的事情,比如释放指纹。很明显,我没有那样做。

但该应用的重点不是滥用护照——可能有合法的用例允许从护照中读取数据,我希望我的样本代码对这一目的有用。

posted on 2022-06-28 00:40  失去好比得到  阅读(36)  评论(0编辑  收藏  举报