示例设备型号: YubiKey 5NFC
演示环境: windows 10 1909
Why
将密钥存储在U盘/电脑上,是一件很危险的事情,
因为文件可以很轻易的被访问到,
被人轻易的COPY走.PC上的程序很容易被人篡改,
付费软件可以被黑阔破解成免费软件,
同理,加解密软件也可能黑阔篡改逻辑,加入私货,使得计算结果不再可信.
How
- 能不能将密钥存储在一个 只能存不能读 的黑箱子中呢?
- 能不能将加解密程序和它的执行过程,也放在一个不容易篡改的黑箱中?
What
实际上已经存在这种东西了,
"PIV USBKEY 智能卡"就是这种黑箱子.虽然它们外形长得各式各样,
但是它们内在的,大致都具备这种黑箱功能.
可以暂时简单粗暴的,把它们(PIV USBKEY 智能卡)理解成同一类东西.
(特征:1有存储能力,可以存储证书和密钥; 2有计算能力,可以执行加解密算法)PIV是yubikey的功能之一
(严格的说PIV是一种标准/功能,而yubikey实现了PIV标准,是一种PIV设备)上手YubiKey的一个小技巧
YubiKey是一个强大多功能的设备,集成多种设备特性于一身,
但这也导致它变得复杂,让新用户有迷失和懵圈的感觉.
对于这个问题,我们只要做到,
用到它哪个特性,就只把它当成,单纯的那一类设备,
暂时只关注这种设备的内容,忽略它的其他模块与特性.
比如当前,就把你的YubiKey当成一个单纯的PIV智能卡即可,
FIDO OTP之类的事情,暂时不用想,以后用到再说.
(YubiKey的各个模块之间是独立的,互不干扰,只是恰好集成到了同一个身体里.)
YubiKey-PIV可以用在哪些地方?
涉及到证书 私钥之类的东西,PIV就能排上用场了
- Bitlocker
- EFS
- SSH
- 等等等等
...
使用PIV相关功能,需要先装yubikey的哪些软件?
https://www.yubico.com/products/services-software/download/
文件很多,但暂时只需要关注3个
- 一个驱动文件(YubiKey Smart Card Minidriver)
- 一个图形窗口的管理程序(YubiKey Manager ;graphic interface)
- 一个黑窗口的命令行工具(Yubico PIV Tool ;command line)
驱动是必须装的,
窗口程序提供基本的功能,
黑窗口命令行工具提供更多额外的功能,初次接触暂时可以不装.
64位win10用户,就下那个"YubiKey Minidriver for 64-bit systems – Windows Installer"
界面介绍
以windows为例,如图方式进入PIV页面
一共有3个选项:
第2个选项,就是前面所说的"黑箱/保险箱"一样的东西,可以存4个密钥对(型号为ybk 5nfc).
访问这些密钥对,需要先用专门的PIV密码进行认证,不然谁都可以访问了.
第1个选项,是设置和修改密码的地方.
第3个选项,是重置PIV密码和保险箱的地方.
先看一下设置密码的部分(Confgure PINs)
一共有3个码
PIN:
访问或修改证书密钥时,需要先输PIN码,至少6个字符,最多8个ASCII字符,输错3次被锁定,防止穷举爆破.PUK:
输错3次被PIN码被锁定后,可使用PUK码恢复PIN码,同样的输错3次被锁定,另外还可以禁用PUK码.
(被锁定会怎样我不知道,没试过,大概只能重置了吧,所以保存好PIN PUK很重要,不要走到这一步.)Management Key:
功能和PIN一样,可以二选一.(一个24字节的3DES密钥)官方说明文档
https://developers.yubico.com/yubikey-piv-manager/PIN_and_Management_Key.html
黑箱子部分(Certificates)
总结
简单粗暴的来说,
PIV部分就是提供了4个存储密钥的储物位,
总之密钥存到这里面就完事了.看到这部分,不理解公钥私钥证书是啥也没关系,
如果要用bitlocker,直接看bitlocker部分的教程就行.
4个选项页:
- 验证(Authentication)
- 签名(Digital Signature)
- KEY管理(Key Management)
- 卡验证(Card Authentication)
它们基础功能和操作都是一模一样的,存储密钥,只不过使用场景不一样.
每个页都具有相同的4种操作:
即管理密钥证书,生成/导入/导入/删除这4种操作,
- 生成:通过ybk,内部直接生成证书/密钥.(不可导出)
- 导入:在外部,比如在PC上用OpenSSL生成证书/密钥,再导入到ybk中.
- 导出:将存储在ybk内的证书导出到PC上.(无法导出私钥部分)
- 删除:~
(个人不建议直接生成密钥,建议在外部生成后做一个备份载入到yubikey,否则没法备份,yubikey丢了就完蛋了.)
分开单独介绍下场景区别:
验证(Authentication)
场景:系统登录 屏幕解锁 ssh wifi vpn curl
PIN:只请求一次,后续可能被重复使用.签名(Digital Signature)
场景:使用私钥进行签名的操作场景
PIN:每次操作都验证KEY管理(Key Management)
场景:单纯的用来存储密钥对
PIN:只请求一次,后续可能被重复使用.卡验证(Card Authentication)
场景:当需要物理手段进行验证时(如门锁)
PIN:通常不需要验证
参考文档:
https://www.wenjiangs.com/doc/i1qmhfu4q
https://developers.yubico.com/PIV/Introduction/