我有一台node.js服务器,它使用一对非对称密钥进行加密/解密.服务器约90%的功能依赖于主动加密和解密数据,或验证用这些密钥签名的JWT令牌.

For security reasons, it is always recommended to dispose, after usage, of any plain-text strings or Buffers where such keys are loaded in memory. However, given the massive usage of the keys, reading them from file every time becomes a huge performance bottleneck.
For DRY (Don't Repeat Yourself) reasons, it also makes you question why each function has to read the key files themselves every time.

My question is: how safe is it to load these keys in memory instead of reading them each time from file?
Would you be able to recommend any different approach? See code below:

100

import * as fs from "node:fs";

export const PRIVATE = fs.readSync("./private.key");
export const PUBLIC = fs.readSync("./public.key");

// in another file
import * as KEYS from "./keys";

function doSomething(data) {
  return JWT.sign(data, KEYS.PUBLIC);
}

VS

100

import * as fs from "node:fs";


function doSomething(data) {
  const PUBLIC_KEY = fs.readSync("./public.key");
  return JWT.sign(data, PUBLIC_KEY);
}

推荐答案

首先,你想知道它是否安全,而不是它是否安全.安全意味着,读取数据的行为不会损害应用程序.事实并非如此.

每次从文件中读取数据是否安全?安全在其广义上意味着一些数据由系统以确保integrityconfidentiality的方式生成available.因此,一方面是可用性的概念,另一方面是完整性和机密性的概念.

我们已经知道,每次阅读机密都会扰乱信息的获取.它是否提高了完整性和保密性,以至于值得这样做?嗯,您可以肯定地说,完整性保持不变--那里没有数据更改.

因此,唯一的问题是保密问题.我们是否得到了一些值得我们付出的东西?这里有一些威胁建模的作用.当你不想在记忆中保留秘密的时候,你害怕什么?有人进行内存转储并从您服务器的内存中提取机密?有人在你的服务器上远程执行代码并获得秘密的访问权?

你需要有管理员级别的特权才能进行内存转储.如果有人可以在你的应用程序中执行恶意代码,那么仅仅拥有一些临时的秘密不会为你节省太多.

根据这里的逻辑,我会简单地将秘密保存在内存中.如果我洞察到future 出现的新威胁,我还会更新威胁分析.

Node.js相关问答推荐

CloudTasksClient在Firebase Function % s onDocumentCreated中实例化时导致错误

如果非SQL函数在事务内部运行失败,PG-Promise事务会回滚吗?

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

如何在ejs模板中使用循环显示多个结果?

如何在Mongoose中调用动态Collection ?

使用参考中断Mongoose模型-Node.js

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

下一个API路由如何处理多个并发请求?

Next.js 路由不起作用 - 页面未正确加载

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

使用更新版本仍然找到包@angular/fire但不支持原理图

如何使用对象中的常量值验证字符串字段?

npm install 在 Mac 上的 Node-gyp 构建错误

BrowserRouter 无法渲染组件

使用mongoose 创建新文档并仅取回选定的字段

一个非常奇怪的JavaScript heap out of memory问题

在本地运行 Cloud Functions 会出现错误functions.config() 不可用

从 Node.js 应用程序查询 Heroku 托管的 Postgres 数据库时出现自签名证书错误

nodejs v10.3.0 的 gulp 任务问题:src\node_contextify.cc:629: Assertion `args[1]->IsString()' failed

yarn 和 npm 的主要区别是什么?