5

我正在开发一个开源 javascript 应用程序,我正在尝试与第三方 API(特别是 github)进行交互。我试图只保留我的整个应用程序客户端,所以我真的没有服务器可以回退或存储隐藏文件。作为 OAuth 过程的一部分,我需要提供为我的 api 密钥提供的密钥。我不应该发布或共享此密钥。

我想出了以下解决方案:

  1. 使用三重 DES 和密码短语加密密钥。
  2. 将加密版本放在我的存储库中的某个地方。
  3. 当我需要通过 Oauth 进行身份验证时,提示输入密码并恢复密钥。
  4. 一旦知道,将机密存储在本地存储中以避免将来出现提示。

我本质上是在存储密钥的转换版本。我想这对我来说是我必须从用户那里获取密码而不是完整的密钥。它应该比随机字节更容易记住。

这足够安全吗?它不是一个超级关键的应用程序,但我想尽我所能保护我被告知不要分享的东西。有没有比 3DES 更好的方法来以可逆方式加密密钥?

4

2 回答 2

5

这个解决方案的问题是应用程序必须包含代码(可能还有密钥)来解密它。最好的解决方案是根本不放入存储库。

大多数应用程序将此类数据存储在版本控制软件忽略的配置文件中。然后包含一个带有假密钥的示例配置文件以及如何重命名文件和获取自己的 api 密钥的说明。

一个很好的例子是wordpress 的配置文件中的“Authentication Unique Keys and Salts”。部分。

于 2012-05-15T15:13:06.783 回答
2

这听起来足以保守一些秘密。虽然 Triple DES 有点过时了。

我会使用 X 轮 SHA-256 来散列密码,然后使用该散列作为 AES-256 密钥。

于 2012-05-15T14:57:18.993 回答