June 2012 Archives

三张

| 1 Comment | No TrackBacks

时间过得真是太快了。最近这段时间, 乔帮主 2005 年 Stanford 毕业典礼演讲 里说的那段话一直让我觉得有如芒刺在背:

Your time is limited, so don't waste it living someone else's life.
Don't be trapped by dogma - which is living with the results of other
people's thinking. Don't let the noise of other's opinions drown out
your own inner voice. And most important, have the courage to follow
your heart and intuition. They somehow already know what you truly
want to become. Everything else is secondary.

来美帝快 6 年了, FreeBSDChina.org 也已经 10 周年了。我想,接下来的十年,我需要做一些新的事情,认识一些新的人,去一些新的地方,等等等等。所谓 Keep looking, don't settle,这话说起来容易,做起来没那么容易,可是趁着年纪不算太大,还是要尽量去做。

我们这个行业,年龄不是什么值得骄傲的事情,先这么着吧。

计时攻击是一种通过观测由于某些操作时泄露出来的时间信息来获取更多信息的攻击。由于设计和实现的不同,攻击者能够通过计时得到的信息也会不一样。简而言之,作为安全系统的设计者,必须对可能泄露信息的各种渠道有充分的了解,并针对它们采取因应措施。

今天在和人讨论的时候想到一个例子,这里记下来。

为了阻止采用 GPU 穷举,我们可能会使用一些增加轮数的散列算法。一个设计不完善的登录系统的登录流程大致如下:

  • 从用户输入获得用户名和口令;
  • 在数据库中从用户名查得对应的口令散列串;如果没有这个用户,直接提示"用户名或密码错误";
  • 根据散列串中的 salt 和输入的口令,按一定的算法算出实际的散列值并比较;如果不匹配,提示"用户名或密码错误";
  • 创建信任状。

假定我们采用了一种够慢的算法来计算散列值,上述流程的问题便是,假如用户不存在,尽管攻击者观察到的提示是一样的"用户名或密码错误",但这个提示出现的时间可能会比用户存在时慢一些。这样,这个登录系统便透露了"用户不存在"这样的信息。

补救的办法是在用户不存在时,也根据同样的算法计算一下散列串,然后再提示"用户名或密码错误";还有一种办法是增加一个随机的延时。具体采用什么样的做法,要看具体的应用场景。

Monthly Archives

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.2.3