我正在使用电子开发跨平台的独立应用程序。
我想存储私有数据,例如私有密钥,私有数据以在应用程序中执行某些操作。执行像加密/解密数据。
或者
我想在应用程序上存储一些安全信息,例如用户密码、专有数据
是否有任何可能的方式来存储这些安全信息并且应用程序用户无法获得任何方式?
我正在使用电子开发跨平台的独立应用程序。
我想存储私有数据,例如私有密钥,私有数据以在应用程序中执行某些操作。执行像加密/解密数据。
或者
我想在应用程序上存储一些安全信息,例如用户密码、专有数据
是否有任何可能的方式来存储这些安全信息并且应用程序用户无法获得任何方式?
有一个为 Atom 编辑器(Electron 应用程序)制作的 NPM 模块,名为 Keytar。它使用本机操作系统 API 进行安全存储。例如。OS X 上的钥匙串。
我不知道您使用的具体技术,所以我的回答一般会指向密钥存储问题。
首先,有两个重要的说明:
现在,一些建议。无论您做什么,都不要以纯文本形式存储您的密钥(更不用说硬编码)。如果您使用公钥加密,PKCS12 文件(通常扩展名为 .p12 或 .pfx)是存储数据的标准方式。它们通常受密码保护。
在这里您面临一个问题:如果您有密钥,则需要使用它。如果您使用密钥,它将是“明文”,至少在 RAM 中。因此,您需要一种方法来启用使密钥尽可能隔离的访问。如果操作是由用户触发的,事情就比较好,因为您可以在使用密钥之前询问密码。
但是,如果这些操作是自动化的,则您需要找到一种存储密码的方法。即使是像一些 PGP 实现这样的安全软件也有一些不好的方法:
history
。我没有提供每个选项的详细信息,因为您可以做什么可能取决于您的框架允许什么以及您的系统的使用方式,但我希望它有助于作为不同选项的参考。无论如何,不要自行实现任何加密功能。糟糕的加密比没有加密更糟糕。
避免在电子应用程序中存储私有或服务器端详细信息,例如私钥。Electron 应用程序的数据和文件可以从文件中访问app.asar
,electron 根本不保护内容。在电子中没有这样的代码保护机制。但是NW.js
支持源代码保护,你可以在这里阅读。因此,根据我的说法,在电子源代码中存储私人认证(如签署证书或私钥)是不安全的。
作为另一种方式,您可以使用 Mac 的钥匙串中的node-keytar、Windows 中的凭据管理器和 Linux 中的 Gnom Keyring 使用本机 api存储这些数据。但是,这些凭证仍然可供用户访问,并且对于存储私有令牌(即具有管理权限的 GitHub 私有存储库的令牌)没有意义。这取决于用户,如果他/她足够成熟,可以理解您在 Keychain、Credential Manager 或 Keyring 中存储了什么,他们可能会滥用它或对您使用。所以最后的答案是,
不要将凭证/私钥或管理令牌存储在电子源中或使用 node-keytar。
在电子中存储数据的完美方式是这个包:https ://www.npmjs.com/package/electron-data-holder
此包将数据存储在 JSON 文件中,但它使您能够加密数据。
在文档中阅读更多内容