首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成难以猜测的会话令牌

生成难以猜测的会话令牌
EN

Code Review用户
提问于 2013-10-16 16:10:55
回答 1查看 286关注 0票数 10

假设服务器和客户端通过HTTPS进行通信,此代码是否创建了足够难猜的会话令牌?

采取2(感谢这个crypto.SE的答案):

代码语言:javascript
复制
(ql:quickload (list :ironclad :cl-base64))

(let ((prng (ironclad:make-prng :fortuna)))
  (defun new-session-token ()
    (cl-base64:usb8-array-to-base64-string
     (ironclad:random-data 32 prng) :uri t)))

另外需要注意的是,以前的版本使用了不正确的加密模式(ecb,而不是适合此任务的ctr ),并使用了生成随机密钥((sha256 rand))的不安全方法。

如果不是,这个目标还需要什么,为什么?

除了猜测和嗅探会话令牌之外,我还应该担心其他攻击吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-05-25 12:30:48

你的问题没有给出关于你想要做什么的足够的信息来知道这在你的情况下是否可行。不过,最重要的答案很简单:“不要这么做,而是使用web框架”。会话管理几乎总是应该以框架的标准方式进行;然后,除了检查您的框架是否认为您的用户已通过身份验证之外,您不必做任何其他事情。

现在让我们看一下代码的具体内容。您使用了密码PRNG。应该没问题的。您使用了32字节= 256位随机数据。这应该是没有问题的(128位通常足以对付蛮力攻击;256位是过度杀伤力,在这种情况下这可能是好的)您的主要恐惧应该是播种和泄漏位。

种子: PRNG文档说,如果你不给一个随机种子,PRNG将被取消种子。在现实生活中,它似乎确实是从/dev/随机中播撒出来的。我非常不喜欢这个,很可能会明确地播种它。最好是与作者讨论,并将补丁发送到库的文档中,这样它就会承诺做它实际做的事情。我没有一个没有/dev/随机测试的操作系统,但我认为您的函数在那里根本无法工作(这很好,因为它是安全的)。

泄漏bits1:如果攻击者能够找到响应时间取决于内容的情况,可能会出现问题(例如会话的强制再生)。回顾一下对铁甲的定时攻击,我不认为它有抵抗力(例如,见https://www.mail-archive.com/pro@common-lisp.net/msg00977.html)。你需要检查或保护以防这一切。如果消息的内容是真的,那么您可能应该在消息发布时切换到更好的库,如LibreSSL (可能是GNU?)。如果有人试图在例如Windows上使用该函数,我只需发出警告就可以退出。

泄漏bits2:您的输出是恒定大小的,但包含一些特殊字符。如果攻击者能够找到消息长度取决于身份验证令牌的情况,则会出现问题。使用Base64编码(第二次)应该可以。对令牌使用最大HTML编码将不会(n.b )。正常的HTML是可以的;但是有些编码器做得太过分了)。

泄漏bits3:更进一步,对SSL/TLS的标准攻击是我认为您应该考虑的;野兽、犯罪和破坏,泄漏位https://en.wikipedia.org/wiki/Transport_层_Security#CRIME_和_破口_攻击。将随机令牌的大小增加到256位以上,可能会对此类事情起到一定的保护作用。但是,“在当前的表单中,该漏洞使用JavaScript,需要6个请求来提取一个字节的数据”(https://community.qualys.com/blogs/securitylabs/2012/09/14/crime-information-leakage-attack-against-ssltls),因此我认为您可能会发现,在关闭所有站点和用户web浏览器上的压缩时,会更好地投入精力。就我个人而言,我会选择384字节,只是为了比其他字节更保守;-)

摘要:可能您的函数与许多框架中使用的函数基本相同。由于定时攻击和比特泄漏的风险,我个人不想发布它供公众使用,直到我更好地了解周围的使用情况比我目前做的。

(编辑了大量内容,因为我在第一个响应中将字节误读为位)

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/32769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档