In this question,Mubashar询问是否使用C#将敏感信息安全地存储在内存中,并指向.NET中的SecureString类。是否存在可在node.js中执行此操作的现有类似工具?否则,这是使用可用节点资源实现此目的的方法吗?
答案 0 :(得分:1)
您可以使用闭包来限定私钥和salt 并且在该闭包内部有另一个用散列密码创建的闭包 让内部闭包返回一个接受挑战的函数(比如你的密码来解锁它)
function outer (key, salt) {
return function generator (password) {
var hash = gen_hash(key, salt, password);
password = undefined;
return function (challenge) {
var response = test_challenge(challenge, hash, key, salt);
return repsonse;
}
}
}
使用它:
var challenger = outer('my-key','salt')('password')
然后,当您想要检索加密密码时,您必须通过挑战
var password = challenger('my-unlock-code');
使用您喜欢的任何密码学库 这不是一个有效的例子,它只是一个关于如何使用闭包来确定敏感数据范围的例子。
答案 1 :(得分:0)
唯一的方法是使用类似Uint8Array
的类型化数组(Buffer
类只是一个薄包装器),并在使用后用null
或任何其他值填充它。
但是要考虑一些事情:
例如,当您获得凭据时,您很有可能将其作为JSON获取。在这种情况下,如果不进行拦截,那么任何努力都是徒劳的,这样请求主体就不会像任何Web框架那样存储在字符串中。
当您从文本文件中读取API密钥时,很明显为什么内存安全可能不是最大的问题。为此,应该考虑一个密钥库。
但是即使那样,您仍然不能真正确定没有泄漏。例如,我怀疑node.js streams
会自己清理。即使您手动覆盖它们,也可能因复制或系统API泄漏。甚至密码管理器也存在泄漏密码的问题。
总结:即使您考虑了所有因素,也很可能会发生无法避免的泄漏。