密钥管理

​ 芯片生命周期设计的几个关键点包括:密钥管理,安全的密钥管理,保证了各个环节信息密文的导入,是安全性的根本性保障;固件管理,不同时期的固件密文导入,与固件的导入校验以及固件的升级更新;测试端口,芯片设计、使用的不同时期提供不同的测试功能,部分功能关闭或打开。本篇主要学习一下密钥管理过程涉及的一些概念

1.密钥分层管理结构

密钥的安全管理通常采用层次化的保护方式。密钥的分层管理机制通常把密钥分为三层,即:根密钥、密钥加密密钥和工作密钥,下层的密钥为上层密钥提供加密保护。

  1. 工作密钥; 对外表现密钥。

    工作密钥对本地保存的敏感数据和需要在不安全信道上传输的数据提供机密性、完整性保护,还可提供认证和签名等密码学服务。工作密钥直接被上层应用程序所使用,包括存储加密使用的密钥、预共享密钥、MAC密钥、签名私钥等。

  2. 密钥加密密钥;中间密钥。

    对工作密钥提供机密性保护的密钥,其自身受到根密钥的保护。对于较为简单、安全等级要求不高的密码应用系统,密钥加密密钥的职能可以直接由根密钥兼任。

  3. 根密钥

    位于密钥管理分层结构的最底端,用于对上层密钥(如密钥加密密钥)的机密性进行保护。

规则:密钥分层管理至少选择两层结构进行管理

说明: 密钥的分层管理机制最少把密钥分为两层,即:根密钥和工作密钥,根密钥为工作密钥提供加密保护。以下场景更倾向于选择三层的密钥管理机制:

  • 根密钥更新过程产生大量的加解密运算开销

    在应用系统中,如果使用根密钥直接保护工作密钥,根密钥的更新会导致所有受其加密保护的工作密钥需要全部使用更新前的根密钥解密,再重新使用更新后的根密钥加密。当工作密钥数量比较庞大时,对工作密钥的解密和加密操作将耗费大量的资源并影响系统的性能。

    在根密钥和工作密钥之间增加一层密钥加密密钥(KEK),密钥加密密钥对工作密钥进行加密保护,根密钥则对KEK进行加密保护。当根密钥更新时,只需要解密和重新加密KEK即可,由于KEK的数量远远小于工作密钥数量,对KEK的解密和加密操作不会消耗大量资源,对系统的性能影响很小。当KEK更新时,将需要被更新的KEK和被其保护的工作密钥都保存成历史密钥信息。应用系统需要解密被历史密钥信息加密的数据时,直接使用历史密钥解密即可。

  • 系统要求频繁的进行工作密钥更新

    典型的应用场景是工作密钥作为通信密钥(可能要求每次会话都被要求使用不同的密钥)。该场景下的工作密钥更新过程通常在线进行,需要使用工作密钥的下层密钥加密保护工作密钥的传输过程。

    如果使用根密钥直接保护工作密钥,根密钥加密的密文会频繁的在不安全的信道上传输,并易于被攻击者截获。攻击者可以通过分析大量密文破解根密钥。虽然通过更新根密钥的方法可以有效避免上述对根密钥的攻击,但根密钥更新周期一般较长,且一般使用手动方式更新,无论采用白盒密码还是基于密钥组件的根密钥保护方案,根密钥的更新操作都较为繁琐,难以广泛的适应该应用场景的要求。

  • 应用系统结构复杂

    如果应用系统中包含两个或者两个以上的子系统,各子系统之间的业务相互独立,每个子系统都为用户提供不同的服务。在这样的场景下,各子系统使用的密钥应该各不相同。如果不同的应用系统之间使用的工作密钥都被根密钥保护,根密钥的泄露将导致各子系统由密码机制保障的安全性完全失效。为解决上述问题,推荐使用三层密钥管理结构,在根密钥和工作密钥之间增加一层密钥加密密钥(KEK),为每个子系统分配各自的KEK,这样即使某一个子系统的KEK泄露,密码安全机制失效的威胁仅也限于该子系统内,不会影响其他子系统的安全性。


Example:密钥在真实芯片系统中,其派生可以是下图的方式:

2. 密钥生命周期

一个密钥在其生命周期中会经历多种不同的状态。密钥在其生命周期的各个阶段,都应满足一些基本的安全要求,以保障自身的安全性。

2.1 密钥生成

常用的密钥生成方式包括:

  1. 基于安全的随机数发生器
  2. 基于密钥导出函数
  3. 基于标准的密钥协商机制。(比如密钥交换协议/密钥封装机制KEM)
  4. 基于安全的密钥生成工具等。

利用随机数发生器、密钥导出函数、密钥协商等方式来生成密钥,均应遵循一些规则,以使产生的密钥足够安全。


Example:密钥在真实芯片世界的导入过程

2.2 密钥更新

工作密钥及密钥加密密钥在使用过程中,都应保证其可以更新。对于根密钥暂不要求必须支持可更新。密钥可更新才能保证密钥使用的安全,原因如下:

  1. 密钥使用时间越长,攻击者花费精力去破解它的诱惑也越大,这使得密钥被破解的风险也越大;
  2. 密钥加密的数据量越多,攻击者能够获取到密文的数据机会也越大,而对被同一个密钥加密的多个密文进行密码学分析相对比较容易,导致密钥越容易被破解;
  3. 如果密钥已经泄露,那么密钥被使用的时间越久,损失越大。

密钥的更新一般有如下两种方式:

  1. 系统定期自动更新密钥。

    执行密钥更新时,系统根据密钥生成的规则,重新生成新密钥,同时使用旧密钥解密已加密的数据,并使用新生成的密钥重新加密,同时销毁旧密钥;对于加密数据量很大的场景,可以考虑保留旧密钥,用于解密旧密钥加密的数据,同时使用更新后的密钥加密新数据。此方式适用于系统可自主生成密钥的场景。

  2. 管理员手动更新

本文结束啦感谢您的阅读