跳转至

safeStorage

允许对字符串进行简单的加密和解密,以便存储在本地机器上。

进程:主进程

该模块通过使用操作系统提供的加密系统,为存储在磁盘上的数据提供额外保护。各平台当前的安全语义如下所述。

[!NOTE] 同步 API(isEncryptionAvailable/encryptString/decryptString)已在 Electron 46 中移除。 请使用 isAsyncEncryptionAvailable/encryptStringAsync/decryptStringAsync;使用同步 API 加密的数据 可通过 decryptStringAsync 解密。

平台特定的密钥提供程序

  • macOS:您的应用的加密密钥以某种方式存储在 Keychain Access 中,可防止 其他应用程序在未经用户覆盖的情况下加载它们。因此,内容受到保护,免受其他用户以及在同一用户空间中运行的其他应用程序的影响。
  • Windows:加密密钥通过 DPAPI 生成。根据 Windows 文档:“通常,只有拥有与加密数据用户相同登录凭据的用户才能解密数据”。因此,内容受到保护,免受同一机器上其他用户的访问,但无法防止同一用户空间中运行的 其他应用程序访问。
  • Linux:加密密钥会生成并存储在机密存储中,具体取决于您的窗口管理器和系统配置,因此 通过 safeStorage API 保护的内容的安全语义会因窗口管理器和机密存储而异。可能有多个密钥提供程序:
  • org.freedesktop.portal.Secret:使用 Portal Secret D-Bus 接口获取特定于应用程序的机密。这是 Flatpak 等沙盒环境中首选的提供程序。
  • Secret Service API 和 KWallet:使用 freedesktop.org Secret Service API(例如 GNOME Keyring)或 KWallet 进行密钥存储。当前支持的选项为 kwallet、kwallet5、kwallet6 和 gnome-libsecret,可从桌面环境或 --password-store 命令行标志中选择。
  • 请注意,并非所有 Linux 配置都有可用的机密存储。如果没有可用的机密存储,使用 safeStorage API 存储的项目将不受保护,因为它们通过硬编码的明文密码进行加密。当 safeStorage.getSelectedStorageBackend() 返回 basic_text 时,您可以检测到这种情况。

请注意,在 macOS 上,需要访问系统 Keychain,并可能会提示用户。 如果 Linux 上存在密码管理工具,情况也是如此。

这些操作是非阻塞的,并支持密钥轮换(由 shouldReEncrypt 指示)和临时不可用处理(由 isTemporarilyUnavailable 指示)。

[!IMPORTANT] 在 macOS 上,您的应用应经过代码签名 才能使 safeStorage 保持一致的行为。如果没有有效且一致的签名, macOS 可能不会将您的应用的不同构建版本识别为同一应用程序, 这可能导致 Keychain 在每次更新时都重新提示用户授权。

事件

safeStorage 模块会发出以下事件:

方法

safeStorage 模块具有以下方法:

safeStorage.isAsyncEncryptionAvailable()

返回 Promise<boolean> - 解析为异步 safeStorage 操作是否可用加密。

异步加密器会在应用就绪后首次调用此方法、 encryptStringAsync 或 decryptStringAsync 时惰性初始化。 返回的 Promise 会在初始化完成后解析。

safeStorage.encryptStringAsync(plainText)

  • plainText string

返回 Promise<Buffer> - 表示加密字符串的字节数组。

safeStorage.decryptStringAsync(encrypted)

  • encrypted Buffer

返回 Promise<Object> - 解析为包含以下内容的对象:

  • shouldReEncrypt boolean - 刚刚从解密操作返回的数据是否应重新加密,因为密钥已轮换,或者有一个提供不同安全级别的新密钥可用。如果为 true,您应再次调用 decryptStringAsync 以获取新的解密字符串。
  • result string - 解密后的字符串。

safeStorage.setUsePlainTextEncryption(usePlainText)

  • usePlainText boolean

在 Linux 上,当无法为当前活动桌面环境确定有效的操作系统密码管理器时,此函数会强制模块使用内存中的密码来创建用于加密/解密函数的对称密钥。此函数 在 Windows 和 MacOS 上为空操作。

safeStorage.getSelectedStorageBackend() Linux

返回 string - 在 Linux 上选择的密码管理器的用户友好名称。

此函数将返回以下值之一:

  • basic_text - 当桌面环境无法识别,或提供了以下 命令行标志 --password-store="basic" 时。
  • gnome_libsecret - 当桌面环境为 X-Cinnamon、Deepin、GNOME、Pantheon、XFCE、UKUI、unity,或提供了以下命令行标志 --password-store="gnome-libsecret" 时。
  • kwallet - 当桌面会话为 kde4,或提供了以下命令行标志 --password-store="kwallet" 时。
  • kwallet5 - 当桌面会话为 kde5,或提供了以下命令行标志 --password-store="kwallet5" 时。
  • kwallet6 - 当桌面会话为 kde6,或提供了以下命令行标志 --password-store="kwallet6" 时。
  • unknown - 当在应用发出 ready 事件之前调用此函数时。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron