数据库加密技术

来源:互联网 发布:慧典电子病历数据库 编辑:程序博客网 时间:2024/06/08 08:24

前言

2011年12月,CSDN、多玩、世纪佳缘等多家网站的用户数据库被曝光在网络上,由于部分密码以明文方式显示,成为中国互联网历史上一次重大的网络安全事故。

令人不可思议的是,像CSDN这样的以程序员和开发为核心的大型网站,居然也采用明文存储密码,导致海量用户的账号信息包括密码直接被泄露。

本文将简述数据库的加密技术,不涉及具体实现。

密码在数据库中的安全性

明文存储

明文存储是最简单也是最不安全的存储方法,数据库中存储如下所示:

+----------+----------+| UserName | PassWord |+----------+----------+| jitwxs   | 123      || admin    | admin    |+----------+----------+

这种设计思路非常简单,但是缺陷也非常明显,数据库一旦泄露,那么所有用户名和密码都会泄露,后果非常严重,前言中提到的泄露事件就是采用这种存储方式。

普通加密

既然直接明文存储危险性很大,那么我们可以利用加密算法来对密码进行加密,然后在数据库中存储加密后的数据。常见的加密算法有MD5SHA算法。数据库中存储如下所示:

+----------+----------------------------------+| UserName | PassWord                         |+----------+----------------------------------+| jitwxs   | 202CB962AC59075B964B07152D234B70 || admin    | 21232f297a57a5a743894a0e4a801fc3 |+----------+----------------------------------+

当用户登陆的时候,会把用户输入的密码执行加密算法后再和数据库就行对比,判断用户身份是否合法。

这种方法对于较复杂的密码来说十分难破译,但对于较常见的密码却并没有什么作用。

因为这些算法都已经被破解了,坏人可以将常见密码的加密结果收集起来,组成一张表,称之为彩虹表,结构如下:

+------------------------------------+-----------+| EncryptPassWord                    |  PassWord |+------------------------------------+-----------+| 202CB962AC59075B964B07152D234B70   |  123      || 21232f297a57a5a743894a0e4a801fc3   |  admin    |+------------------------------------+-----------+

如果你的密码十分常见,只需要用彩虹表与加密后的密码比对,依然能得到原始密码。当然如果你是个天才除外,可以使用自己独创的哈希算法进行加密。

混淆加密

普通的加密算法已经不能保证密码的安全性了,这里引入Salt来混淆加密,结构如下:

+----------+----------------------------+----------------------------------+| UserName | Salt                       | EncryptPassWord                  |+----------+----------------------------+----------------------------------+| jitwxs   | 1cagla31a23mjxrg1h0129h2lj | 6c22ef52be70e11b6f3bcf0f672c96ce || admin    | 1h29kh2lj11fa23fa2g13kc12b | 728f587d88d6x6af974d6ef57c193628 |+----------+----------------------------+----------------------------------+

Salt可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,数据库中存入的不是明文密码,也不是简单的对明文密码进行加密,而是将明文密码和Salt混淆后再使用加密算法进行加密,即:

加密算法(初始密码 + Salt)

由于加了 Salt,即使数据库泄露了,但是由于密码都是加了 Salt 之后的加密,彩虹表已经无法直接匹配,密码被破解出来的概率也大大降低。

但这并非绝对安全,根据彩虹表中的数据,加上我们泄露数据库中的 Salt,然后进行加密匹配,还是有被破解的可能。但是由于我们的 Salt 是随机产生的,想要破解也是一件十分困难的事。

延长加密时间

为了给坏人们增加难度,我们可以延长加密算法的执行时间,可以使用Key_stretching技术或者使用bcrypt算法,来迫使在暴力破译的时候需要更长的时间。

由于将加密算法控制在微秒级即可给坏人的破译带来灾难性打击而同时单个用户登录时验证的耗时又不算太长,这种方法可以说有效的解决了坏人破译密码的危险。

原创粉丝点击