名词解释:
撞库:撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
拖库:拖库也是一个黑客术语,它指的是黑客入侵有价值的网站,把注册用户的资料数据库全部盗走的行为,因为谐音,所以也常被称作“脱裤”;
洗库:在取得大量的用户数据之后,黑客会通过一系列的技术手段和黑色产业链将有价值的用户数据变现,这称作“洗库”;
彩虹表:彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加盐的KDF函数可以使这种攻击难以实现。
一、账号注册、登录时的密码上传问题
方案1、http协议,明文上传。总结:在传输过程中容易被截获,导致密码泄漏
方案2、http协议,密码经过base64算法加密后上传。总结:网路上传输过程中不会直接看到明文密码;但是base64是可逆加密,加密与解密算法是公开的,截获后可以很容易解密出明文。
方案3、http协议,密码经过md5或者sha1算法加密后上传。总结:明文密码得到了不可逆加密,但是黑客仍然可以截获密文,通过彩虹表反查出密码,对于简单密码,可能反查成功。
方案4、http协议,密码加salt后进行md5或者sha1加密再上传。总结:约定salt很重要,比较好的方法是将用户名作为salt,这样反查彩虹表成功的概率降低了不少。
方案5、https协议,会自动加密要传输的信息。总结:https的好处是解决了在传输过程中信息被截获的问题,只是存在效率低的问题,一般在重要的接口和系统上都会使用https协议传输。但是对于客户端在传输密码之前被木马盗取的情况也是无能为力。
方案6、https协议,客户端密码输入控件。总结:比较安全了,密码控件解决了在客户端被木马盗取的问题,https解决了传输过程中被黑客截获的问题。但是还存在replay重放攻击的问题。
方案7、https协议+密码输入控件+验证码。总结:这个应该是比较安全的了。
二、密码存储问题
方案1、明文存储。总结:非常不安全,被拖库后,全部暴露,可以轻松进入任何账户,也可以去其它网站撞库;后台管理员可以看到密码明文这也是不应该的;
方案2、md5加密存储。总结:由于现在有彩虹表的存在,被拖库后这种方式也已经不太安全了。
方案3、md5+固定salt加密存储。总结:增加了被破解的难度,但是增加的成本还不够大。固定salt一般会写在程序里或者存在文件中,而被拖库后的网站代码被完整下载也是很容易的事,所以salt会泄漏。
方案4、md5+动态salt加密存储。每个账户的salt都不一样。总结:为每个账户生成一个随机salt,然后再进行md5加密。大大增加制作彩虹表的成本。为了方便也可以直接使用username作为自己的salt,还省了存储salt的空间。另外也有通过截取自身的字符串作为salt,再进行多次md5加密的方法,原理都是为了增加salt从而增加制作彩虹表的成本。
三、异构系统之间传输数据的加密签名方式
对称加密图解:
非对称加密图解:
方案1、私钥签名,公钥验证。无法解决明文暴露问题。
方案2、公钥加密,私钥解密。效率低,无法解决中间人问题。
方案3、数字证书
方案4、对称加密,关键在于密匙的传输与保管。优点是加解密效率高。
方案5、比较好的方案是:对称加密和非对称加密混合使用,少量的关键的数据使用非对称加密算法+大量的非关键的数据使用对称加密算法。
发送方用自己的私钥完成数字签名,然后再用接收方的公钥对报文进行加密,将数字签名和报文传送给接收方。
接收方在拿到密文和数字签名后,先用自己的私钥对密文进行解密,得到明文,然后再用发送方提供的公钥进行验签,确保发送方身份的准确性,以及报文并没有被篡改过。
四、SSH公钥登录