安全
保险库
以下步骤详细介绍了在保险库中存储密钥的过程。您还可以查看营销安全页面以获取相同内容。
步骤 1
npx dotenv-vault push
您运行 npx dotenv-vault push。您的请求已启动。
步骤 2
加密连接您的 .env 文件被加密并通过 SSL 安全地发送到 Dotenv 的内存服务器。
步骤 3
Dotenv 服务器此加密有效负载被解密,并在内存中短暂保存以完成后续步骤。之后,内存将被刷新。请放心,解密版本永远不会持久保存到 Dotenv 系统。
步骤 4
解析您的 .env 文件在内存中逐行解析。
各种语言和框架之间的 dotenv 解析器之间存在细微差异。到目前为止,Dotenv Vault 处理了 100% 的这些情况,我们继续添加测试用例以涵盖所有边缘情况。
步骤 5
密钥提取每个键值对(以及任何注释)在内存中提取。
步骤 6
密钥划分密钥被分成独立的密钥和值。这是故意的。它们将存储在单独的数据库中,以增强安全性。这样,如果攻击者以某种方式获得了对一个数据库的访问权限,他们将无法理解数据,因为他们只拥有拼图的一半。
步骤 7
AES-GCM 加密密钥被加密。值被加密。它们使用不同的主加密密钥进行加密。这样,如果攻击者以某种方式获得了对值解密密钥的访问权限,他们会发现数据毫无用处。他们将不知道密钥是否属于 Twilio 还是 AWS。
加密使用 AES-GCM 算法。它是
- 经过充分研究的
- NIST 建议的
- IETF 标准
- 由于专用的指令集,速度很快
此外,所有主加密密钥都按照未公布的计划进行轮换,进一步增强了安全性。
步骤 8
令牌化加密后的值被发送到 Dotenv Vault 以安全存储。令牌作为标识符返回。令牌在下一步中用于将密钥映射到值,以便以后进行安全读取操作。
保险库中包含多项安全措施。它们包括但不限于
- 与应用程序数据库分离的数据存储
- 无法通过互联网访问,所有外部连接都被阻止
- 需要加密客户端,这些客户端必须通过应用程序(它具有自己的额外加密层)进行连接
- 对连接到保险库的要求更加严格。TLS 1.0 无法用于连接。
- 存储在保险库中的密钥不仅在数据存储级别被加密,而且在每个数据存储条目中也被加密,正如您在上一步(步骤)中所见。
步骤 9
存储密钥部分与令牌最后,加密的密钥和令牌(代表加密的值)被放在信封中,并一起存储在应用程序数据库中。
步骤 10
成功 201向开发人员返回成功消息。
安全规范
以下是构建 Dotenv Vault 时采用的其他规范。
- Dotenv Vault 是一个与应用程序数据库分离的数据存储。这样,如果攻击者获得了对应用程序数据库的访问权限,他们将无法获得对保险库数据存储的访问权限。
- Dotenv Vault 数据存储无法通过互联网访问,所有外部连接都被阻止。这样,攻击者无法远程访问 Dotenv Vault 数据存储。需要加密客户端,这些客户端必须通过应用程序(它具有自己的加密层)进行连接。
- 对连接到 Dotenv Vault 数据存储的要求更加严格。TLS 1.0 无法用于连接。
- 存储在 Dotenv Vault 中的密钥不仅在数据存储级别被加密,而且在每个值中也被加密。这样,即使攻击者获得了对数据存储的访问权限,他们也无法理解加密的值。
- 保险库不存储密钥。它只存储值。密钥存储在应用程序数据库中,一个共享指针(在两个数据存储中)允许它们被识别为一对。这样,攻击者必须同时获得对应用程序数据库和 Dotenv Vault 数据存储的访问权限才能理解这些值。
- 用于加密密钥值的加密密钥会按照未公布的计划进行轮换。这样,攻击者可能会获得旧的加密密钥,但不会获得最新的密钥,从而阻止他们解密密钥值。
- 加密使用 AES-GCM 加密。它是一种经过充分研究、NIST 建议的 IEFT 标准算法。
- 如您所见,我们竭尽全力确保您的密钥安全。毕竟,我们也会在这里保存我们的密钥。