2017-05-04 4 views
0

最初に私はどちらのStack Exchangeサイトでこれを尋ねるのか分からなかったので、間違っていると私は謝ります。セキュリティ - デバイス上でリアルタイムでAPIキーを生成

モバイルアプリにAPIキーを保存する最も安全な方法について語っている記事で、関心のある方法の1つに、APIキーをローカルに生成し、サーバー上で同じ機能を持つ機能があります誰もあなたのコードをハックしてAPIキー文字列リテラルを取得することはできません。記事の内容は次のとおりです。

お使いの端末は、文字列リテラルを保護するという面倒な手間を省くことはできません。これは、リモートキー検証などのサービスで使用される非常に古い技術です。

クライアントは、キーを返す関数()を知っています。 バックエンドはクライアントに実装されている関数()を認識しています クライアントは関数()によってキーを生成し、これがサーバーに渡されます。 サーバーはそれを検証し、要求を処理します。 ドットを接続していますか?文字列(簡単に識別可能)を返すネイティブ関数を持つ代わりに、1と100の間の3つのランダムな素数の合計を返す関数を持たないのはなぜですか?あるいは、unixtimeで表現された現在の日付をとり、それぞれの異なる数字に1を加えた関数ですか?より高い程度のエントロピーを提供するために、使用されているメモリの量など、デバイスからのコンテキスト情報を取得するとどうなりますか?

今、私が知りたいあなたも、有効なAPIキーを思い付くために使用したのと同じアルゴリズムを使用してから、仮想的なハッカーを防ぐために何ですか?私の心の中で関数が(JavaScriptで書かれた)このようなものになります。

function generateKey() { 
    var key = 0 
    for(var i=0; i<4; i++) { 
     key *= Math.floor((Math.random() * 10) + 1); 
    } 
    return key // after encrypting it with unixtime as seed, for example 
} 

をこの機能が働くか愚かであることができないならば、それだけで文字通り頭に浮かんだ最初のことだ言い訳をしてください。だから、ハッカーは、あなたのコードをリバースエンジニアリングした後、同じ方法を実行し、サーバーが有効とフラグを立てるキーを思いついてもらえませんか?

答えに例を載せたい場合は、単純な「概念証明」の回答が必要なだけで、暗号化を外すことができます。

おかげ

答えて

1

ことをやってから攻撃を防ぐためには何もありません。攻撃者があなたのアプリをリバースエンジニアリングすることができれば、あなたがそこに保存した秘密を見つけることができます。

仮説的なリバースエンジニアが実際にあなたの秘密を見つけることは、できるだけ難しくする方法です。そのため、記事では、Javaメソッド(簡単に逆コンパイル可能)からネイティブメソッド(逆コンパイルは容易ではありませんが、使用している長い一見無作為なAPIキーによって識別できます)から動的に生成されたキー。

関連する問題