2012-07-16 70 views
0

我有一个1000个会话ID的列表。会话ID长度是每个32个字符。什么是我可以用来确定每个角色级别的随机性或变化的最有效的算法?我是python的新手,有人可以帮我开发一个python代码片段吗? 仅供参考,如果令牌长度为10个字符,Burpsuite中的Sequencer工具会为每个10个字符的位置给出一个随机图。 (算法未知)用于计算会话ID随机性的Python代码

+0

如果您担心生成您的ID的散列函数的有效传播,您可以查看使用的散列算法。如果它是md5或sha1,那么你很好,没有什么可担心的。 – phs 2012-07-17 04:44:51

+0

其传统的应用程序,已经使用了一些自定义算法(使用时间戳来生成ID)。我看到一些特殊字符位置的异常不够随机 – Mechanic 2012-07-17 05:26:47

+0

“特定字符位置的异常”并不等同于安全问题,我认为1000个会话ID对于这种类型的“n”来说不够大无论如何分析。应该做的是分析所使用的*算法*,而不是所创建的*密码*。不,我不知道任何这样的工具(可能是出于上述原因)。 – DevSolar 2012-07-17 12:45:13

回答

0

我不知道Burp如何去做,但确定每个字符级别变化的一种方法是对会话ID中的每个位置进行字符频率分析。

前提是,您希望所有角色在所有会话id(角色分配均匀)上的位置出现的可能性相同。假设您已经收集/生成了100个数字的会话ID(因此每个位置的可能字符都是0-9),您会希望每个数字在每个位置都会显示100/10 = 10次。

现在,对于序列中的每个位置,都会生成一个直方图,并显示角色在所有会话ID中实际出现在该位置的时间。

要想知道在每个位置观察到的角色分布的可能性有多大,因为您希望它们均匀分布,则可以使用统计测试,如Chi Squared test

我已经写了一个简单的Python字符数测试器,在这里使用Chi Squared测试:https://github.com/decbis/salr。我将在未来添加更多测试。