APIキーをWP7アプリケーションに安全に保存する方法を探しています。キーは文字列で、現在コードにハードコーディングされています(以下を参照)。リフレクタープログラムを持っている人なら、簡単にこれを見ることができることは知っています。このキーをアプリの一部としてパッケージ化するより良い方法はありますか?リソースはより安全でしょうか?
string key = "DSVvjankjnersnkaecjnDFSD44VDS23423423rcsedzcadERVSDRFWESDVTsdt";
(これは実際にはキーではありません;))
前もって感謝します。
コードの Safeguardデータベース接続文字列とその他の機密設定 をご覧ください。あなたの質問は、「アプリケーションソースコードのキーを隠す」セクションの下にあります。
抜粋:
アプリケーションでキーを定義する場合は、アセンブリを難読化するだけでなく、実際のキーバイトをソースコードに格納しないようにしてください。代わりに、暗号化アルゴリズム、キーサイズ、パスフレーズ、初期化ベクトル、ソルトなどの永続的な特性を使用してキー生成ロジックを実装します( の例を参照してください)対称を使用したデータの暗号化と復号化( Rijndael)Key )。これにより、間接層が追加されるため、アプリケーションバイナリからシンボルをダンプするだけではキーにアクセスできなくなります。キー生成ロジックとキー特性を変更しない限り、結果のキーは同じであることが保証されます。また、静的文字列をキー生成特性として使用せずに、オンザフライで構築することもお勧めします。もう1つの提案は、データストアと同じように、つまり適切なACLを適用して、アセンブリを処理することです。また、このオプションは最後の手段としてのみ使用してください。他のデータ保護手法がどれも機能せず、唯一の代替策は機密データを暗号化しないままにすることです。
私はこれらすべての回答を読みましたが、どこに配置するか、どのように難読化するかに関係なく、これを安全に埋め込む方法はないと思います。 XAP内にあり、アプリケーション内でデコードされている限り、いつでもハッキングできます。
妥当な程度の保護を備えたxap内にキーを出荷する必要がある場合、@ makaの答えが最善の策をもたらすと思います-できる限りそれを難読化します-しかし、これは安全になるとは思わない-つまり、あなたのモバイルバンキングアプリのためにこれをしてください!
または、本当にセキュリティが必要な場合は、アプリ内だけで操作するのではなく、Webサーバーも使用してください。たとえば、Facebookアプリを実行していて、Facebookの秘密鍵を何らかの方法で保護する必要がある場合、認証のためにユーザーをアプリからサーバーのWebページにリダイレクトする必要があります。そのWebページは、アクセストークンを取得するプロセスをユーザーに案内する必要があります。その後、そのアクセストークン(パブリックappidと共に)だけがアプリに戻る必要があります。そして、すべての呼び出しに伴う秘密鍵の知識を必要とするWebサービスの場合、おそらくすべての呼び出しがサーバーを経由する必要があると思います。
Api
キーを ProtectedData で暗号化し、実行時に復号化できます。これは、Windows Phoneでデータを暗号化する方法の良いチュートリアルです: Mangoでの暗号化
事前に暗号化してapp.configに保存することもできます。そして、それを読んでいる間、同じアルゴリズムを使用してそれを解読します。
DotFuscator を使用して、リフレクターを使用する機能を無効にすることができます。しかし、これでは再コンパイルせずにキーを変更することはできません。
以前は、他の(Web/Winformベースの)ソフトウェアで次の方法を使用しました。
それはおそらく答えではありませんが、それが提案であることを確認してください:
暗号化されたキーをデータベースに保存します。暗号化された「dbパスワード」をapp.configに保存します。