在 Termium,我们非常注重保护您的信息安全、以负责任的方式处理您的信息,并确保您拥有控制权。说得容易做的难,我们之所以有信心保护您的信息安全,不止出于我们团队的高度责任心与自律,更出于我们背靠强有力的加密算法。众所周知,试图通过对加密算法本身进行保密来确保安全性的行为是危险且愚蠢的,因此 Termium 选择使用先进的、公开的高强度加密算法。
# 我们如何保护您的信息安全?
# 注册/登陆
在注册、登陆流程中,我们依靠 OPAQUE 来保证您的账户密码安全——在所有流程中,您的密码都只会待在您的本地,它将不会存在于通信过程中,更不会存在于 Termium 的服务器上。得益于 OPAQUE 协议为我们提供了非凡的 aPAKE 能力,使得任何人(包括我们在内),都无法从数据库中反推出您的账号密码,除此之外,攻击者也无法通过抓取您的数据包(尽管您的数据包已经受 TLS 保护)以获取您的账号密码。
# 同步
在同步、分享流程中,您的所有数据(包括 Host 信息、私钥信息)都受到 AES-256 加密算法的保护。
当一个用户注册完成,这里我们假设为用户A,他将拥有一个属于个人密钥对(由客户端自动在本地生成),该密钥对的私钥(PrivateKey)由 MasterKey 保护,因为生成流程在本地处理,因此除了用户A,任何人都无法使用该私钥。
随后用户A创建 Group(或称为团队)时,会在本地生成一个团队的密钥对,团队公钥将会和团队的其他信息放在一起,而团队的私钥将会使用用户A的公钥加密后存在用户A的团队私钥钱包
内。
这意味着当用户A想要获得上图中团队B的秘密信息时,他(客户端)需要在本地使用 MasterKey 解密个人私钥(PrivateKey),然后用个人私钥
去解密自己的团队私钥钱包
内的使用个人公钥
加密后的团队B私钥,从而获得团队B的私钥明文,从而解密团队B的秘密信息。如下图所示:
首次使用时,客户端会要求用户A提供 MasterKey 并将其存入本地系统的 KeyChain(MacOS)或ProtectedData(Windows)中(依赖于系统提供的用户隔离的保险箱),后续需要使用 MasterKey 时,客户端将会直接从中调用。
当客户端需要解密 GroupB 的信息时,会从服务端获取加密后的 PrivateKey、从磁盘中获取加密的私钥、从 KeyChain/ProtectedData 中获取 MasterKey。(图中第一步)
之后客户端将会在程序内部进行解密流程:第一步,使用 MasterKey 解密加密后的用户私钥获得用户私钥;第二步,使用用户私钥解密加密后的团队私钥获得团队私钥;第三步,使用团队私钥解密加密后的 SecretData。至此,整个解密流程结束,客户端获得了团队的秘密信息,如 Host、密码、私钥。
当用户新增配置时,客户端将会使用相似的流程对秘密信息进行加密。
通过以上步骤,我们能够保证即使数据库遭到入侵(尽管不太可能发生,但是做好准备总不是坏事)、数据遭到盗取,也没有人能够获取您的任何秘密信息(除非他们知道您的 MasterKey)。
# 数据存储
未完待续······