2012-05-15 9 views
5

オープンソースのjavascriptアプリケーションで作業しています。サードパーティのAPI(特にgithub)とのインターフェイスを試行しています。私はアプリケーション全体をクライアント側だけに保つようにしているので、隠されたファイルを元に戻すか保存するサーバーは本当にありません。 OAuthプロセスの一環として、私のapiキー用に提供された秘密鍵を提供する必要があります。私はこの鍵を公表したり、共有したりするつもりはない。公開リポジトリの秘密鍵を非表示にする

私は、次の解決策が出ている:トリプルDESとパスフレーズを使用して秘密鍵を暗号化

  1. 暗号化されたバージョンを私のリポジトリのどこかに置きます。
  2. Oauthで認証する必要がある場合は、パスフレーズの入力を求め、秘密鍵を回復してください。
  3. 知られている場合、今後のプロンプトを避けるために、ローカルストレージに秘密を保管してください。

私は基本的に、秘密鍵の変換バージョンを保存しています。私はこのすべてを買っていると思うのは、フルキーの代わりにユーザーからパスフレーズを取得しなければならないということです。ランダムバイトよりも少し覚えやすいはずです。

これで十分ですか?それは超重大なアプリではありませんが、私が共有しないことを守るために最善を尽くしたいと思います。可逆な方法でキーを暗号化する3DESよりも良い方法はありますか?

+0

クライアントサイドのOAuthは本当にgithubでサポートされていません。彼らは秘密鍵が表示されることを望まない。しかし、あまり好きではないapisを扱う場合は、まだ役に立つかもしれません。 – captncraig

+0

私はこのシナリオを本当に理解していません。キーを使用するクライアントを実行しているにもかかわらず、ユーザーからgithubへのキーを隠そうとしていますか?もしそうなら、あなたは安全にそれをすることはできません。決定されたユーザーはいつもこのキーを回復することができ、倫理的な観点からは、マシンに保存されている情報をその所有者から隠そうとするべきではありません。各ユーザーが独自のgithubキーを取得し、それを覚えておくより便利な方法を探しているだけであれば、あなたのソリューションは良好です。 – erickson

答えて

2

これは、何か秘密を保持するのに十分な音です。トリプルDESは少し古いですが。

パスフレーズをハッシュするためにXラウンドのSHA-256を使用し、そのハッシュをAES-256キーとして使用します。

+0

またはあなたが提示したように動作するアルゴリズムを提供する[SJCL](https://crypto.stanford.edu/sjcl/)のようなライブラリを使用してください。自分自身で何かを実装する暗号化に関しては、セキュリティ上の問題が発生することがよくあります。 – Robert

+1

SHA-256だけではなく、PBKDF2のような実用的な鍵導出アルゴリズムを使用して、うまく設計され、見直されていないようにしてください。例えば、キーの導出には塩を使用する必要があります。 – erickson

5

このソリューションの問題点は、アプリケーションがコードを解読するためにコード(場合によってはキー)を含んでいることです。最良の解決策はリポジトリに入れないことです。

ほとんどのアプリケーションは、このタイプのデータをバージョン管理ソフトウェアによって無視される設定ファイルに保存します。次に、偽のキーを含む設定ファイルの例とファイルの名前を変更し、独自のAPIキーを取得する方法について説明します。

この例の良い例は、「認証固有キーとソルト」のwordpress's config fileです。セクション。

+0

github-pagesでホスティングする場合、リポジトリはデプロイメントです。 2つを分ける方法はありません。 – captncraig

+0

それは興味深い問題です、私はキーを保護するための良い方法はないと思います。つまり、あなたは緩和を残しています。このアプリケーションには別のキーを使用してください。他のアプリケーションに影響を与えることなく破棄することができます。 – AaronAsAChimp

関連する問題