在应用程序内结算的安全性(In app billing security)

2019-07-17 16:09发布

我已经完成了我的开发的应用程序,在应用程序内结算v3的使用。 我的应用程序是考试的帮助应用程序,它具有被插入到数据库的问题清单。 令我担心的事情是安全性超越proguard的有相当多的小东西。 我的应用程序查询所购买的物品清单,以便存储采购是没有问题的。

所以,第一个问题是有人可以反编译应用程序(我已经做了),甚至使用ProGuard,你可以不会有太大困难检索所有的问题。

接下来的事情是应用程序的公共密钥。 这可以很容易地从我的应用程序并依照开发者指南,这是我应该保持安全。

但是我真的不知道如何实现任何形式的担保。 甚至有多远,我应该有安全去。 如果没有一台服务器,如果我保持设备上的一切,我承认它不会是完美的(远非如此),但我至少会像黑客而却步,而不是逗乐了。

所以基本上,问题是:

我应该使用什么类型的安全性和如何使用它? 只是指着我通过它一步一步走的链接,以便我能理解这将是惊人的。

非常感谢你!

澄清:

没有参与服务器。 该数据被存储在该应用程序。 当它的库存(通过queryinventoryasync法)问,它返回如果清单是买或不和它运行每次应用程序启动。 在应用程序内结算本身我相信是可以的,我要求更多关于我自己的应用程序应用公共密钥 - 我的意思以某种方式作出这样的难以复制,但目前我还刚刚破成15串,我只是“添加”他们彼此运行时但这是几乎没有任何更好,然后只是有它作为一个字符串。 我想对它进行加密在某种程度上只是不知道怎么办。

Answer 1:

好问题。

使用公共密钥必须可在设备上才能。 一旦谈到对设备它不是真的了保护。 密钥本身不是秘密,但我们需要做的可能的替代是一个更艰巨的任务。

你可以做的是使用所谓的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()与密码和公共(加密)密钥字符串。 密码是你在你的代码在一些地方保存过的字符串。 正如我所说的,我们真的不保护它,但我们使它更难以找到和/或更换。

您可以添加对如何结合加密的公共密钥和密码,也更复杂的逻辑。 这只是增加更多的复杂性,但不会给你钥匙不会被解密的任何保证。 在任何情况下, 谷歌证实 XOR加密是聊胜于无。

采用Android 4.3添加了可用于存储公共密钥过一些更多的安全功能。 该解决方案将需要服务器的通信和硬件支持,真正做到安全。 这些钥匙链的增强和Android密钥库提供 。



文章来源: In app billing security