11

アプリ課金v3で使用するアプリの開発が完了しました。私のアプリは、データベースに挿入されている質問のリストを持っている試験ヘルプアプリです。私が心配しているのはセキュリティです。プロガードを超えて他にほとんどないからです。私のアプリは購入したアイテムの在庫を照会するので、購入の保存は問題ありません。

したがって、最初の問題は、誰かがアプリを逆コンパイルする可能性があることです(これは私が行いました)。プロガードを使用しても、それほど困難なくすべての質問を取得できます。

次は、アプリケーションの公開鍵です。これは私のアプリから簡単に取得でき、開発者ガイドによると、これは私が安全に保つべきものです。

しかし、私は実際にどのような形式のセキュリティを実装するかを知りません。または、私がセキュリティでどこまで行かなければならないかさえ。サーバーがなければ、すべてをデバイスに保持していると、完璧ではないことはわかりますが(それからはほど遠い)、少なくともハッカーを面白がらせるのではなく阻止してもらいたいと思います。

したがって、本質的に問題は次のとおりです。

どのタイプのセキュリティを使用する必要があり、どのように使用されますか?それを段階的に通過するリンクを私に向けるだけで、それは素晴らしいことだと理解できます。

どうもありがとうございます!

明確化:

関係するサーバーはありません。データはアプリに保存されます。在庫が(queryinventoryasyncメソッドを介して)照会されると、在庫が購入されたかどうかに関係なく返され、アプリが起動するたびに実行されます。アプリの請求自体は大丈夫だと思います。自分のアプリケーションについてもっと質問しています。アプリケーションの公開鍵-どういうわけかコピーを難しくするつもりですが、現在は15個の文字列に分割して、「追加」するだけです。それらは実行時に相互に接続されますが、それは1つの文字列として持つよりもほとんど優れていません。どういうわけか暗号化したいのですが、どうすればいいのかわかりません。

4

1 に答える 1

18

良い質問。

公開鍵を使用するには、デバイスで公開鍵が使用可能である必要があります。それがデバイスに来ると、それはもう実際には保護されていません。キー自体は秘密ではありませんが、より困難な作業になるように、キーの交換を可能にする必要があります。

できることは、いわゆるXOR暗号化を使用することです。これは、XOR暗号化および復号化メソッドの例です。

public static String xorEncrypt(String input, String key) {
    byte[] inputBytes = input.getBytes();
    int inputSize = inputBytes.length;

    byte[] keyBytes = key.getBytes();
    int keySize = keyBytes.length - 1;

    byte[] outBytes = new byte[inputSize];
    for (int i=0; i<inputSize; i++) {
        outBytes[i] = (byte) (inputBytes[i] ^ keyBytes[i % keySize]);
    }

    return new String(Base64.encode(outBytes, Base64.DEFAULT));
}

public static String xorDecrypt(String input, String key) {
    byte[] inputBytes = Base64.decode(input, Base64.DEFAULT);
    int inputSize = inputBytes.length;

    byte[] keyBytes = key.getBytes();
    int keySize = keyBytes.length - 1;

    byte[] outBytes = new byte[inputSize];
    for (int i=0; i<inputSize; i++) {
        outBytes[i] = (byte) (inputBytes[i] ^ keyBytes[i % keySize]);
    }

    return new String(outBytes);
}

必要なのは、パスワード文字列(String key)を選択し、それを使用して公開鍵(String input)を暗号化することです。クラスに保存できるこの暗号化されたキー。実際のキー値が必要な場合はxorDecrypt()、パスワードと公開(暗号化された)キー文字列を使用して呼び出します。パスワードは、コードのどこかに保存する文字列でもあります。私が言ったように、私たちはそれを実際に保護していませんが、見つけたり交換したりすることをより困難にします。

暗号化された公開鍵とパスワードを組み合わせる方法について、より高度なロジックを追加することもできます。これにより複雑さが増すだけですが、キーが復号化されないという保証はありません。いずれにせよ、GoogleはXOR暗号化が何もないよりも優れていることを確認しています。

Android 4.3には、公開鍵の保存にも使用できるセキュリティ機能がいくつか追加されています。このソリューションでは、サーバー通信とハードウェアサポートが本当に安全である必要があります。これらは、キーチェーンの機能強化とAndroidキーストアプロバイダーです。

于 2013-08-22T14:24:24.803 に答える