Mac OS X用のTwitterクライアントを作成していますが、コンシューマの秘密があります。私の理解では、このsecretキーは共有しないでください。問題は、次のように文字列リテラルとしてアプリケーションに入れて使用することです。
#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW"
[[QQTwitterEngine alloc] initWithConsumerKey:QQTwitterConsumerKey consumerSecret:QQTwitterConsumerSecret];
アプリケーションのバイナリのデータセクションにあります。ハッカーはこれを読んだり、アプリケーションを分解したりできます。
コンシューマシークレットを安全に保存する方法はありますか?暗号化する必要がありますか?
本当の完璧な解決策はありません。あなたが何をしても、それを専門とする誰かがそれを盗むことができます。
Twitter/iPhone/iPad/Android/mac/etc。そこに秘密鍵があります、彼らはおそらくどういうわけかそれを覆い隠しただけでしょう。
たとえば、別のファイルや文字列などに分割できます。
注:16進エディタを使用すると、ASCII文字列をバイナリで読み取ることができます。これが最も簡単な方法です。それをさまざまな部分に分割するか、関数呼び出しを使用して秘密鍵を作成することにより、通常、そのプロセスがより困難になります。
Base64エンコードして難読化することもできます。または、より良いアイデアgenerate単に格納するのではなくキー-次のように記述します。
char key[100];
++key[0]; ... ; ++key[0]; // increment as many times as necessary to get the ascii code of the first character
// ... and so on, you get the idea.
しかし、本当に優れたハッカーであれば、何があってもそれを見つけるでしょう。他の人の目からそれを本当に保護する唯一の方法は、安全なハッシュ関数を使用することですが、それからそれを取得することもできません:)
サーバーでのみ実行されないアプリケーションでは、秘密のAPIキーを使用しないでください。
それが完全に隠されている場合でも..いつでも、ネットワークを通過するデータをスヌープできます。そしてそれはあなたのデバイスなので、SSLを改ざんすることもできます(デバイスの信頼できるCAリストに追加されたカスタムCAによって作成された証明書を途中で使用する)。または、SSLライブラリにフックして、実際に暗号化される前にデータを傍受することもできます。
本当に遅い答え...
独自のサーバーをセットアップすると、秘密鍵を共有(つまり、埋め込み)せずに、Twitter上のユーザーがデスクトップアプリを承認するのに役立ちます。
このアプローチを使用できます。
ユーザーがデスクトップアプリをインストールすると、Twitterとサーバーに登録する必要があります*)*)アプリはサーバーにトークンリクエストURLの生成を要求します*)サーバーは生成されたURLをアプリに送信します*)アプリはユーザーに指示します承認URLに*)ユーザーがTwitterでアプリを承認し、生成されたPINに貼り付けます*)PINを使用して、アプリがトークンを取得します*)以降のすべての通信ではトークンが使用され、サーバーは関与しません
注:アプリは、サーバーのユーザー資格情報(例:IDとパスワード)を使用してサーバーにログを記録します。