Wind_Mask的博客

;

关于Secret的沉思(4):技术(连载)

最后更新于

11 min read


前文讲述了一些抽象的策略,诚然还有一些问题未能讨论叙述。但是我想先将体系问题放一下,让我们来看一下常用的工具,技术。


各web服务,同步,隐私

不细微地对互联网时代的主流产品作考究是难以想到它们收集了多少数据的(当然也有我们自作的),比如如果手机打开了google服务,电脑使用chrome和google搜索,且不谈gmail,仅此就使google账号上含有大量的数据,从搜索记录,浏览记录到手机应用的启动,定位,甚至可以储存数年之久。(尽管我并不是那么在意,事实上,我多少有些故意为之)。

我在我的微软账号上不久前看见了数年前的手机照片,当时连onedrive是什么我都不知道,这不妨碍数据已经上传。

在此我已经不想谈及国内设备自带的云服务等等。

尽管实际意义可疑,至少各服务提供了相当的设置,全面的检查各web服务的隐私设置,关键在于尽可能不留下其他服务的痕迹,因为我并不希望一些web服务与另一些有公开的关联。如果你不希望它们有任何关联,那么你应该在客观上防止这种可能,而不是只是设置隐私。

就同步来说,onedrive在Windows上的体验是足够好的(相当于自然地实现了本地+云端两重储存),配合VeraCrypt1,即在onedrive中保存VeraCrypt加密文件(据我所知,onedrive大约是完全支持增量同步的),可谓是足够可靠的Secret备份方案,容量问题就看你了(拿来存密码,密钥其实根本不在乎容量)。

说到各种web服务,密码管理器问题自然就来了(除主要几个服务如谷歌微软支付,其他我都尽可能采用了随机密码,那么自然只能用密码管理器了)。


密码管理器

此处讨论不代表任何承诺,只是我个人的一种方案,具体可用性与安全性取决于你的需求和威胁模型。

一开始我是用浏览器的密码管理,诚然方便程度完全足够,但是安全上总是可疑,且强依赖于特定的第三方web服务,至多只能导出csv文件备份。而其他第三方密码管理在我看来只是改变了对哪个第三方的信任问题(也许密码管理器比google更可信),因而我故意采取了解耦的密码管理,也就是说,我不需要密码管理器本身具有云同步能力,而是通过其他办法实现,这提供了更多可用性和自由度,代价是复杂度。

我采用了KeePassXC2。这只是一个管理密码数据库的软件,并不提供任何网络功能(这正是某些安全需求需要的),通过浏览器扩展,手机端实现(是的,没有官方手机端,但有几个实现),其他云服务同步数据库文件(数据库本身是加密的),从而实现同步的密码管理。

目前的结论是比起浏览器自带的同步安全性当然更高,代价是要自己同步数据库,自动填充时要自己手动解锁数据库,但是不再依赖某种特定web服务,从而摆脱依赖。

事实上,KeePassXC还有其他一些功能,如数据库可以储存二重验证(但是如果要达到效果就需要单独维护一个2FA数据库,否则等于没有双重验证,因而不宜采取),可以接入ssh代理用于管理ssh密钥(这个功能倒是可以考虑,我采取的是gpg-agent从而把ssh密钥和pgp合为一体),可以用Yubikey解锁数据库。


PGP安全

请参见本系列下一期:PGP安全。


浏览器

在使用google生态下chrome的体验的确是良好的,现在我们抛开各家浏览器本身生态的问题,单就浏览器的问题来说。

浏览记录,搜索记录,书签的问题应该和浏览器本身的同步功能一并配置。

“浏览器指纹”是一种通过浏览器对网站可见的配置和设置信息来跟踪Web浏览器的方法,浏览器指纹就像我们人手上的指纹一样,具有个体辨识度,只不过现阶段浏览器指纹辨别的是浏览器。

浏览器指纹有很多参数,包括浏览器标头,分辨率,接受语言,浏览器扩展,时区等等。具体的防范请参见本系列以后。

让我们看看我在有必要但是又不极端的时候的配置吧:

  • Clear Cache:清除浏览器缓存

  • CanvasBlock:屏蔽一些js

  • ClearURLs:清理URL的追踪参数

  • 默认无历史经历,无Cookie

  • IP Whois:查看网站的IP归属

  • NoScript:不执行js

  • Timezone:随机时区

  • User-Agent:随机User-Agent

  • WebRTC:阻止WebRTC的泄露

这些尚且只是“不极端”的,进一步当然是tor启动。


MFA

各网络服务的MFA。

短信验证码我就不说了,没意思。

邮件验证码也就那样吧,评估后决定用那个邮箱,哪个地址别名转发。最过分的应该我之前也提过:我是有转发两次的地址的……但是其实不怎么用,没什么意义还有泄露风险,多重转发的意义不在于此。

然后是TOTP,手机上的验证器就是了。并不存在Keepass什么里,那样没意义了。但是备份也需考虑,和Recover Code什么的。

此外是支持较少的Passkeys,FIDO,WebAuthn这种的。目前windows,然后还有的是物理密钥。一般就是这两个,也就是我的设备或者我的物理密钥。支持的话感受确实不错,但是很少。


全盘加密

Windows BitLocker

windows下不用说是BitLocker。可配置的主要是,我手动考虑了系统驱动器的强度(指拉到AES256),然后是设置软件还是硬件加密。这里有一个大家可能比较熟识的问题,因为大部分人看到是默认设备加密,只是TPM自动解密,这种的只是防止拆硬盘下来而已……

TPM+加强PIN(甚至USB密钥,至于……)才是需要的。没有增强PIN然后说什么“BitLocker”攻破云云也有点……这里当然还是看微软的说明最好BitLocker 概述 - Windows Security | Microsoft Learn

防止rootkit,这就需要安全启动+BIOS密码或TPM等。当然我也没BIOS密码就是了:关闭安全启动反正也会触发TPM就是了。

TPM的加强PIN可防止暴力攻击PIN,即使TPM承诺了如此,我还是使用加强的PIN。分页文件的安全要确保系统驱动器已加密。DMA的配置当然是锁定此计算机时禁用新的 DMA 设备

防止对内存的攻击需要多用Hibernate而不是Sleep。

还有一些配置请参见配置 BitLocker - Windows Security | Microsoft Learn

Linux 全盘加密

后来用arch照着来了一套UKI+LUKS2的全盘加密理论上明文分区只有统一启动镜像即可,解锁方式三种:TPM+PIN,物理FIOD2密钥,Recover Key。其中TPM配置哪些测量寄存器需自己考察启动链。


SSH

我个人选择PGP转出的SSH,这样就可以全部存于物理密钥一体,当然配置ssh-agent有所麻烦。


Git仓库

按理这是白嫖不好说什么,但是dotfiles什么的又git又迫害妄想症,于是GitHub - AGWA/git-crypt: Transparent file encryption in git往里进——即使是私有仓库即使不是唉资本的Github,唉迫害妄想症。


Footnotes

  1. VeraCrypt

  2. KeePassXC