跳到主要内容

密钥安全

一般常见威胁密钥安全有几种场景:密钥中心化存储、密钥使用明文的方式存储、密钥丢失、密钥被泄漏、通信信道被监听等; 针对以上威胁密钥安全的场景, MPC-KMS 安全机制都提供相应的处理方式,确保用户的密钥安全,这些安全机制分别为:

  1. 密钥分片存储机制;
  2. 双层密钥保护机制;
  3. 定时更新密钥机制;
  4. 保证通信层数据完整性及安全机制;

密钥分片存储机制

MPC-KMS 使用 MPC(Secure Multi-Party Computation) 技术生成密钥,对密钥进行分片,并把分片保存在多个参与方用于增加安全性;同样签名的时候也是使用 MPC 技术在没有任何一方知道完整密钥的情况下生成一个标准的数字签名。这里产生的签名是一个标准的数字签名,与单方使用标准签名程序产生的签名相同,因此,它与任何区块链和数字资产兼容。

MPC 的安全保证即使除一个参与方外的所有参与方都被攻击者完全控制,攻击者也无法生成一个签名。

MPC-KMS 引擎支持任何签名方案,从而使其与流行的 ECDSA、EdDSA、Schnorr 算法以及基于哈希的签名、BLS 签名等兼 容。另外使用 MPC 签名看起来与区块链上的标准签名相同,省去了关于签名者的所有识别信息,使其无法被追踪。

双层密钥保护机制

MPC-KMS 使用双层密钥保护机制保护生成的私钥分片数据,使用 DEK(Data Encryption Key) 来对密钥分片数据进行加密存储,使用 KEK(Key Encryption Key) 对 DEK 进行加密。 KEK 一般是用户的口令,MPC-KMS 使用用户口令对 DEK 进行加密,然后产生一个加密的 DEK 文件提供给用户,用户使用这个加密的 DEK 文件和用户口令登录 MPC-KMS 系统,MPC-KMS 系统再使用用户口令(KEK)对加密的 DEK 文件进行解密,如果解密失败则启动服务失败,如果解密成功则使用解密后的 DEK 对密钥生成阶段生成的分片数据进行加密存储。

使用这种双层密钥保护机制除了满足安全需要外,还有几个额外的好处。

  1. 如果用户口令(KEK)丢失或者泄漏了,并不会威胁到 MPC-KMS 系统中存储的分片数据;
  2. 如果用户口令(KEK)丢失或者泄漏了,用户可以重新申请一个新的 KEK,MPC-KMS 系统使用这个新的 KEK 对 DEK 进行加密,然后产生一个新的加密 DEK 文件重新提供给用户,用户还可以正常使用之前存储的分片数据;

定时刷新密钥机制

为了加强密钥的安全性,密钥使用一段时间后要进行刷新,刷新代表重新生成一个新的密钥,其基本属性是从原来密钥中克隆出来的,比如密钥的大小、曲线类型、Key ID 等信息都跟原来密钥的一致。密钥刷新也是使用 MPC 技术实现从而保证其安全性。 MPC-KMS 系统让用户在密钥创建时或之后通过更新其定期刷新设置来配置定期刷新密钥时间,配置完成后,一旦启动密钥定期更新功能,MPC-KMS 系统就会根据配置的时间自动每隔 N 天自动刷新一次密钥。

保证通信层数据完整性及安全机制

MPC-KMS 使用 MPC 技术进行密钥生成、密钥刷新、签名等操作,由于 MPC 技术会涉及到多个参与方间相互通信,为了保证参与方之间的信道安全及通信数据完整性,MPC-KMS 系统使用 TLS(Transport Layer Security) 协议进行节点间通信。 另外 MPC-KMS 系统中涉及到的所有子模块,一旦涉及到网络通信,均使用 TLS 协议进行通信。