在移动设备上签名和验证配置文件(iOS + Android)

时间:2012-10-02 00:51:05

标签: android ios mobile

我们有一个应用程序可以存储一些数据,除了用户和我们之外,这些数据都不会对其他任何人有价值。因此,我们不需要对其进行加密,但我们确实希望确保没有人对其进行更改。

我认为最简单的方法是从文件内容,日期戳和/或大小生成哈希。直接做md5可能不够好,因为谁想要更改数据只能生成一个新的哈希,所以使用某种键是很好的。有人知道一个简单的方法吗?我想避免使用像crypto ++这样的库,但不要100%反对它。

哦,我们正在用C ++做这个应用程序。

也许,我只需要将一些模糊的数据添加到我们传递给md5函数的任何内容中并完成此操作。你们觉得怎么样?

重申一下,文件没有黑客的有价值的信息,所以没有理由过分安全。我只是想检查设置是否已被搞乱。

谢谢, Angrius。

PS>有没有人知道一个很好的方法来实现可以兼得的md5?

2 个答案:

答案 0 :(得分:2)

如果要对数据进行签名,则需要使用密钥和签名算法。可以是像RSA这样的非对称的,也可以是AES等对称的。但是,如果您的应用需要使用它对数据进行签名,则需要将密钥嵌入或以其他方式提供给应用。在这种情况下,潜在的攻击者可以从应用程序中提取它并创建自己的有效签名。你决定这对你是否合适以及你想保护它的程度。

添加“模糊数据”或以其他方式尝试提出自己的算法是一个坏主意,你一定会弄错,特别是如果你没有这方面的经验。请使用标准算法,并考虑如何保护密钥(使用iOS密钥链等)。搜索“RSA sigantures”或“HMAC”以获取有关如何在实践中执行此操作的更多详细信息。如果您无法利用C ++库中的平台加密API(?),则需要使用并链接到第三方库,例如OpenSSL。

答案 1 :(得分:1)

做我想做的最简单的方法是实现基本的HMAC(http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)。你甚至可以将这个哈希存储在配置文件本身中,虽然这有点复杂,但非常简洁。

事实证明,iOS和Android都内置了库来执行基本的SHA1,MD5等。他们也都支持HMAC。所以对于iOS,你会做这样的事情:

#include <CommonCrypto/CommonHMAC.h>

string createHMAC( string key, string text )
{
    string result;

    const char *cKey  = key.c_str();
    const char *cData = text.c_str();
    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];

    CCHmac( kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC );

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    {
        [output appendFormat:@"%02x", cHMAC[i]];
    }
    result = string( [output UTF8String] );

    return result;
}

由于这是Objective-c代码,您可以将其编译为objective-c ++,它将起作用。如果您的应用不需要任何高级加密,则无需使用任何框架。

干杯, Angrius