Come vengono implementati i "livelli di sicurezza" delle identità in TeamSpeak 3?

9

TeamSpeak 3 Il sistema di comunicazione VoIP utilizza un concetto di cosiddette identità per identificare il client al server. Queste identità sono fondamentalmente coppie di chiavi pubbliche / private.

Per impedire alle persone di generare una nuova identità solo dopo essere stati, ad esempio, bannati, hanno aggiunto una funzione chiamata livelli di sicurezza . Aumentare i livelli di sicurezza richiede più tempo in modo esponenziale per raggiungere la CPU.

In questo modo un utente bannato deve trascorrere almeno un minimo di tempo per generare una nuova identità con il livello di sicurezza richiesto prima che sia in grado di unirsi nuovamente al server.

Ora alla mia domanda:

Come vengono implementati i livelli di sicurezza, in modo che il tempo per migliorarne uno possa aumentare esponenzialmente, ma il tempo per verificarne uno sul lato server rimane lo stesso (o almeno aumenta solo linearmente)?

    
posta Max Truxa 14.12.2013 - 14:49
fonte

4 risposte

4

Un'identità TeamSpeak è semplicemente una coppia di chiavi ECC per la curva NIST ECC-256 come generata dalla libreria libtomcrypt , insieme a un valore contatore che è un numero intero senza segno a 64 bit.

Il livello di sicurezza si avvale di un sistema classico di prova di lavoro.

Lascia che PUBLICKEY sia la stringa codificata in base 64 della chiave pubblica codificata ASN.1 DER dell'identità. Inoltre, lascia che COUNTER sia la codifica ASCII decimale di un numero intero senza segno a 64 bit. Quindi il livello di sicurezza è definito come segue.

securitylevel := leadingzerobits(sha1(PUBLICKEY || COUNTER))

Di conseguenza, il numero previsto di valori contatore che devono essere tentati per raggiungere il livello di sicurezza n è 2^n (supponendo che SHA-1 sia una funzione casuale uniforme).

In teoria, il livello di sicurezza massimo potrebbe essere 160 (dato che SHA-1 produce un hash a 160 bit). Tuttavia, il client TeamSpeak sembra impostare artificialmente il limite su 128. In pratica, questo non fa differenza, poiché nessuno raggiungerà mai un livello di sicurezza superiore a 128 (eccetto un altro passo avanti nell'attacco allo SHA-1).

Fonte: TSIdentityTool , che è un'implementazione open source dei meccanismi di identità e livello di sicurezza.

    
risposta data 26.06.2017 - 20:23
fonte
3

Il metodo utilizzato è basato su hashcash. link

Hashcash is a proof-of-work system designed to limit email spam and denial-of-service attacks.

Fonte: link

    
risposta data 15.02.2015 - 08:12
fonte
2

Non posso dirlo con certezza. Ma se stai cercando una funzionalità simile, la implementerei come segue: Un ID contiene una parte privata e una pubblica (ecco cosa fa Teamspeak). Quindi penso che sia una chiave di crittografia asnyc che puoi generare da solo.
Ora basta generare una sequenza di numeri, ad es. s = [1..n] e hash loro.

Non appena i primi bit M dell'hash generato corrispondono al primo M bit della chiave pubblica, lo prendi come prof adatto di lavoro per il livello di sicurezza di M .

Hai avuto bisogno di n di hash per trovare l'hash, ma per prof, il server deve solo cancellare il risultato s una volta e controllare quanti bit corrispondono alla tua chiave pubblica. La difficoltà per te aumenterà in modo esponenziale.

Questo è in effetti simile a quello che fa Bitcoin. Ma Bitcoin cerca di ottenere un certo numero di Zeri davanti all'hash e non hai un numero casuale ma il b-tree del blocco che vuoi estrarre più un nonce (numero casuale).

Da Teamspeak: Genera un ID, ad es. %codice% Esportalo per vedere il segreto: ad es. IHoxfrQNl152vs80N4wYvsEmNd8=

Se ora aumenti la sicurezza, solo la prima parte delle modifiche di esportazione. Da 8 → 9 → 24 si ottiene da 205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ= a 205 a 247 .

La mia chiave più alta ha un certo numero intorno a 520935 al livello 34.

Penso che questo numero sarà in qualche modo hash a qualcosa che è correlato alla mia chiave pubblica. Quindi chiunque può provarlo con un singolo giro di hashing, ma il mio PC aveva bisogno di 29147155819 di hash per trovarlo, il che ha richiesto un po 'di tempo;)

Btw: la sicurezza massima è 128, quindi suppongo che sia la lunghezza in bit della chiave pubblica.

Spero di essere stato in grado di aiutare - Tarion

    
risposta data 27.10.2014 - 00:36
fonte
1

Potresti fondamentalmente usare qualcosa come Bitcoin difficoltà e considerare come valide solo le chiavi che hanno un prefisso give (inizia con un dato numero di '0' per esempio).

    
risposta data 06.08.2014 - 14:53
fonte

Leggi altre domande sui tag