密码学:密码加密

概述

本文主要讲解通过运用HASH算法,给用户的密码进行加密的各种方案。
对于网络传输数据(隐私数据)和 本地保存数据(隐私数据)都有一个原则,不能明文,一定是加密后的数据。最常见的就是用户的账户密码。

用户在设置密码的时候各类App很可能是同一个密码,如果泄露问题会很严重。

密码加密策略

对于用户的密码,我们可以采用以下策略:

1. RSA

rsa加密网络上数据泄露的可能性低,相对来说比较安全,但是服务端的数据库中保存的是用户的真实密码(明文密码),那如果数据库泄露,所有用户密码将泄露。
所以应该有一个原则,服务端不能保存用户的明文密码,最好是开发者都不知道密码。所以用hash再合适不过了。

2.HASH

这里有个问题是由于HASH值相同,那么可以通过保存HASH值找到明文。如果保存足够多常用密码的HASH值那么通过对照一样能找到明文。
有一个网站cmd5可以直接查询:

image.png

就相当于暴力破解了,直接查表就能得到明文了。
这个网站支持的方式和数据很多,所以直接hash显示仍然是不安全的。

3.hash+salt

比如:

static NSString *kSaltKey = @"Hotpot";
NSString *pwd = @"123456";
pwd = [pwd stringByAppendingString:kSaltKey].md5String;
NSLog(@"%@",pwd);

这样通过查表一般就很难还原了。早期这个加盐是在注册时服务端直接将加盐后的密码哈希值保存在数据库中。这个方式对开发者依赖太大了,开发者依然知道salt,泄露salt后依然可以还原。

4.hmac

NSString *pwd = @"123456";
pwd = [pwd hmacMD5StringWithKey:@"Hotpot"];
NSLog(@"%@",pwd);

这里的keysalt有什么区别呢?本质上没有区别(hmac两次md5),这个key由服务器提供(一个账号一个key)。
这个时候整个流程如下:

  1. 注册的时候客户端发请求给服务端,服务端判断账号存不存在,不存在的时候服务端生成一个key和账号绑定在一起。
  2. 服务端将key给到客户端,客户端将密码key通过hmac计算得到hash值返回到服务端。服务端保存这个hash值。
  3. 客户端登录的时候拿这个key(本地,一般存储在keychain)和密码计算得到hash值登录。
    image.png

这个时候有个问题,如果用户换了手机(没有key了)怎么处理呢?
在换手机后先从服务端请求keyRSA加密),这里一般会涉及到授权(旧手机,短信,人脸等),没有key不是认证手机不让登录。请求key需要授权确定用户是账号的主人才给key

5.hmac+时间戳

虽然hmac一般情况下获取不到明文密码了,但是仍然可以获取hamc(密码+key)的值。如果直接用这个hash值和服务端交互呢?
这个时候就可以用hash + 时间戳来解决了:

image.png

hmac+时间戳hmac区别:

  • 加密逻辑不变,不过多了一个时间戳
  • 服务端验证逻辑变了

整个过程如下:

  1. 客户端将hash值和时间戳md5后发送给服务端。
  2. 服务端拿本地时间和数据库中存储的hashhash与客户端发送的值做比对。
  3. 如果验证失败则拿上一分钟的时间再次验证。
    这里给了1分钟的容错。hash值有效值时间为1分59秒(这个时间可以自定义)。

这个时候hash值就和时间绑定了,就相对安全了,每次加密结果不同受时间影响。

总结

  • RSA:泄露可能想低,但是开发者知道密码,数据库有泄露可能。
  • HASH:可能被暴力破解(查表)
  • hash+salt:盐可能泄露(这里为固定盐)
  • HMAC:比较好的方案,问题是加密后的数据有可能被截获
  • HASH+时间戳:保证每次加密结果受时间影响,相对比较安全
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容