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

时间:2016-03-25 14:46:06

标签: security encryption sandbox electron data-security

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

  

我希望存储私有数据,如私钥,私人数据等   在app中执行。像加密/解密数据一样执行。

或者

  

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

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

我不知道您正在使用的具体技术,因此我的答案将指出关键存储问题。

首先,两个大的评论:

  1. 即使有一些重型专用硬件(银行和其他关键系统也使用硬件安全模块-HSMs),总是存在将密钥丢失的风险。您选择做什么取决于您的钥匙的重要程度以及您愿意做多少保护。我会尽量避免提及涉及硬件的解决方案,因为对于大多数人来说,它们通常都是矫枉过正的。
  2. 但是,您可以遵循以下良好做法:https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet
  3. 现在,有人建议。无论你做什么,都不要将你的密钥存储在明文中(而且硬编码要少得多)。如果使用公钥加密,PKCS12文件(通常扩展名为.p12或.pfx)是存储数据的标准方法。它们通常受密码保护。

    在这里你遇到了一个问题:如果你有钥匙,你需要使用它。如果你使用密钥,它将在" plaintext"中,至少在RAM中。因此,您需要一种方法来启用访问,以使密钥尽可能隔离。如果操作是由用户触发的,那么事情就相当不错了,因为在使用密钥之前可以要求输入密码。

    但是,如果操作是自动执行的,则需要找到存储密码的方法。即使像某些PGP实现那样的安全软件也有这样的方法并不好:

    1. 在命令行中输入密码: command -password my-password 。这个,放入一个蝙蝠,工作。但密码是存储的,并且根据操作系统,甚至可以使用命令history
    2. 将其存储在一个文件中:至少您不要留下副本,但密码仍然是纯文本。
    3. 使用系统数据作为加密密钥对其进行加密:密码受到相对保护,但您失去了可移植性,并且访问计算机的攻击者不会被控件拦截。
    4. 在服务开启后询问密码:更合理,但并非总是可行(如果服务很关键,但只有一个人有密码,可用性可能会受到影响)。
    5. 花哨的事情可以通过阈值解密来完成,但对于那种情况来说可能也是太多了。
    6. 我没有提供每个选项的详细信息,因为您可以做的可能取决于您的框架允许的内容以及系统的使用方式,但我希望它有助于作为不同选项的参考。在任何情况下,都不会在您自己的上实施任何加密功能。糟糕的加密比没有加密更糟糕。

答案 2 :(得分:2)

在电子中存储数据的完美方式是这个包:https://www.npmjs.com/package/electron-data-holder

此包将数据存储在 JSON 文件中,但它使您能够对数据进行加密。

在文档中阅读更多内容

答案 3 :(得分:0)

避免在电子应用程序中存储私钥或服务器端详细信息,例如私钥。可以从app.asar文件访问Electron应用程序的数据和文件,而electronic根本不保护内容。电子中没有这种代码保护机制。但是NW.js支持源代码保护,您可以阅读here。因此,根据我的说法,在电子源代码中存储诸如签署证书或私钥之类的私人认证并不安全。

另一种方法是,您可以在Mac的钥匙串中使用node-keytar,在Windows中使用凭据管理器,而在Linux中使用本机api使用Gnom Keyring来存储这些数据。但是,这些凭据仍可供用户访问,并且对于存储私有令牌(即具有管理权限的GitHub私有存储库的令牌)没有意义。这取决于用户,如果他/她足够复杂以了解您在钥匙串,凭据管理器或钥匙圈中存储了什么,他们可能会滥用它或对您使用。所以最后的答案是,

请勿在电子源或使用节点键盘中存储凭据/私钥或管理令牌。