美文网首页
iOS和macOS应用程序本地数据库密钥处理设计

iOS和macOS应用程序本地数据库密钥处理设计

作者: 杨闯 | 来源:发表于2018-03-03 20:47 被阅读69次

    对于用户隐私数据需要存储到数据库中,并要对数据库进行加密,那么如何设置密钥保证数据库加密是一个至关重要的问题。

    在不考虑相关黑客或白客通过逆向的情况下,我的主要策略如下:
    密钥长度足够的长
    如果一个数据库的密钥特别的长,就会增加破解的难度,如果长度保持在一二百位的话,暴力破解的时间会大大加长。
    不同设备间密钥各不相同
    虽然其他人可能破解到了一个设备的密钥,但是如果不同设备之间的密钥各不相同,那么破解了其中一个设备的密钥后,再去破解另外一个设备密钥的难度不会减少,由于iOS和macOS之间系统开发程度的不同,采取不一样的策略

    系统名称 keychain说明 设备唯一标识说明
    iOS 可以直接进行keychain的存储,在不越狱的情况下不可以通过其他程序获取 涉及用户隐私,无法读取
    macOS 如果使用,弹出对话框询问用户是否允许使用,体验性差 可以获取到设备的UDID、设备号、Mac地址

    实现

    通过对以上情况进行分析,可以针对iOS设计出来随机字符串和固定字符串相结合、不同设备之间密钥各不相同、密钥长度长到难以破解的程度,针对Mac设计出来*不同设备之间密钥各不相同、密钥长度难以破解的程度,具体实现方案如下:

    iOS

    1、生成一个由200个拼音和数字拼接而成的随机字符串,作为temp1,存储到keychain里面
    2、程序中写死一个固定字符串,作为key
    3、以key为密钥将temp1进行RC4加密,生成一个新的200位的字符串temp2作为数据库密钥
    在使用过程中,针对第一步先要查看本地keychain中是否存在temp1,如果存在直接进入第二步,如果不存在则重新生成。

    Mac

    1、将Mac设备的UDID作为key
    2、程序中写死一个200位的固定字符串,作为temp1
    3、按照iOS的加密策略,生成一个长度比较长的字符串,作为数据库的密钥

    打开数据库后,可以通过SQL语句"SELECT name FROM sqlite_master WHERE type='table' "来判断数据库查询语句是够能够得到有效查询,如果查询有效,则表示密钥正确,继续后续的相关处理,否则密钥错误,删除当前文件,重新创建数据库进行后续的操作。

    相关文章

      网友评论

          本文标题:iOS和macOS应用程序本地数据库密钥处理设计

          本文链接:https://www.haomeiwen.com/subject/wcdxfftx.html