web-dev-qa-db-ja.com

ソースコードでパスワード/キーを保護するにはどうすればよいですか

ソースコードにパスワードを含める必要がある場合、これをどのように保護する必要がありますか?これは純粋な例ですが、APIを使用しているアプリがあり、APIキーを公開したくないが、使用されているため、ソースコードに含める必要があるとします。ユーザーがまだ取得できない文字列をどのように効果的に使用できますか?サーバーに文字列を要求しないと不可能に思えます。

RE: 12行のRubyでスナップチャットの写真をクラックできるのはなぜですか?

16
Peter

短い答え:できません

配布しているパスワードを保護することはできません。いくつかの文字列の間でそれを非表示にし、他の操作を使用してパスワードを「カバー」する場合がありますが、最終的にはすべてをまとめて機能を動作させる必要があります。そして、ここがクラッカーがそれを取るところです。

この問題を解決する簡単な方法はありません。通常、これは、最良のセキュリティスキームを選択していないことを意味します。十分だと感じる場合は、この種のセキュリティは必要ないだけかもしれません。

そして、本当に、本当に、本当にそうする必要があるなら、結局のところ「あいまいさによるセキュリティ」を使わなければならないのであれば、クラックに時間がかかるほど良いでしょう。これが発生したときのために、いくつかの検出システムを用意することをお勧めします。

たとえば、「著作権侵害」の終結を意味するコード自体の中でセキュリティを実現する方法があったとしたら、コピープロテクションなどを使用して、この数年ゲーム業界を考えてみてください。

23
kiBytes

@kiBytesの答えは実際的な観点では正しいですが、追加したいと思います 最近の論文Amit Sahai による(理論的な)構築方法を示唆しています暗号的にリバースするのが「難しい」ブラックボックス難読化ツール。 (それに関するワイヤードの記事については ここ を参照してください)。

ただし、実装できる、または実装する必要があるとは限りません。これまでのところ、実際のソフトウェアで使用することは完全に非現実的であり、まだ適切に検証されていません。それでも興味深い。

8
Stephane

@kiBytesが言うように、ソースコード内のパスワードやキーを保護することはできません。私が追加したいのは(人々が一般的な問題を解決しようとしてこの質問にたどり着いた場合)、あなたが与える例(APIを使用するアプリ)では、アプリのソースコードにAPIキーを格納する必要がないことです。

通常、APIキーはユーザーが制御するサーバーに保存されます。 APIにアクセスするには、アプリがサーバーにリクエストを出し、サーバー自体がAPIにリクエストを出し、APIから取得した情報をアプリに返信します。

余談ですが、APIキーはバージョン管理にチェックインされている可能性があり、したがって安全でない可能性があるため、サーバーのソースコードにもAPIキーが格納されていないことが理想的です。

1
joegoldbeck