¿Cómo se implementan los "niveles de seguridad" de las identidades en TeamSpeak 3?

9

TeamSpeak 3 El sistema de comunicación VoIP utiliza un concepto de las denominadas identidades para identificar cliente al servidor. Estas identidades son básicamente pares de claves públicas / privadas.

Con el fin de evitar que las personas solo generen una nueva identidad después de haber sido prohibidas, por ejemplo, agregaron una función llamada niveles de seguridad . El aumento de los niveles de seguridad requiere un tiempo de CPU exponencialmente mayor.

De esta manera, un usuario prohibido debe pasar al menos una cantidad mínima de tiempo para generar una nueva identidad con el nivel de seguridad requerido antes de poder unirse al servidor nuevamente.

Ahora a mi pregunta:

¿Cómo se implementan los niveles de seguridad, de modo que el tiempo para mejorar uno puede aumentar exponencialmente, pero el tiempo para verificar uno en el lado del servidor sigue siendo el mismo (o al menos aumenta de forma lineal)?

    
pregunta Max Truxa 14.12.2013 - 14:49
fuente

4 respuestas

3

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.

Deje que PUBLICKEY sea la cadena codificada en base64 de la clave pública codificada en ASN.1 DER de la identidad. Además, sea COUNTER 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 intentarse 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 máximo de seguridad podría ser 160 (ya que SHA-1 produce un hash de 160 bits). Sin embargo, el cliente de TeamSpeak parece establecer el límite artificialmente en 128. En la práctica, esto no hace ninguna diferencia, ya que nadie alcanzará un nivel de seguridad superior a 128 (excepto que ocurre otro avance en el ataque de SHA-1).

Fuente: TSIdentityTool , que es una implementación de código abierto de los mecanismos de identidad y nivel de seguridad.

    
respondido por el landave 26.06.2017 - 20:23
fuente
3

El método que se utiliza se basa en el hashcash. enlace

  

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: enlace

    
respondido por el Woodsy 15.02.2015 - 08:12
fuente
2

No puedo decir con seguridad. Pero si está buscando una característica similar, la implementaría de la siguiente manera: Una identificación contiene una parte privada y otra pública (eso es lo que hace Teamspeak). Así que supongo que es una clave de encriptación asnyc que puede generar usted mismo.
Ahora solo genera una secuencia de números, por ej. s = [1..n] y hash ellos.

Tan pronto como los primeros M bits del hash generado coincidan con los primeros M bits de la clave pública, lo tomas como un trabajo válido para el nivel de seguridad de M .

Necesitaba n rondas de hash para encontrar el hash, pero para profanarlo, el servidor solo debe hash el resultado s una vez y verificar cuántos bits coinciden con tu clave pública. La dificultad para ti aumentará exponencialmente.

De hecho, esto es similar a lo que hace Bitcoin. Pero Bitcoin intenta obtener una cierta cantidad de ceros frente al hash y no hash un número aleatorio, sino el árbol b del bloque que deseas extraer más un nonce (número aleatorio).

Desde Teamspeak: Generar una identificación, por ejemplo. %código% Exportalo para ver el secreto: por ej. IHoxfrQNl152vs80N4wYvsEmNd8=

Si ahora aumenta la seguridad, solo cambia la primera parte de la exportación. De 8 → 9 → 24 se obtiene de 205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ= a 205 a 247 .

Mi clave más alta tiene un número alrededor de 520935 en el nivel 34.

Creo que este número de alguna manera estará relacionado con algo relacionado con mi clave pública. Así que cualquiera puede probarlo con una sola ronda de hash, pero mi PC necesitaba 29147155819 rondas de hash para encontrarlo, lo cual tomó 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

    
respondido por el Tarion 27.10.2014 - 00:36
fuente
1

Básicamente, podrías usar algo como la dificultad de Bitcoin y considerar como válidas solo las claves que tengan un prefijo de respuesta (comienza por un número dado de '0' por ejemplo).

    
respondido por el Dillinur 06.08.2014 - 14:53
fuente

Lea otras preguntas en las etiquetas