当前位置:  开发笔记 > 编程语言 > 正文

如何在安全(C++)中存储加密密钥?

如何解决《如何在安全(C++)中存储加密密钥?》经验,为你挑选了1个好方法。

我想在我的游戏中使用xxtea进行数据加密/解密.

以下是库使用的示例:

#include 
#include 
#include 

int main() {
    const char *text = "Hello World! ??????";
    const char *key = "1234567890";
    size_t len;
    unsigned char *encrypt_data = xxtea_encrypt(text, strlen(text), key, &len);
    char *decrypt_data = xxtea_decrypt(encrypt_data, len, key, &len);
    if (strncmp(text, decrypt_data, len) == 0) {
        printf("success!\n");
    }
    else {
        printf("fail!\n");
    }
    free(encrypt_data);
    free(decrypt_data);
    return 0;
}

如何保持钥匙本身的安全呢?



1> Rob Napier..:

正如@ArtjomB指出的那样,你可以通过不将密钥放入程序中来保证密钥的安全.在启动期间,授权用户或安全设备需要提供密钥.

任何看起来不那样的东西都不再是加密或安全,它是某种形式的混淆.混淆(或"DRM")可能介于无用和有效之间,具体取决于您将投入多少精力,而不是对它的兴趣程度.随着新攻击的出现,你的持续预算是什么?您预期的攻击者的复杂程度是多少?

Apple(作为一个例子)非常严格地控制他们的硬件,固件和操作系统,并且有一个团队完全致力于不断改进它.新版本发布后,iPhone通常会在几周到几个月内越狱.你应该考虑一个有吸引力的目标的最佳案例场景.

如果你想"好吧,我可以在一个下午放在一起会阻止踝关节咬伤吗?" 做任何想到的事情.将其与其他一些硬编码值进行异或.也许bithift它或其他什么.它对任何关心的人都没有多大帮助,但它会阻止最随意的攻击者,至少你不会浪费大量的时间和金钱.

从中加速,查看平台的内置解决方案.OS帮助是一个很大的帮助.特别是,请查看Windows 上的SLP服务.如果您通过Mac App Store工作,Mac会提供许可执行.或者你可以看看像eSellerate这样拥有自己专有解决方案的商业供应商.SafeNet有几种产品.当然,所有这些都可以(并且经常被)击败.但它们比你几天内发展的任何东西都强大得多.

根据定义,您从StackOverflow中获得的任何特定方法都是无用的.混淆的唯一原因是它的细节是秘密的.如果你知道它是如何工作的,那么你可以击败它.这就是它与加密的区别.即使攻击者知道整个算法,良好的加密设计也同样强大.这就是为什么混淆技术是专有的.他们几乎必须这样做.这意味着你要么(a)快速建立一个糟糕的,(b)花费大量的时间和金钱建立一个稍微糟糕的,或(c)花更多的钱来获得一些 - 可以从专门从事这些事情的供应商那里得到的.

(如果你在StackOverflow上问这个问题,你绝对不可能自己建立一个好的.如果你自己没有破解过一些程序,你就无法建立一些东西来停止其他.)

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有