A-A+

加密狗、FIDO、U盾、税控盘的技术原理简要说明版

本文于2022年10月13日最后更新 个人博客

加密狗、FIDO、U盾、税控盘简述

我们在生活中基本都见过各种各样的验证工具,比如软件加密狗、网银U盾、财务税控盘、认证Ukey、电子签章Ukey等等。

但他们无一例外的都是使用定制的或者硬件厂商专有的API互联。虽然可以使用USB Server方案自由切换,但如果有机会统一那就好了。

下面张自然先讲一下以前复杂且功能单一的验证工具,在讲标准化的FIDO。当然受限于自身非相关行业从业人员,可能存在疏漏希望可以得到指正。

复杂且功能单一的验证工具

首先讲下身份验证的几种算法

主要分为软件防盗版(可在加密狗中运行部分代码)和身份认证(无算法、对称、非对称算法)两个大类

1、无算法(早期加密狗常用,简单但不安全)

加密狗内置ID和芯片ID,先将自定义用户名、密码写入加密狗存储器中(也可只写入密码),程序运行时读取加密狗的ID、用户名、密码并检查与服务端存储信息是否匹配。

2、内置TEA算法

使用对称算法方式,由服务器生成随机数发给客户端,让加密狗进行加密生成客户端验证码发送到服务端。服务端采用相同算法对随机数加密,与客户验证码比对。

只有在服务器加密密钥和锁中密钥一致时,加密结果才能相符。密钥由软件开发商自行设置。

3、内置SM2国密算法

使用SM2非对称国密算法,由服务器生成随机数发给客户端,让加密狗使用私钥对该随机数签名并提交给服务器使用公钥验签。

只有服务器公钥与设置在锁中的私钥相对应时,签名才能验证通过。锁中SM2私钥可由开发商自行设置。

目前国内银行U盾均采用此算法,从理论上来说税控盘、电子签名等也会采用此算法,无非数字证书不是CFCA。U盾中存放着由CFCA签发的个人数字证书并不可读取,银行端也记录着该证书。验证时,银行会向你发送由时间字符串、地址字符串、交易信息字符串、防重放攻击字符串组合在一起进行加密后得到的字串A

4、软件防盗版

可支持在加密狗中运行部分代码

古老的软件加密狗

加密狗是为软件开发商提供的一种硬件知识产权保护工具,正名加密锁,又称加密狗。

软件开发者可通过接口函数和加密狗进行数据交换,比如检查加密狗是否插在接口上、加密狗内存储(一般具有16K以上存储)信息是否经过授权。或者直接用加密狗厂家附带的工具加密自己的exe文件(俗称包壳)。

较新内置单片机版本也称为智能型加密狗,其中可自定义算法软件不再依赖于加密狗厂商SDK(相关算法软件写入单片机后不支持读出,这样就保证加密狗硬件无法复制)。

简单点想就是加密狗在存储中添加了一个.key文件。软件启动必须先校验key文件中内容才能正常使用。

也有自带U盘的狗,用于存放驱动、说明书,或者用于下载驱动的软件。

目前理论可被破解的算法或工具

传统对称算法或无算法加密,理论上只要从内存中获得加密密钥就可破解通讯过程。目前非对称算法暂无办法。

以下为某宝提供的一些服务,可支持的设备懂得都懂。

1. 阿拉丁hasp 全系列( hsap hl 以上需要原狗)

2. SafeNet 圣天狗/super pro /UltraPRO/宏狗/微狗全系列/网络狗全系列

3. 深思洛克senseiii/标准版/加强版/精英版/网络版/深思4全系列

4. 彩虹天地mh/mf/dl/nh

5. 美国彩虹全系列 目前可以模拟,破解,部分无法复制!

6. 飞天诚信rockey4/rockey4plus/netrockey/rockey2 Rockey6 rockey7

7. 龙脉加密狗全系列

8. 东莞域天全系列

FIDO(Fast IDentity Online,快速身份验证联盟)

FIDO名义上是2012年7月成立,属于501(c)6非营利组织。由Yubico(就是卖yibikey那个公司)和谷歌共同发起,旨在提供一个免驱、通用的密码认证令牌。而且这种认证不依赖于任何中心服务器,完全基于公私钥/PKI体系。

FIDO1(此时还未完全标准化,缺失web端)

2014年12月发布的首个FIDO规范包含,通用认证框架(UAF)和通用第二因子(U2F)两个组件。

UAF(Universal Authentication Framework protocal,客户端API)

支持指纹、语音、虹膜、脸部识别等生物识别方式,服务器可设置单生物验证、单密码验证,生物+密码同时验证,增强账户安全性。目前windows、android、ios等生物识别均已支持FIDO,也就是说现有主流系统应用基本都采用FIDO调用硬件验证。

U2F(Universal Second Factor protocal,新名称CTAP1)

从名字看,他是为用户提供第二身份验证。比如要求将USB设备插入电脑、将卡片靠近NFC阅读器、扫描二维码、蓝牙(目前只发现谷歌Titan Security Key支持,IOS下非谷歌应用还不能用)

USB部分类似于国内银行带按键的U盾,验证时服务器生成随机数发给客户端,按下yibikey按键就会使用私钥对该随机数签名并提交回服务器使用公钥验签比对,只有服务器公钥与设置在锁中的私钥相对应时,签名才能验证通过。由于有设备保护,可选择不设置密码或者设置4位密码。

上面会产生一个问题,如果自己导入的私钥服务器又怎么知道对应的公钥呢。

FIDO2(联合W3C共同标准化)

2018年4月,FIDO联盟推出原规格升级版FIDO2。此版本中FIDO和W3C共同发布了Webauthn,因此名正言顺的统一了在线服务和用户设备端标准。

Webauthn(web身份验证,web端API,必须https或者localhost使用)

在原有UAF组件的基础上,由W3C发布定义为标准的web API。内置在浏览中支持FIDO认证,同时他提供了一个创建和管理公钥凭证的接口,并且可以与CTAP1、CTAP2验证器通信。

CTAP2(Client to Authenticator Protocol 2,客户端-认证器协议,认证器API)

在原有CTAP1的基础上,他允许作为身份验证的第一、第二因素。也就是可为用户提供无密码身份验证体验。

基于谷歌opensk自己做硬件

前期准备

1个nRF52840开发板和linux系统环境即可(opensk官方使用的Nordic,受支持的还有makerdairy),某宝种类繁多想避坑可以选择以上两款,想便宜可以选择众多国产的,当然是不是灵车还需要各位测试。如果手残导致变砖了,那还需要一个jlink编程器一般不需要买。

3D打印一个外壳(可选,模型见 https://www.thingiverse.com/thing:4132768 )

等待实际尝试,还没写完。

市场化硬件Yubikey

支持FIDO2, FIDO U2F, Smart card, OTP, OpenPGP 3

Smart card

暂时为空

OTP

otp验证码的意思是一次性验证码。OTP又称“一次性口令”,指只能使用一次的密码。一次性密码是根据专门算法,每隔60秒生成一个不可预测的随机数字组合,iKEY一次性密码在金融、电信、网游等领域被广泛应用,有效地保护了用户的信息安全。

OpenPGP 3

Pretty Good Privacy(PGP)是一个提供加密和认证的计算机程序。

PGP经常被用于签名、加密和解密电子邮件,以增加电子邮件通信的安全性。

参考资料

FIDO相关参考资料

https://fidoalliance.org/fido-%e7%9a%84%e8%bf%90%e4%bd%9c%e6%96%b9%e5%bc%8f/?lang=zh-hans

https://security.stackexchange.com/questions/220752/fido-and-fido2-differences

https://www.v2ex.com/t/860828

https://blog.csdn.net/u014142287/article/details/52931692

https://52sbl.cn/discussion/41736.html

https://docs.google.com/document/d/1SjCwdrFbVPG1tYavO5RsSD1QpJwj8_im6sl-VWjJ6k0/edit

https://blog.csdn.net/qq_16334741/article/details/123849361

https://blog.csdn.net/Kiruthika/article/details/123171351

加密狗相关参考资料

https://www.dgyzt.com/NewsDetail_1871349.html

https://www.usbdog.cn/anquan/

opensk相关参考资料

https://github.com/google/OpenSK

https://yadom.in/archives/diy-yubikey.html

  1. mym
    域名出售?

给张自然个人博客留言