美文网首页
密码学初见

密码学初见

作者: TAsama | 来源:发表于2018-12-10 10:19 被阅读0次

    最早的密码学:

    密码本加密

    持续到了上世纪的70年代

    RSA加密

    只能通过因式分解的方式来破解,破解难度巨大
    rsa加密之后衍生出了很多加密算法,如:

    • 哈希(散列)函数
      1. MD5
      2. SHA1
      3. SHA256/512
    • 对称加密算法
      1. DES
      2. 3DES
      3. AES(高级密码标准,ios内部使用)

    散列函数:

    特点:
    • 算法公开
    • 对相同的数据加密,得到的结果是一样的
    • 对不同的数据加密,得到的结果是定长的.32位字符(a-z,0-9)
    • 信息摘要(信息“指纹”),是用来做识别的
    • 不能反算
    用途:
    • 密码
    • 搜索引擎的算法
    • 版权
    破解:
    • 目前破解的散列只有MD5, SHA1 也在破解的边缘
    • 散列碰撞,不同的数据,使用MD5之后能够得到相同的散列结果!
      由于32位字符能表达的数据个数是有限的,而被散列的数据个数可以是无限的

    MD5的实现

    - (NSString *)md5String {
        const char *str = self.UTF8String;
        unsigned char buffer[CC_MD5_DIGEST_LENGTH];
        
        CC_MD5(str, (CC_LONG)strlen(str), buffer);
        NSMutableString * ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            /**
            X 表示以十六进制形式输入/输出
            02 表示不足两位,前面补0输出;出过两位不影响
            printf("%02X", 0x123); 打印出:123
            printf("%02X", 0x1); 打印出:01
            */
            [ret appendFormat:@"%02X",buffer[i]];
        }
        return ret;
    }
    

    由于使用MD5已经不是很安全了,为了保证MD5的基本安全:

    1. 加盐(但是“盐”是固定的,如果“盐”泄露了就不安全了,而“盐”无法更改)
    2. HMAC,目前一两年在国内开始增多
      给定一个秘钥,对明文进行加密,并且做了“两次散列”
      服务器将保存用户的账号以及账号对应的秘钥
    - (NSString *)hmac_md5String:(NSString *)key {
        return [self.md5String stringByAppendingString:key].md5String;
    }
    
    hmac 登录思路:
    1. 用户登录
    2. 本地查找秘钥,若找不到,则像服务器发送账号,获取秘钥
    设备锁思路:

    当新设备登录时,在本地查找不到对应账号的秘钥,就会想服务器发送秘钥请求,此时服务器就向原先的设备发解锁请求,如果请求通过了,则向新设备发送秘钥,新设备保存至本地。

    hmac+时间

    客户端: (pwd.hmac+当前时间).md5
    服务端:(加密后的密码+当前时间).md5 || (加密后的密码+当前时间前一分钟).md5

    本地保存
    1. 记住密码,加密保存,反向解密。
      钥匙串访问:
      钥匙串加密使用AES加密,可以将保存的密码以明文的方式反算给你
      pod 'SAMKeychain'
      需要先开启钥匙串访问

    相关文章

      网友评论

          本文标题:密码学初见

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