Solución:
Una identidad de TeamSpeak es simplemente un par de claves ECC para la curva NIST ECC-256 generada por la biblioteca libtomcrypt, junto con un valor de contador que es un entero sin signo de 64 bits.
El nivel de seguridad utiliza un sistema clásico de prueba de trabajo.
Dejar PUBLICKEY
ser la cadena codificada en base64 de la clave pública codificada en DER de ASN.1 de la identidad. Además, deja COUNTER
ser la codificación ASCII decimal de un entero sin signo de 64 bits. Entonces, el nivel de seguridad se define de la siguiente manera.
securitylevel := leadingzerobits(sha1(PUBLICKEY || COUNTER))
En consecuencia, el número esperado de valores de contador que deben probarse para alcanzar el nivel de seguridad n
es 2^n
(bajo el supuesto de que SHA-1 es una función aleatoria uniforme).
Tenga en cuenta que, en teoría, el nivel de seguridad máximo podría ser 160 (ya que SHA-1 produce un hash de 160 bits). Sin embargo, el cliente TeamSpeak parece establecer el límite artificialmente en 128. En la práctica, esto no hace ninguna diferencia, ya que nadie alcanzará nunca un nivel de seguridad superior a 128 (excepto que ocurre otro gran avance en el ataque de SHA-1).
Fuente: TSIdentityTool, que es una implementación de código abierto de los mecanismos de nivel de identidad y seguridad.
El método que se utiliza se basa en hashcash. http://en.wikipedia.org/wiki/Hashcash
Hashcash es un sistema de prueba de trabajo diseñado para limitar el correo no deseado y los ataques de denegación de servicio.
Fuente: http://forum.teamspeak.com/showthread.php/57988-Security-level-how-is-it-determined-increased-technical?p=257115#post257115
No puedo asegurarlo. Pero si está buscando una función similar, la implementaría de la siguiente manera: una ID contiene una parte privada y una pública (eso es lo que hace Teamspeak). Así que supongo que es una clave de cifrado asnyc que puede generar usted mismo.
Ahora solo genera una secuencia de números, p. Ej. s = [1..n]
y picarlos.
Tan pronto como el primero M
bits del hash generado coinciden con el primero M
bits de la clave pública lo toma como un profesional válido de trabajo para el nivel de seguridad de M
.
Tu necesitas n
rondas de hash para encontrar el hash, pero para obtener beneficios, el servidor solo debe hacer hash del resultado s
una vez y verifique cuántos bits coinciden con su clave pública. La dificultad para ti aumentará exponencialmente.
De hecho, esto es similar a lo que hace Bitcoin. Pero Bitcoin intenta obtener un cierto número de ceros delante del hash y no hash un número aleatorio, sino el árbol b del bloque que desea extraer más un nonce (número aleatorio).
Desde Teamspeak:
Genere una identificación, p. Ej. IHoxfrQNl152vs80N4wYvsEmNd8=
Exportarlo para ver el secreto: p. Ej. 205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ=
Si ahora aumenta la seguridad, solo cambia la primera parte de la exportación. De 8 → 9 → 24 se obtiene de 205
para 247
para 520935
.
Mi clave más alta tiene un número alrededor 29147155819
en el nivel 34.
Creo que este número de alguna manera se convertirá en algo relacionado con mi clave pública. Entonces cualquiera puede probarlo con una sola ronda de hash, pero mi PC necesitaba 29147155819
rondas de hash para encontrarlo, lo que llevó bastante tiempo;)
Por cierto: la seguridad máxima es 128, así que supongo que esa es la longitud en bits de la clave pública.
Espero haber podido ayudar – Tarion