TeamSpeak 3 VoIP通信系统使用所谓的身份概念来标识服务器的客户端。这些标识基本上是公共/私钥对。
为了防止人们在被禁止后产生新的身份,他们增加了一个名为安全级别的功能。增加安全级别需要花费更多的CPU时间。
这样,被禁止的用户至少需要花费最少的时间来生成具有所需安全级别的新标识,然后才能再次加入服务器。
关于我的问题:
如何实现安全级别,以便改进的时间可以成倍增加,但是在服务器端验证的时间保持不变(或者至少是线性的增加)?
发布于 2017-06-26 18:23:41
TeamSpeak标识是libtomcrypt文库生成的NIST曲线ECC-256的ECC密钥对,还有一个64位无符号整数的计数器值。
安全级别使用了经典的工作证明系统。
将PUBLICKEY
设为标识的ASN.1 DER编码公钥的be 64编码字符串。此外,让COUNTER
是64位无符号整数的十进制ASCII编码.然后,安全级别定义如下。
securitylevel := leadingzerobits(sha1(PUBLICKEY || COUNTER))
因此,需要尝试达到安全级别n
的计数器值的预期数是2^n
(假设SHA-1是一个统一的随机函数)。
请注意,理论上,最大安全级别可以是160 (因为SHA-1生成160位哈希)。然而,TeamSpeak客户机似乎人为地将限制设置为128。在实践中,这没有区别,因为没有人会达到超过128的安全水平(除了在攻击SHA-1发生的另一个突破)。
资料来源:TSIdentityTool,它是身份和安全级别机制的开源实现。
发布于 2015-02-15 07:12:48
所使用的方法是基于哈希现金。http://en.wikipedia.org/wiki/Hashcash
哈希现金是一种工作证明系统,旨在限制电子邮件、垃圾邮件和拒绝服务攻击。
发布于 2014-10-26 23:36:38
我不能确定。但是,如果您正在寻找类似的特性,我将按照以下方式实现它: ID包含私有和公共部分( Teamspeak就是这样做的)。所以我想这是一些你可以自己生成的加密密钥。
现在只需生成一个数字序列,例如s = [1..n]
和散列它们。
一旦生成的哈希的第一个M
比特与公钥的第一个M
比特匹配,您就会将它作为M
安全性级别的有效工作代表。
您需要n
回合散列来查找哈希,但是要对其进行处理,服务器必须只对结果s
进行一次散列,并检查与您的公钥匹配的位数。你的差异会成倍地上升。
事实上,这与比特币的做法类似。但是比特币试图在哈希前面得到一定数量的零,而不是散列一个随机数,而是你想要挖掘的块的b树加上一个现在(随机数)。
从Teamspeak:生成ID,例如IHoxfrQNl152vs80N4wYvsEmNd8=
导出它查看秘密:例如205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ=
如果您现在增加了安全性,则仅更改导出的第一部分。从8 205
到247
到520935
从8→9→24。
我的最高键在34级的29147155819
附近有一些数字。
我认为这个数字会以某种方式散去与我的公钥相关的东西。所以任何人都可以用一轮散列来证明它,但是我的PC需要29147155819
几轮散列才能找到它,这花了很长时间;)
顺便说一句:最大安全性是128,所以我猜这就是公钥的长度(以位为单位)。
https://security.stackexchange.com/questions/46978
复制相似问题