1
adoal 2022-01-26 22:48:38 +08:00
好新潮,居然用 RISC-V
|
3
thedrwu 2022-01-26 22:54:42 +08:00 via Android
yubikey 嫌太贵,之前有人用这个搞过 1$的 openpgp key 。看了一眼过程,没 3d 打印机打印壳。放弃
|
5
adoal 2022-01-26 23:00:21 +08:00 3
不是很建议用 CH340 ,一来这玩意需要装厂家的私有协议驱动,二来它不加外部闪存的话 USB 没有序列号字段(它的阉割版 CH341 甚至连加闪存放序列号的可能性都没有),换换槽插可能 COM 端口号就变掉了。最好是选一个用 CDC/ACM 协议的,并带序列号字段的。MCU 的 USB 协议栈一般都有 CDC/ACM 的 sample ,不过你担心协议栈实现不靠谱的话那不太好找,容易买到的大概只有 Holtek 的。
|
7
44670 OP @adoal 有一个新出的 CH343P ,内置 EEPROM 可以配置 VID/PID ,淘宝上 9.9 ESP32C3 开发板用的正好就是那个。
|
8
mineralsalt 2022-01-26 23:12:25 +08:00
没这个必要吧, 如果个人电脑数据都沦陷了, 那那那, 不用活了
|
11
rockyzhang 2022-01-26 23:28:23 +08:00
EdDSA 默认用了 SHA-512 吧,用不着再弄一个 SHA-256 的库了,好像 MCU 也带 SHA 硬件加速器和 TRNG
https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf |
12
44670 OP @rockyzhang 感谢提醒!
确实可以把 ed25519-donna 的 sha2 实现替换掉(之前以为 ed25519 用的是 sha3 )。 ESP32 自带了 SHA 加速器,不过应该不打算去用那个。 硬件 TRNG 利用了 RF 电路的无线噪声,似乎得初始化整个 WiFi 才可用。 目前用的是 esp32 bootloader 使用的 RNG ,熵源是内部的 ADC 电路。ESP-IDF 文档推荐在不用 WiFi 的情况下可以用这个。 |
13
shunia 2022-01-27 00:31:31 +08:00 19
每次看你们这些搞硬件的聊天,都有一种我妈看我写代码的既视感
|
14
november 2022-01-27 00:43:24 +08:00 via iPhone
ssh -i /u 盘 /.ssh/key user@domain
|
15
cweijan 2022-01-27 01:07:56 +08:00
666, 很酷的想法
|
17
lucifer9 2022-01-27 07:26:43 +08:00 via iPhone 1
不是,你们生成 ssh key 都不用 passphrase 的?
|
19
zliea 2022-01-27 08:49:53 +08:00
我觉得还是做一个手机蓝牙的 ssh key 吧。
讲道理有硬件一是不方便,二是绝大部分人都是把 Key 插在电脑上不动了,其实和扔计算机上没毛线区别。 如果担心 ssh key 被读取,ssh key 有加密。 |
21
ysc3839 2022-01-27 09:05:03 +08:00 via Android
@adoal 个人在用 HT42B534 的 USB 串口,这个是直接用 USB CDC 协议的。不选 CH340 是因为以前用的是 PL2303 的,然后厂家在新驱动里去掉了旧芯片的支持,用旧驱动时不时会蓝屏,最终只能直通进 Linux 虚拟机里用,超麻烦。
|
22
loading 2022-01-27 09:17:50 +08:00 1
前段时间做了个 canokey ,还没正式用,焊接难度爆表( t12 小 k 头)
https://github.com/canokeys/canokey-hardware |
24
lucifer9 2022-01-27 09:43:49 +08:00
@knightdf 麻烦在哪里呢,不管是 ssh-agent 还是 gpg-agent 不都挺方便的么,当然要是经常重启自己机器那当我没说
|
26
cnkuner 2022-01-27 10:31:06 +08:00
问一下,硬件出问题了怎么办,比如产品的 USB 挂了。
|
27
Dreax 2022-01-27 10:33:43 +08:00
@44670 https://github.com/cnlohr/espusb 有人做了纯软件 USB 不知道怎么样
|
30
ihipop 2022-01-27 10:53:32 +08:00 via Android
要是坏了,和所有机器失联。。
什么⊙∀⊙?备份一个秘钥在机器上?那有什么意义? |
31
CallMeReznov 2022-01-27 10:57:41 +08:00
|
32
jiezhi 2022-01-27 11:17:56 +08:00
不懂硬件,能不能用个虚拟磁盘(可加密)模拟这个 USB ?用的时候挂载,不用的时候卸载。
|
33
adoal 2022-01-27 11:25:55 +08:00 via iPhone 3
@jiezhi USB key 和 U 盘的区别。前者是个计算设备,私钥不出 key ,电脑上获取不到私钥内容,后者哪怕盘是加密的但文件总要被原样读入到电脑一次。
|
35
yolee599 2022-01-27 11:28:56 +08:00
使用串口还要安装驱动,USB CDC 的话也要驱动,而且换一个 USB 接口串口号就变了。最好用 USB HID ,免驱,通过 VID/PID 识别设备,不用关心串口号的问题
|
36
EPr2hh6LADQWqRVH 2022-01-27 11:33:02 +08:00
像这种设备能够很好抵御灰尘水淹撞击强磁静电吗。。
我的 AMD 显卡现在猫从旁边过就能挂逼,已经 PTSD |
37
adoal 2022-01-27 11:38:38 +08:00 via iPhone 1
@yolee599 串口号变的原因是握手时返回的设备 ID 里没有序列号字段,这个不难解决。至于驱动,Windows 10 已经带公版 sys 和 inf 了,7 和 8 里其实有 sys ,只是缺一个不挑 VID/PID 的 inf 而已,这个倒也也不难解决。
|
39
44670 OP @t123yh 软件的 USB 协议栈容易出现安全问题,iPhone 和 Switch 的 bootrom 都有翻车的历史。
|
40
44670 OP |
41
44670 OP |
42
adoal 2022-01-27 13:21:21 +08:00 via iPhone
@44670 但是看 C3 的 spec 里的说法,它的 CDC uart 好像是芯片内置的,而且是单一的 CDC 功能,所以可能并不是 SDK 里的软件实现
|
43
44670 OP @adoal C3 有两个 USB 硬件(不过只能同时使用一个),一个是硬件 USB JTAG+CDC ,另一个是给软件协议栈用的。
第一版硬件我用的是自带的 USBCDC ,然而它的问题非常多,在很多情况下都有可能把上位机或者下位机陷入死锁的状态。 那个 USB CDC 是用一个 FIFO 和 MCU 通信的,然而那个 FIFO 不管是空了还是满了都会把上下两端堵死。 所以下一版硬件我还是换成了外挂芯片的方案(这大概也是淘宝上的 ESP32-C3 开发板、包括乐鑫官方的,都用了独立 USB-UART 芯片的原因)。 |
46
lingex 2022-01-27 14:20:47 +08:00
XC6206 额定 200mA,
C3 WiFi 发送时最大要求 350mA, 未来扩展可能不太够哦 |
47
iamwho 2022-01-27 14:25:34 +08:00
把 ssh key 存入 keepass ,成本低至 0 元。
|
48
44670 OP |
49
xuboying 2022-01-27 14:44:26 +08:00
这个思路很 cool!
但是如果只是用来做 sshkey 认证,和已经使用了 2FA 的 ssh 认证相比,是不是并没有提高太多安全性? 有没有别的地方可以应用这个技术? |
51
hihanley 2022-01-27 15:00:06 +08:00
持续关注
|
52
leavic 2022-01-27 15:02:46 +08:00
我不用这类玩意的原因是不能备份,一旦硬件损坏极其操蛋。
|
54
44670 OP @xuboying 我也是第一次看到 ssh 也可以用 2FA ,但是感觉这样有点多余并且似乎没有解决问题(仍然是 Secret 明文存储在设备上,不过变成了多个)
|
55
starqoq 2022-01-27 15:26:19 +08:00
而且你买到的 CH343P 绝大部分是山寨的。没错,山寨芯片,只能用旧版驱动,一更新驱动就不工作了。
|
57
agagega 2022-01-27 15:32:46 +08:00
比较合理的验证方式是硬件 Key+二次验证( Windows Hello/Touch ID )
|
58
44670 OP |
59
dreampet 2022-01-27 15:37:40 +08:00
还有一个方案:
使用 ESP-8266 模块(比如,ESP8266-12F 价格 6 元), 然后通过软件协议栈( https://github.com/cnlohr/espusb)模拟 USB HID 协议,直接免驱使用 |
60
xuboying 2022-01-27 15:38:48 +08:00
@44670 #54 你启发了我考虑使用 TPM2.0 作为 sshkey 存储。https://donjon.ledger.com/ssh-with-tpm/
不管大家的需求如何,还是很赞赏你的思路,在程序员眼里感觉搞硬件很牛! |
61
44670 OP |
62
rockyzhang 2022-01-27 16:14:41 +08:00
@44670 TPM 一般都有认证流程的,都需要 EAL 4+的安全认证,ESP32 还远远不到,也就是拿了个 secure-boot 的东西,签名算法的时候可以被侧信道攻击,不过没有别人物理接触,还可以认为问题不大
|
63
xuboying 2022-01-27 16:23:26 +08:00
@44670 #61 好吧,持续关注
给一个建议。实现一个 firefox 或者其他浏览器扩展,让 firefox 的密码存储调用这个 usb 设别。并把密码保存在 usb 设备上,不知道是否可行。。。 |
65
adoal 2022-01-27 16:25:28 +08:00
@44670 理论上应该是 key 找不回了就应该生成新的,服务器端重置公钥,但实操中真遇到这种事就伤筋动骨搞死人了……甚至,按理说,在不使用硬件的情况下,都应该每个终端上生成自己独用的并加到服务器,而不应该把别的终端上的私钥拷出来……然并卵
|
66
44670 OP @rockyzhang 问题在于 TPM 检查的是操作系统内核的完整性,而不是用户身份,甚至不会检查操作系统的登录口令。即使操作系统内核是完整的,也无法避免上面运行恶意软件,所以感觉安全性还不如 passphase 保护的密钥文件。
并且 CPU 和 TPM 的通信多数情况下是明文的,有人简单嗅探一下就拿到了 Key 。 CPU 内置的 TPM 可以避免明文通信的问题,但是其它的问题还是存在。EAL4 只是认证芯片是否达到了设计目标,没有对固件做审计(好像 EAL6 会做),并且也不能保证整个安全体系就是没问题的。 Secure Enclave 至少可以强制指纹 /人脸认证。 ESP32 早期版本的安全启动存在侧信道漏洞,厂商声称新出的 ESP32 芯片缓解了侧信道攻击的问题,不过还没有人测试。感觉要完全防御侧信道攻击还需要很多工作。 |
67
44670 OP @xuboying 可以用 sha256(secretKey+网站域名)来给每个网站生成独立的密码!
不过 mozilla 最近似乎出问题了,到处给山寨币代言。我自己是打算逐渐从 firefox 换到别的浏览器。 |
68
44670 OP @adoal 如果真的真的需要备份的话,可以考虑硬件上加一个屏幕,提供一次显示助记词的机会。
但是这样成本又增加了,不太想做。 |
69
riiygh 2022-01-27 17:08:19 +08:00
用 pam_oath 是不是也可以。
|
70
crayygy 2022-01-27 17:57:31 +08:00
硬件 key 最怕的是不是硬件丢失这个问题...
|
71
XiLingHost 2022-01-27 18:31:46 +08:00
@crayygy 确实,做大了不方便携带,做小了容易丢
|
72
wooyuntest 2022-01-27 18:37:58 +08:00
@ztechstack yubikey 做 ssh 认证的时候,会要求用户去物理触摸一下 yubikey 来完成签名,否则 yubikey 不会签名。这样来防御远程调用一直插着的 key 来签名。而且如果是设定的时间窗口内第一次使用 key 来签名,在要求触摸之前,openpgpagent 还会要求用户输入 PIN 码来解锁 yubikey ,解锁以后并触摸 yubikey 才能完成签名。
|
73
mlboy 2022-01-27 18:56:33 +08:00
不懂就问,这和银行 u 盾原理一样吗?
|
74
parametrix 2022-01-27 19:17:14 +08:00
@mlboy 本质上是一样的
|
75
pmispig 2022-01-27 22:55:27 +08:00
硬件 key 损坏丢失不是什么问题。怕损坏可以配置多个硬件,并且预留一个 txt 私钥,放到 U 盘里锁起来。
丢失可以直接在服务器去掉这个 key |
77
xuboying 2022-01-28 00:10:57 +08:00
开个脑洞
既然 OP 这么在意 key 的安全,愿意制作硬件,干脆再更进一步,让硬件每隔一分钟算一个新的 sshkey ,服务器修改一下 pem 认证模块,支持动态 sshkey 认证,实现类似 4096 位长的 2fa 效果。 还可以更进一步修改一下 ssh 协议,服务器每隔一分钟请求客户端认证一次,失败就 kickout 。 |
78
ZeroClover 2022-01-28 11:07:03 +08:00
我选择直接 SSH Certificate ,基本不需要关心上述全部问题。
|
79
44670 OP 把 USB 串口芯片换成了 CH554 ,一个带 USB 功能的 8051 MCU ,价格还便宜一些。
|
80
rockyzhang 2022-01-28 12:20:57 +08:00
@44670 我记得是上一代不是侧信道问题,而是被 Fault Injection 了,后来找了 Riscure 做了 Secure-Boot 代码的加强。DPA 这块似乎没有说。
|
81
44670 OP @rockyzhang 原来如此。感觉侧信道还是很难防御的,在考虑要不要增加一块 ATSHA204A 。
|
82
laydown 2022-01-28 13:10:59 +08:00
ssh 上 2fa ,只需要带手机就行了,也不用多余的硬件去插本地机器物理端口,随便哪台联网机器哪个平台都能用。
楼主的是一种思路,但不觉得很实用。 |
83
knightgao2 2022-01-28 14:46:57 +08:00
做出来了踢我下,我来小白鼠
|
84
44670 OP @knightgao2 现在就可以在淘宝 9.9 元的 ESP32-C3 开发板上运行了。不过大概年后才能发货。
|
85
2NUT 2022-01-28 19:49:26 +08:00
很有意思表示关注
其实银行送的 u 盾 是一次加密硬件普及机会 |
86
SteveLee 2022-01-29 17:58:30 +08:00
看起来很有意思的项目,前两天整了个[Canokey]( https://blog.lyh.moe/2022/01/02/%E6%95%B4%E4%BA%86%E4%B8%AA%E5%B0%8F%E4%B8%9C%E8%A5%BF-Canokey/#more),这东西算是个 Yubikey 的平替。
OpenSSH 现在有 FIDO2 的支持,所以像是 Yubikey 这样的设备可以用来做 SSH 密钥。 不过不管是 Canokey 还是 Yubikey 还是太贵了,楼主这个项目成本很低,关注下 |
87
44670 OP 买的 9.9 元 ESP32C3 开发板到货了,成功刷入并开启加密。
|
88
zbinlin 2022-02-14 20:22:50 +08:00
涨价了吗?没搜到 9.9 的
|
90
44670 OP |
92
sobigfish 2022-02-27 18:30:58 +08:00
|
93
44670 OP |
94
naiba 2022-02-28 21:25:22 +08:00
硬件靠谱可以改称冷钱包了
|
97
wc7086 2022-06-19 17:34:37 +08:00
有没有考虑加上 gnupg
|
99
wc7086 2022-06-19 21:31:41 +08:00
还有一点,我觉得无线没必要用 wifi 或蓝牙,徒增功耗和体积,不如用 NFC 。而且 wifi/蓝牙的安全风险都比 NFC 大。
|