解开人人网登录密码的 RSA 加密

世界上有两种密码:一种是防止你的小妹妹偷看你的文件;另一种是防止当局阅读你的文件。
—— Bruce Schneier《应用密码学》

传说中的 “明文密码” 有两种形式:明文传输和明文存储。明文传输的密码不一定明文存储,明文存储的密码也不一定明文传输。去年沸沸扬扬的明文密码事件,就是密码明文存储,网站的数据库一旦被窃取,用户的密码也就随之失窃了。密码明文传输也是非常危险的,网络中的很多位置都可能安装有嗅探装置,明文传输的密码对这些嗅探者来说也就无密可言了。本文关注的是密码传输中的安全问题。

什么是 “明文”?如果密码以 ASCII 字符的形式直接发出去,对任何人来说这都是明文;如果密码用 base64 编码一下(例如 123456 经过 base64 编码就是 MTIzNDU2),对多数人来说这也许是密文,而对任何专业程序员来说就是明文。有些人认为,把“加密”算法弄得复杂些,再用代码混淆工具弄乱,就没人能分析出来了。这样的做法叫做隐藏,而不是安全,属于防止小妹妹偷看文件的级别。真正的安全依赖于公开的、被广泛使用的密码学算法,靠密钥而不是算法本身来保证安全。

可惜,密码学算法和协议并不是随便拼凑起来就安全的。

继续阅读“解开人人网登录密码的 RSA 加密”

Meteor + Mylar, 服务器叛变也不怕

我们所用的网站,数据大多以明文形式存储在服务器上,服务器端程序鉴别用户的身份、授予用户访问权限。不过业务逻辑复杂了,百密一疏,程序总是有这样那样的漏洞,连支付宝这么敏感的应用都不例外。此外,现在越来越多的网站搭建在公共云平台上,一个很大的顾虑是:云平台的所有者会不会窃取我的机密数据?

因此,数据在服务器上最好是加密存储,解密密钥在用户手里,也就是只有用户自己能看到明文,而网站所有者、云服务提供商、可能的服务器入侵者都只能看到密文。即将发表在网络领域顶级会议 NSDI 2014 的 Building web applications on top of encrypted data using Mylar 就是这样一种解决方案。

继续阅读“Meteor + Mylar, 服务器叛变也不怕”

美丽邂逅抢票系统的背后

今天抢了个极路由,用了一个小时才抢到,之前一直都在“人山人海”地排队。不禁想起去年给美丽邂逅做的抢票系统,有人问,我写了个脚本怎么抢不到票呢?谜底将在本文中揭开。

抢票系统要满足的条件是:

  1. 一人一票,一个人不能拿到两张票;
  2. 每天欲发行的票必须一张不多一张不少(假定来抢票的人足够多)地发出去;
  3. 用程序抢票成功的概率不能明显高于人工抢票成功的概率。

继续阅读“美丽邂逅抢票系统的背后”