-
如何安全的存储密码
过去一段时间来,众多的网站遭遇用户密码数据库泄露事件,这甚至包括顶级的互联网企业–NASDQ上市的商务社交网络Linkedin,国内诸如CSDN一类的就更多了。 层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。 那么在选择密码存储方案时,容易掉入哪些陷阱,以及如何避免这些陷阱?我们将在实践中的一些心得体会记录于此,与大家分享。 菜鸟方案: 直接存储用户密码的明文或者将密码加密存储。 曾经有一次我在某知名网站重置密码,结果邮件中居然直接包含以前设置过的密码。我和客服咨询为什么直接将密码发送给用户,客服答曰:“减少用户步骤,用户体验更好”;再问“管理员是否可以直接获知我的密码”, 客服振振有词:“我们用XXX算法加密过的,不会有问题的”。 殊不知,密码加密后一定能被解密获得原始密码,因此,该网站一旦数据库泄露,所有用户的密码本身就大白于天下。 以后看到这类网站,大家最好都绕道而走,因为一家“暴库”,全部遭殃。 入门方案: 将明文密码做单向哈希后存储。 单向哈希算法有一个特性,无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源,这一点和所有的加密算法都不同。常用的单向哈希算法包括SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进行SHA-256哈希后的摘要(digest)如下: “bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c” 可能是“单向”二字有误导性,也可能是上面那串数字唬人,不少人误以为这种方式很可靠, 其实不然。 单向哈希有两个特性: 1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要 2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算 结合上面两个特点,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。 更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。仍然等同于一家“暴库”,全部遭殃。以后要是有某家厂商宣布“我们的密码都是哈希后存储的,绝对安全”,大家对这个行为要特别警惕并表示不屑。有兴趣的朋友可以搜索下,看看哪家厂商躺着中枪了。 进阶方案: 将明文密码混入“随机因素”,然后进行单向哈希后存储,也就是所谓的“Salted Hash”。 这个方式相比上面的方案,最大的好处是针对每一个数据库中的密码,都需要建立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全不同。 10多年以前,因为计算和内存大小的限制,这个方案还是足够安全的,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为显卡的恐怖的并行计算能力,这种攻击已经完全可行。 专家方案: 故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的rainbow table。 这类方案有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。 这类方案的常用算法有三种: 1)PBKDF2(Password-Based Key Derivation Function) PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的。如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。假如攻击一个密码所需的rainbow table有1千万条,建立所对应的rainbow table所需要的时间就是115天。这个代价足以让大部分的攻击者忘而生畏。 美国政府机构已经将这个方法标准化,并且用于一些政府和军方的系统。 这个方案最大的优点是标准化,实现容易同时采用了久经考验的SHA算法。 2) bcrypt bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。 bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work…
-
92URL更新
本次更新结束了92URL的测试版本号。 更新内容: 1.加入网站信任评判系统,减少误报; 2.更新在某些特殊情况下由于逻辑错误导致无法跳转的问题; 3.修正用户反馈的BUG; 下次更新将会是硬件和网络资源上的升级,敬请期待。
-
92url更新
本次更新内容如下: 1.修改部分算法,提高算法准确度; 2.完善引擎连接逻辑,增加“无法连接引擎”的提示界面; 3.拦截页面增加“危险评级”,更清晰的表示目标页面的安全状况; 4.提升网站运行整体效率; 预计这是网站正式上线前的最后一个BETA版本。
-
92URL更新预告
将调整部分恶意网站判定算法,提高识别准确性; 取消在缩短网址时的安全性检验,提高网站运行效率; 完善跳转前认证,保障用户安全,更改部分版面; 由于涉及算法的更新,所以本次更新不会快速上线,预计在近几周内上线,如果发现错判或漏判,请及时联系[email protected]
-
网站速度问题
其实我也想过更换一个好点的服务器,不过这个站点只不过用来写写BLOG的罢了,也就不换服务器了,大家将就点(*^__^*) ,我会尽量在程序层面优化网站。 PS.主题不能完全支持IE6,我也不想去兼容了,因为IE6的渲染效果实现会很复杂,其次IE6的执行效率也不理想,所以还是推荐各位使用高版本IE或者直接使用Chrome.
-
支持向量机(SVM)
支持向量机,英文为Support Vector Machine,一般简称SVM。它是一种監督式學習的方法,它广泛的应用于统计分类以及回归分析中。 支持向量机属于一般化线性分类器。他们也可以认为是提克洛夫规范化(Tikhonov Regularization)方法的一个特例。这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区。因此支持向量机也被称为最大边缘区分类器。 介绍 支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt和Barnard将支持向量机和其他分类器进行了比较。 动机 有很多个分类器(超平面)可以把数据分开,但是只有一个能够达到最大分割。 我们通常希望分类的过程是一个机器学习的过程。这些数据点并不需要是中的点,而可以是任意(统计学符号)中或者(计算机科学符号)的点。我们希望能够把这些点通过一个n-1维的超平面分开,通常这个被称为线性分类器。有很多分类器都符合这个要求,但是我们还希望找到分类最佳的平面,即使得属于两个不同类的数据点间隔最大的那个面,该面亦称为最大间隔超平面。如果我们能够找到这个面,那么这个分类器就称为最大间隔分类器。 问题定义 设样本属于两个类,用该样本训练svm得到的最大间隔超平面。在超平面上的样本点也称为支持向量. 我们考虑以下形式的样本点 其中ci为1或−1 –用以表示数据点属于哪个类. 是一个 (统计学符号),或 (计算机科学符号)维向量,其每个元素都被缩放到[0,1]或[-1,1].缩放的目的是防止方差大的随机变量主导分类过程。我们可以把这些数据称为“训练数据”,希望我们的支持向量机能够通过一个超平面正确的把他们分开。超平面的数学形式可以写作 。 其中是超平面上的点,是垂直于超平面的向量。 根据几何知识,我们知道向量垂直于分类超平面。加入位移b的目的是增加间隔。如果没有b的话,那超平面将不得不通过原点,限制了这个方法的灵活性。 由于我们要求最大间隔,因此我们需要知道支持向量以及(与最佳超平面)平行的并且离支持向量最近的超平面。我们可以看到这些平行超平面可以由方程族: 。 来表示。 由于只是超平面的法向量,长度未定,是一个变量,所以等式右边的1和-1只是为计算方便而取的常量,其他常量只要互为相反数亦可。 如果这些训练数据是线性可分的,那就可以找到这样两个超平面,在它们之间没有任何样本点并且这两个超平面之间的距离也最大。通过几何不难得到这两个超平面之间的距离是2/|w|,因此我们需要最小化 |w|。同时为了使得样本数据点都在超平面的间隔区以外,我们需要保证对于所有的满足其中的一个条件 这两个式子可以写作: 原型 现在寻找最佳超平面这个问题就变成了在(1)这个约束条件下最小化|w|.这是一个二次規劃QP(quadratic programming)最优化中的问题。 更清楚的表示: 最小化,满足其中。 1/2这个因子是为了数学上表达的方便加上的。 解如上问题通常的想法可能是使用非负拉格朗日乘数 于下式 不过这样可能出错. 原因是:假如我们能找到一族超平面将这些点分割开来;那么所有的 . 因此我们可能通过将所有趋向得到最小值, 此最小值对这一族内所有成员都有效,而不是解决原问题的最优解。 不过以前的约束问题可以表示为 此式表明我们寻找一个鞍点。这样所有可以被分离的点就无关紧要了,因为我们必须设置相应的 为零。 这个问题现在可以用标准二次规划技术标准和程序解决。结论可以表示为如下训练向量的线性组合 只有很少的会大于0. 相应的就是支持向量, 这些支持向量在边缘上并且满足. 由此可以推导出支持向量也满足:…
-
Why is a bicycle easier to control when it’s moving?
A moving bike is always falling, steering prevents (or delays) impact… Imagine a bike messenger paused at a stop light: he leans over his front wheel, making small adjustments and tiny twists in his handlebars. He stays up on two wheels—unless he turns the handlebars a bit too far, or a car bumps him, or…
-
92URL更新
92URL今天再次迎来了更新,这次更新不但重写界面,而且也对内核进行了优化,可显著提高浏览速度! 1.重写UI; 2.改写部分内核; 3.修正可能无法连接安全引擎的问题,完善失败逻辑; 4.再次感谢 PHURL! 由于本次使用了新服务器,所以IP 记录下发可能需要一段时间。 正在评估是否需要部署CDN.
-
DreamHost解压文件
今天部署节点的时候发现dreamhost的操作异常的复杂(第一感觉)~~~ 而后去找Webftp,打开以后没有Autologin还要手动输入信息,而输入信息之后又不能上传大于2MB的文件,只好用FTP上传,上传完以后发现根本就没有解压这个功能~NND,这个webftp根本就是拿来摆的! 只好使用SSH连接,很多人不知道SSH怎么使用,我在这里说下吧: 1.当然是下载putty啦,不大,只有几百K; 2.打开putty,输入域名之后点击open; 3.弹出的黑框框里会显示please type your user nane,这个时候输入你的用户名; 4.按了回车之后就输入密码 PS.输入密码的时候看起来是没反应的,无需理会; 5.cd 你的目录 回车; 6.unzip 你的压缩文档 回车; 我也要复习下这些函数了~~都忘记得差不多了。。。。。
-
92Url更新
1.修正部分错误的逻辑,解决恶意网站可能可以通过安全验证的BUG; 2.实施单步验证,在用户跳转之前同样会进行一次网址安全性的判断; 3.其他BUG的修正; 下次更新将着重解决浏览器显示的兼容问题!