跳到内容

密钥管理速查表

简介

本密钥管理速查表旨在为开发人员提供在应用程序中安全实现加密密钥管理的指导。记录和协调以下规则及实践至关重要:

  1. 密钥生命周期管理(生成、分发、销毁)
  2. 密钥泄露、恢复与归零化
  3. 密钥存储
  4. 密钥协商

一般准则与考量

为组织的整体加密策略制定一个计划,以指导开发人员开发不同的应用程序,并确保每个应用程序的加密能力符合最低要求和最佳实践。

识别应用程序的加密和密钥管理要求,并映射所有处理或存储加密密钥材料的组件。

密钥选择

在给定应用程序中选择要使用的加密和密钥管理算法时,应首先了解应用程序的目标。

例如,如果应用程序需要安全地存储数据,则开发人员应选择支持静态数据保护安全目标的算法套件。需要传输和接收数据的应用程序将选择支持传输中数据保护目标的算法套件。

我们根据应用程序和安全目标,提供了在应用程序中选择加密套件的建议。应用程序开发人员通常通过检查库中可用的内容来开始开发加密和密钥管理功能。

然而,应分析应用程序的实际需求,以确定最佳的密钥管理方法。首先要了解应用程序的安全目标,这将驱动选择最适合的加密协议。例如,应用程序可能需要:

  1. 静态数据保密性和传输中数据保密性。
  2. 终端设备的真实性。
  3. 数据来源的真实性。
  4. 传输中数据的完整性。
  5. 用于创建数据加密密钥的密钥。

一旦了解了应用程序的安全需求,开发人员就可以确定所需的协议和算法。一旦理解了这些协议和算法,就可以开始定义支持应用程序目标的不同类型密钥。

有多种密钥类型和证书需要考虑,例如:

  1. 加密: 对称加密密钥, 非对称加密密钥(公钥和私钥)。
  2. 终端设备认证: 预共享对称密钥,受信任证书,信任锚。
  3. 数据来源认证: HMAC
  4. 完整性保护: 消息认证码 (MAC)。
  5. 密钥加密密钥.

算法与协议

根据NIST SP 800-57 第 1 部分,许多提供安全服务的算法和方案都使用哈希函数作为算法的组成部分。

哈希函数可在数字签名算法(FIPS186)、基于密钥的哈希消息认证码(HMAC)(FIPS198)、密钥派生函数/方法(NIST 特刊 (SP) 800-56A、800-56B、800-56C 和 800-108)以及随机数生成器(NIST SP 800-90A)中找到。经批准的哈希函数在FIPS180中定义。

NIST SP 800-57 第 1 部分承认三种基本类别的经批准加密算法:哈希函数、对称密钥算法和非对称密钥算法。这些类别由与算法一起使用的加密密钥数量定义。

美国国家安全局发布了一份报告《商业国家安全算法套件 2.0》,其中列出了预计即使量子计算取得进展仍能保持强大的加密算法。

加密哈希函数

加密哈希函数不需要密钥。哈希函数以一种从根本上难以逆转的方式,从(可能)大的输入中生成一个相对较小的摘要(哈希值)(即,很难找到产生给定输出的输入)。哈希函数用作密钥管理的构建块,例如:

  1. 提供数据认证和完整性服务(第 4.2.3 节)——哈希函数与密钥一起用于生成消息认证码。
  2. 用于数字签名生成和验证的消息压缩(第 4.2.4 节)。
  3. 在密钥建立算法中派生密钥(第 4.2.5 节)。
  4. 生成确定性随机数(第 4.2.7 节)。

对称密钥算法

对称密钥算法(有时称为秘密密钥算法)以一种在不知道秘密密钥的情况下从根本上难以撤销的方式转换数据。密钥之所以“对称”,是因为同一个密钥用于加密操作及其逆操作(例如,加密和解密)。

对称密钥通常为多个实体所知;但是,密钥不得泄露给未经授权访问受该算法和密钥保护的数据的实体。对称密钥算法例如用于:

  1. 提供数据保密性(第 4.2.2 节);相同的密钥用于加密和解密数据。
  2. 以消息认证码 (MAC) 的形式提供认证和完整性服务(第 4.2.3 节);相同的密钥用于生成 MAC 和验证它。MAC 通常采用对称密钥加密算法或加密哈希函数作为其加密原语。
  3. 作为密钥建立过程的一部分(第 4.2.5 节)。
  4. 生成确定性随机数(第 4.2.7 节)。

非对称密钥算法

非对称密钥算法,通常称为公钥算法,使用两个相关的密钥(即一个密钥对)来执行其功能:一个公钥和一个私钥。公钥可以为任何人所知;私钥应由“拥有”该密钥对的实体单独控制。尽管密钥对的公钥和私钥是相关的,但知道公钥并不会泄露私钥。非对称算法例如用于:

  1. 计算数字签名(第 4.2.4 节)。
  2. 建立加密密钥材料(第 4.2.5 节)。
  3. 生成随机数(第 4.2.7 节)。

消息认证码 (MAC)

消息认证码 (MAC) 提供数据认证和完整性。MAC 是数据的加密校验和,用于确保数据未被更改,并且 MAC 由预期实体计算。

尽管消息完整性通常使用称为错误检测码的非加密技术提供,但这些代码可能被攻击者更改,以实现对攻击者有利的行为。使用经批准的加密机制(例如 MAC)可以缓解此问题。

此外,MAC 可以向接收方保证数据的发起者是密钥持有者(即,被授权拥有该密钥的实体)。当只有两方共享 MAC 密钥时,MAC 通常用于向接收方认证发起者。

数字签名

数字签名用于提供认证、完整性和不可否认性。数字签名与哈希函数结合使用,并对任意长度的数据(受哈希函数确定的限制)进行计算。

FIPS186指定了经批准用于计算数字签名的算法。

密钥加密密钥

对称密钥封装密钥用于使用对称密钥算法加密其他密钥。密钥封装密钥也称为密钥加密密钥。

密钥强度

查阅NIST SP 800-57(密钥管理建议),了解特定算法实现中密钥强度的推荐准则。此外,还应考虑以下最佳实践:

  1. 确定应用程序对攻击的最小计算抵抗力。了解最小计算抵抗力时应考虑对手的复杂程度、数据需要保护的时长、数据的存储位置以及是否暴露。识别对攻击的计算抵抗力将告知工程师在数据生命周期内保护数据所需的加密密钥的最小长度。请查阅NIST SP 800-131a,以获取有关确定所选算法适当密钥长度的更多指导。
  2. 在加密密钥以进行存储或分发时,务必使用加密强度相等或更高的另一个密钥来加密加密密钥。
  3. 在使用椭圆曲线算法时,选择一个密钥长度,使其达到或超过系统中其他正在使用的算法的相对强度。请参阅NIST SP 800-57 表 2
  4. 为组织的整体加密策略制定一个计划,以指导开发人员开发不同的应用程序,并确保每个应用程序的加密能力符合最低要求和最佳实践。

内存管理考量

长期存储在内存中的密钥可能会“固化”。这可以通过将密钥分割成经常更新的组件来缓解。(NIST SP 800-57)。

根据NIST SP 800-57,密钥和/或证书存储的内存介质丢失或损坏,以及恢复计划。

按照NIST SP 800-57的建议,计划从密钥或证书生成、注册和/或分发系统、子系统或组件所需的内存介质可能损坏中恢复。

完美前向保密

临时密钥可以提供完美前向保密保护,这意味着服务器长期签名密钥的泄露不会影响过去会话的机密性。请参阅TLS 速查表

密钥用途

根据 NIST 的建议,通常情况下,单个密钥应仅用于一个目的(例如,加密、认证、密钥封装、随机数生成或数字签名)。

这有几个原因:

  1. 对两种不同加密过程使用相同的密钥可能会削弱其中一个或两个过程提供的安全性。
  2. 限制密钥的使用可以限制密钥泄露时可能造成的损害。
  3. 密钥的某些用途会相互干扰。例如,每种用途和目的所需的密钥持续时间。不同数据类型的保留要求可能不同。

加密模块主题

根据NIST SP 800-133,加密模块是实现安全功能(包括加密算法和密钥生成)并包含在加密模块边界内以提供密钥保护的硬件、软件和/或固件的集合。

密钥管理生命周期最佳实践

生成

加密密钥应在符合至少FIPS 140-2标准的加密模块内生成。为便于解释,可将生成密钥的加密模块视为密钥生成模块。

密钥生成模块所需的任何随机值应在该模块内生成;即,生成随机值的随机比特生成器应在生成密钥的、符合至少FIPS 140-2标准的加密模块内实现。

出于保护目的,硬件加密模块优于软件加密模块。

分发

生成的密钥应通过安全通道传输(如有必要),并由其相关的加密算法在至少符合FIPS 140-2标准的加密模块内使用。有关本节建议的更多详细信息,请参阅NIST 特刊 800-133

存储

  1. 开发人员必须了解应用程序中加密密钥的存储位置。了解密钥存储在哪些内存设备上。
  2. 密钥必须在易失性和持久性内存上受到保护,理想情况下应在安全加密模块内处理。
  3. 密钥绝不应以明文格式存储。
  4. 确保所有密钥都存储在加密保险库中,例如硬件安全模块 (HSM) 或独立的加密服务。
  5. 如果您打算将密钥存储在离线设备/数据库中,则在导出密钥材料之前,请使用密钥加密密钥 (KEK) 加密密钥。KEK 的长度(和算法)应与受保护密钥的强度相等或更强。
  6. 确保密钥在存储时应用了完整性保护(考虑支持加密和消息认证码 (MAC) 的双用途算法)。
  7. 确保标准应用程序级代码绝不以任何方式读取或使用加密密钥,并使用密钥管理库。
  8. 确保密钥和加密操作在密封的保险库内完成。
  9. 所有工作都应在保险库中完成(例如密钥访问、加密、解密、签名等)。

有关存储密钥等敏感信息的更完整指南,请参阅秘密管理速查表

托管与备份

使用丢失的加密密钥加密的数据将永远无法恢复。因此,应用程序必须包含安全的密钥备份功能,特别是对于支持长期数据存储的静态数据加密的应用程序。

备份密钥时,请确保用于存储密钥的数据库使用至少通过FIPS 140-2验证的模块进行加密。在密钥丢失或损坏的情况下,托管密钥材料有时可用于调查和重新向用户提供密钥材料。

切勿托管用于执行数字签名的密钥,但应考虑托管支持加密的密钥的必要性。通常,托管可以由提供证书和密钥的证书颁发机构 (CA) 或密钥管理系统执行,但在某些情况下,必须实现单独的 API 以允许系统为应用程序执行托管。

责任与审计

责任涉及在加密密钥的整个生命周期中识别那些有权访问或控制加密密钥的人。责任是一种有效的工具,有助于防止密钥泄露并在检测到泄露后减轻其影响。

尽管最好没有人能够查看密钥,但密钥管理系统至少应记录所有能够查看明文加密密钥的个人。

此外,更复杂的密钥管理系统可以记录所有被授权访问或控制任何加密密钥的个人,无论是明文还是密文形式。

责任提供三个显著优势:

  1. 它有助于确定泄露可能发生的时间以及可能涉及的个人。
  2. 它倾向于防止泄露,因为有权访问密钥的个人知道他们的密钥访问是已知的。
  3. 在从已检测到的密钥泄露中恢复时,了解密钥的使用位置以及受泄露密钥保护的数据或其他密钥非常有用。

某些原则已被证明有助于强制执行加密密钥的问责制。这些原则可能不适用于所有系统或所有类型的密钥。

适用于人类控制的长期密钥的一些原则包括:

  1. 唯一标识密钥。
  2. 标识密钥用户。
  3. 标识密钥使用日期和时间,以及受保护的数据。
  4. 标识受对称密钥或私钥保护的其他密钥。

应在密钥管理系统上执行两种类型的审计:

  1. 应定期审计为支持安全计划而制定的安全计划和程序,以确保它们继续支持密钥管理策略(NIST SP 800-57 第 2 部分)。
  2. 应定期重新评估所采用的保护机制,以确定它们提供的安全级别以及未来预期的安全级别,并确保这些机制正确有效地支持相关策略。

应考虑新的技术发展和攻击。更频繁地,应审查使用、操作和维护系统的人员的行为,以验证他们是否继续遵循既定的安全程序。

强大的加密系统可能因宽松和不当的人为操作而受到损害。应记录并审查高度异常的事件,作为系统尝试攻击的可能指标。

密钥泄露与恢复

密钥泄露具有以下影响:

  1. 通常,未经授权披露用于提供保密保护(即通过加密)的密钥意味着该密钥加密的所有信息都可能被未经授权的实体泄露或知晓。证书颁发机构的私有签名密钥的披露意味着攻击者可以创建欺诈性证书和证书吊销列表 (CRL)。
  2. 密钥完整性受损意味着密钥不正确——要么密钥已被修改(无论是故意还是意外),要么已被替换为另一个密钥;这包括密钥的删除(不可用)。用于提供完整性的密钥的替换或修改会使所有受该密钥保护的信息的完整性受到质疑。这些信息可能由知道该密钥的未经授权实体提供或更改。替换将用于(稍后)加密数据的公钥或秘密密钥,可能允许未经授权的实体(知道解密密钥)解密使用加密密钥加密的数据。
  3. 密钥的用途或应用程序关联受到损害意味着密钥可能被错误地用于其他目的(例如,用于密钥建立而非数字签名)或用于错误的应用程序,并可能导致受密钥保护的信息泄露。
  4. 密钥与所有者或其他实体的关联受损意味着无法确保其他实体的身份(即,不知道其他实体是谁)或信息无法正确处理(例如,使用正确的密钥解密)。
  5. 密钥与信息的关联受到损害意味着根本没有关联,或者关联的是错误的“信息”。这可能导致加密服务失败、信息丢失或信息安全受到威胁。可以采取某些保护措施,以尽量减少密钥泄露的可能性或后果。其影响类似于勒索软件,只是你无法支付赎金并取回密钥。

通常涉及以下程序:

  1. 限制对称密钥或私钥处于明文形式的时间。
  2. 防止人类查看明文对称密钥和私钥。
  3. 将明文对称密钥和私钥限制在物理保护的容器中。这包括密钥生成器、密钥传输设备、密钥加载器、加密模块和密钥存储设备。
  4. 使用完整性检查来确保密钥的完整性或其与其他数据的关联未受损害。例如,密钥可以被封装(即加密),以便检测对封装或关联的未经授权修改。
  5. 采用密钥确认(参见 NIST SP 800-57 第 1 部分 第 4.2.5.5 节)以帮助确保确实建立了正确的密钥。
  6. 建立一个问责系统,跟踪对明文形式的对称密钥和私钥的每次访问。
  7. 对密钥提供加密完整性检查(例如,使用 MAC 或数字签名)。
  8. 对签名数据使用可信时间戳。i. 密钥不再需要时立即销毁。
  9. 制定泄露恢复计划,特别是在 CA 泄露的情况下。

泄露恢复计划对于在密钥泄露事件中恢复加密安全服务至关重要。泄露恢复计划应被记录并易于访问。

泄露恢复计划应包含:

  1. 需通知人员的身份和联系信息。
  2. 执行恢复操作人员的身份和联系信息。
  3. 重新密钥化方法。
  4. 所有加密密钥及其用途的清单(例如,系统中所有证书的位置)。
  5. 对所有相关人员进行恢复程序的培训。
  6. 支持恢复程序所需所有人员的身份和联系信息。
  7. 强制执行密钥吊销检查的策略(以最小化泄露的影响)。
  8. 重新密钥化操作的监控(以确保对所有受影响的密钥执行所有所需操作)。
  9. 任何其他恢复程序,可能包括:
    1. 设备物理检查。
    2. 识别因事件可能泄露的所有信息。
    3. 识别因签名密钥泄露而可能无效的所有签名。
    4. 如果需要,分发新的密钥材料。

信任存储

  1. 设计控制措施,以保护信任存储免受第三方根证书的注入。访问控制基于实体和应用程序进行管理和强制执行。
  2. 对存储在信任存储中的对象实施完整性控制。
  3. 未经认证和授权,不允许从信任存储中导出密钥。
  4. 建立严格的策略和程序,用于将密钥材料从应用程序导出到网络应用程序和其他组件。
  5. 实施安全的信任存储更新过程。

加密密钥管理库

仅使用声誉良好、维护和更新良好,并经过第三方组织(例如NIST/FIPS)测试和验证的加密库。

文档