谈谈移动互联网应用的用户注册登录安全考虑之不可逆加密的应用原则

1 篇文章 0 订阅
1 篇文章 0 订阅

现在移动互联网应用一般都会采用用户注册登录机制以便增强用户粘性。那么为了安全设计,用户的密码应该如何传输?在云端又如何保存?这个问题我思考过许久,总结以下一些思路,主要涉及到不可逆加密的使用原则。


假设用户的注册/登录过程均是在完全安全的环境下进行,你可以地设计得很简单: 注册就是把设置的密码直接保存起来,登录就是直接比较密码。这过程不涉及到任何加密技术。

然而在实际应用中,整个过程可能是在不安全的环境下进行,例如保存密码的系统可能被黑客攻击,密码的传输可能被黑客截获。。。。这种环境下,你如何能保证你的登录过程不会被其他别有用心的人冒充?密码如何不泄露?


以下是注册和登录过程中密码及由它推导出来的信息(我称之为信任信息)的传递示意图:

注册:

  手机应用    云端服务器                                                                                                                        
密码---->传输---->持久保存

登录:

  手机应用 云端服务器

密码---->传输---->与持久保存的信息比较


由于传递过程的不安全性,每多一次信息的传递步骤,就多一次信息泄露的可能性。为了保证信任信息的安全,应该保证信任信息的传递过程是不可逆的,例如哈希加密算法(例如md5,sha1,sha256, PBKDF2, bcrypt等)可达到这一目的。这些算法可保证无法通过下游的信息推算出上游的信息(例如密码),另外这类算法还可保证相同的输入和参数经过计算可得到相同的输出,这样云端就可以比较双方的结果即可推断出原始的信息(如密码)是否相同的,以达到用户认证的效果。

那么就上述的场景而言,如何在各环节(如传输/保存)对密码进行加密处理?

简单地说,用户在注册时输入了密码,可以先做一次哈希加密,再进行网络传输,云端服务器收到后,再做一次哈希加密,然后保存起来。登录时的过程类似,云端服务器所得到或使用的信息是经过了多次(这里是2)哈希加密后的结果。

相比之下,目前有很多文章关注的仅仅是密码做哈希处理后保存到云端服务器这一过程。

事实上,一个复杂的系统可能存在多个泄露风险的环节, 因此需一一识别出来,并增加必要的哈希加密步骤。

具体而言,例如上述的注册或登录过程, 如果仅仅做一级哈希加密, 尽管达到保护原始密码的效果,但仍存在安全风险的:如果仅仅是云端保存前做哈希加密,那么传输过程仍使用密码明文,存在泄露风险。反之如果仅仅是传输前做哈希加密,一旦该哈希值泄露了,则容易被伪造登录: 。


总结一下:

在信任信息由高信任域向低信任域传递的过程中,不可逆哈希加密处理可以有效控制高信任级别的信息直接扩散到较低信任域。如果在一个系统中存在多级这种场景,那就应该多次使用不可逆加密处理。


注:
1) 上述提到的一次不可逆加密处理不代表只能是一次哈希加密算法迭代,事实上为了加大算法强度,有时可能是使用很多次哈希加密算法的迭代。
2)在不可逆加密处理中,往往还需要添加盐值,以抵抗彩虹表攻击,这里不做详细阐述。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值