如何使用Electron存储私钥或安全信息/数据

Ank*_*iya 10 security encryption sandbox data-security electron

我正在使用电子开发跨平台的独立应用程序.

我希望存储私有数据,如私钥,私有数据,以便在应用程序中执行某些操作.像加密/解密数据一样执行.

要么

我想存储一些安全的信息,如用户密码,应用程序的专有数据

是否有任何可能的方式来存储这些安全信息和应用程序用户无法获得任何方式?

Tea*_*eak 7

有一个NPM模块是为Atom编辑器(应用Electron制作)制作的,名为Keytar.它使用本机OS API进行安全存储.例如.OS X上的钥匙串.

https://github.com/atom/node-keytar

  • keytar可能不是一个好的解决方案。数据可以被加密,但是可以通过其他任何用户区进程访问:https://github.com/atom/node-keytar/issues/88 (5认同)

小智 5

我不知道您使用的具体技术,所以我的回答一般会指向关键存储问题。

首先,有两个重要的说明:

  1. 即使使用一些重型专用硬件(银行和其他关键系统为此使用硬件安全模块 -HSM-),也始终存在密钥被盗的风险。您选择做什么取决于您的密钥有多重要以及您愿意为保护它付出多少努力。我会尽量避免提及涉及硬件的解决方案,因为它们对于大多数人来说通常是矫枉过正的。
  2. 但是,您可以遵循一些好的做法:https : //www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet

现在,一些建议。无论您做什么,都不要以明文形式(更不用说硬编码)存储您的密钥。如果您使用公钥加密,PKCS12 文件(通常带有扩展名 .p12 或 .pfx)是存储数据的标准方式。它们通常受密码保护。

在这里你面临一个问题:如果你有一把钥匙,你就需要使用它。如果您使用密钥,它将以“明文”形式存在,至少在 RAM 中。因此,您需要一种方法来启用访问,使密钥尽可能隔离。如果操作是由用户触发的,事情相对会好一些,因为您可以在使用密钥之前询问密码。

但是,如果这些操作是自动化的,则您需要找到一种存储密码的方法。甚至像一些 PGP 实现这样的安全软件也有一些不好的方法:

  1. 在命令行中询问密码:command -password my-password。这,放入蝙蝠,有效。但是密码会被存储,并且取决于操作系统,甚至可以通过命令使用history
  2. 将它存储在一个文件中:至少你不会留下副本,但密码仍然是明文。
  3. 使用系统数据作为加密密钥对其进行加密:密码相对受保护,但您失去了可移植性,并且无法通过控件阻止访问计算机的攻击者。
  4. 一旦服务开启就要求输入密码:更合理一点,但并非总是可行(如果服务很重要但只有一个人拥有密码,则可用性可能会受到影响)。
  5. 使用阈值解密可以完成一些奇特的事情,但对于这种情况,这也可能太多了。

我没有提供每个选项的详细信息,因为您可以做什么可能取决于您的框架允许的内容以及您的系统的使用方式,但我希望它有助于作为不同选项的参考。在任何情况下,都不要自行实现任何加密功能。糟糕的加密比根本没有加密更糟糕。