ios密码

79 阅读3分钟

常用加密

  • RSA 非对称加密
  • hash 散列函数,结果都是32位字符串,运算不可逆。md5,sha1,sha256。
  • 对称加密 DES,3DES, AES(高级加密算法。目前常用的加密算法,比如很多硬盘都支持AES128加密)

加密的演进

明文传输。

非常不安全,服务器直接保存密码。这样一旦泄露,后果非常严重。

username = @"xiaoming"
password = @"123456"

hash传输

用户名还是明文。但是传输的过程对password进行hash运算。服务器也保存密码对应的hash。这样就算得到hash,也不能逆向解密。

但是www.cmd5.com 该网站收录了很多hash。此时密码又不安全了

hash+盐

盐是一长串的字符串。校验密码为 原始密码拼接盐。然后再md5。这样可以有效防止破解。

此时,盐的泄露会比较危险。比如拿到了盐。可以随机生成字符串然后加盐,然后md5运算和拦截到的校验密码进行匹配。

HMAC

注册的时候,服务器针对每个用户生成一个key。然后将key发送给客户端。客户端根据这个key对密码进行加密。然后把加密后的字符串发送给服务器。服务器拿到这个字符串保存。或者下次登录的时候进行密码校验。

优点: 一个key对应一个用户,泄露了一个key对其它用户没有任何影响。

缺点:key的传输是不安全的。

设备锁

目前的apple登录,QQ登录都有设备锁的概念。

用户知道账号和密码。要获取HMAC对应的key.但是如果用户之前在其它设备登录过,则先请求其它登录设备,是否允许改设备进行登录。如果不允许,就无法登录。

破解HMAC

比如搞活动,注册app送奶茶。但是下载app需要流量,可以通过提供免费的wifi让用户下载。此时用户的所有的流量都通过你的wifi。

虽然我们无法获取QQ的原始密码。但是可以获取QQ进行HMAC之后的密码。这个密码是用于密码校验的。因此密码也是不安全的。

HMAC防破解

校验密码:(用户HMAC密码+ "2020-10-1 09:10").md5

服务器保存的是用户的HMAC密码。服务器校验的时候,先获取当前的分钟拼接服务器保存的HMAC密码。然后再MD5。此时和用户的数据进行校验。

如果校验失败,则服务器获取上一分钟的时间。再重复操作。用户对应的校验密码只有2分钟的有效期。下次再根据这个密码,就无法登录了。

这个时间戳,注意需要使用服务器的时间。如果使用本地的时间,用户的时间不对则无法登录成功。

数字签名

由于RSA非对称加密效率很低,因此在进行数据传输的时候,一般不直接使用公钥和私钥进行加密和解密。

对数据进行md5(md5的效率非常高)。然后对32位的md5进行公钥加密。

服务器接收到的数据就是原始数据+公钥加密后的数据。服务器再次对数据进行md5。然后使用私钥解密secret。如果此时md5和解密后的secret一致,则证明数据没有没篡改。

{
user:"xiaoming"
update_addr:"beijing"
secret:"adasdasd"
}