TinySSH 是一个使用 NaCl、TweetNaCl 的小型 SSH 服务器
项目范围与目标
- TinySSH 是一个极简 SSH 服务器,专注于小体积、静态内存使用以及更小的攻击面。
- 它使用 NaCl/TweetNaCl 进行加密,并且有意只实现 SSH 功能的一个子集。
与 Dropbear 和 OpenSSH 的比较
- 与 Dropbear 相比:
- TinySSH 更受限制:只支持基于密钥的认证、单一 AEAD 密码套件、单一椭圆曲线 KEX,不支持 RSA、不支持密码认证、不支持 X11/agent/端口转发,也没有像 OpenSSH 那样的密钥限制。
- Dropbear 目标是保持小巧,但仍然“功能丰富”,并且更接近符合 RFC 的 SSH。
- TinySSH 明确地用标准覆盖度和功能换取了简单性以及更小的攻击面。
- 有人认为 OpenSSH 已经能满足大多数需求,而且对于现代系统来说,包括 initrd 在内,其额外体积几乎可以忽略。
安全属性与设计
- TinySSH 不使用动态内存分配,并且所有内存都静态分配(<1 MB),据称这能降低风险。
- 它从设计上避免了“危险功能”,例如密码认证或基于主机的认证。
- 也有人对以下几点持怀疑态度:
- 约 60–100k “代码词”是否真的“易于审计”。
- 该项目使用“自己的加密库”。
使用场景:initrd、远程解锁、嵌入式
- 一些评论强调 TinySSH(以及 Dropbear/OpenSSH 的变体)适用于:
- 在早期启动阶段远程解锁加密磁盘(initramfs/dracut/mkinitcpio 钩子)。
- 小型静态用户态和嵌入式设备。
- 文中提到了多种用于自动或远程解锁的工具和方法(基于 Dropbear 的解锁器、Mandos、Clevis+Tang、基于 TPM 的方案),并围绕对启动链的信任以及威胁模型展开了争论。
- 缺少端口转发被一些嵌入式/远程场景视为缺点。
密码与设备注册
- 缺少密码认证会给共享或受限设备(打印机、路由器、汽车)带来实际问题。
- 建议的替代方案:由设备生成密钥,通过二维码或类似方式展示,然后用户安装自己的密钥。
许可讨论
- TinySSH 使用 CC0 1.0 许可。
- 一些评论认为 CC0 并不适合软件,因为它明确排除了专利/商标权利。
- 有人建议使用更宽松的软件许可证;也有人提出双重/多重许可。
- 早先 Creative Commons 的“终止”问题被提及,但评论者表示这并不适用于 CC0 本身。
更广泛的观点
- 有些人认为 TinySSH 是一个适合特定利基场景的“小而美”工具。
- 也有人认为,在 OpenSSH 已经成熟、部署广泛且安全记录良好的情况下,用 TinySSH 替换 OpenSSH 在总体上不太可能。