it-swarm.com.de

Wie werden "Sicherheitsstufen" von Identitäten in TeamSpeak 3 implementiert?

TeamSpeak Das VoIP-Kommunikationssystem verwendet ein Konzept sogenannter Identitäten , um den Client gegenüber dem Server zu identifizieren. Diese Identitäten sind im Grunde öffentliche/private Schlüsselpaare.

Um zu verhindern, dass Personen nur eine neue Identität generieren, nachdem sie beispielsweise gesperrt wurden, haben sie eine Funktion namens Sicherheitsstufen hinzugefügt. Das Erhöhen der Sicherheitsstufe erfordert exponentiell mehr CPU-Zeit.

Auf diese Weise muss ein gesperrter Benutzer mindestens ein Minimum an Zeit aufwenden, um eine neue Identität mit der erforderlichen Sicherheitsstufe zu generieren, bevor er wieder dem Server beitreten kann.

Nun zu meiner Frage:

Wie werden Sicherheitsstufen implementiert, so dass die Zeit für Verbesserungen exponentiell ansteigen kann, die Zeit für die Überprüfung auf der Serverseite jedoch gleich bleibt (oder zumindest nur linear zunimmt)?

10
Max Truxa

Eine TeamSpeak-Identität ist einfach ein ECC-Schlüsselpaar für die NIST-Kurve ECC-256, wie sie von libtomcrypt library generiert wird, zusammen mit einem Zählerwert, der eine 64-Bit-Ganzzahl ohne Vorzeichen ist.

Die Sicherheitsstufe verwendet ein klassisches Proof-of-Work-System.

Sei PUBLICKEY die base64-codierte Zeichenfolge des ASN.1 DER-codierten öffentlichen Schlüssels der Identität. Ferner sei COUNTER die dezimale ASCII-Codierung einer 64-Bit-Ganzzahl ohne Vorzeichen. Dann wird die Sicherheitsstufe wie folgt definiert.

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

Folglich ist die erwartete Anzahl von Zählerwerten, die versucht werden müssen, um die Sicherheitsstufe n zu erreichen, 2^n (unter der Annahme, dass SHA-1 eine einheitliche Zufallsfunktion ist).

Beachten Sie, dass theoretisch die maximale Sicherheitsstufe 160 betragen kann (da SHA-1 einen 160-Bit-Hash erzeugt). Der TeamSpeak-Client scheint das Limit jedoch künstlich auf 128 zu setzen. In der Praxis macht dies keinen Unterschied, da niemand jemals eine Sicherheitsstufe über 128 erreichen wird (außer ein weiterer Durchbruch beim Angriff auf SHA-1).

Quelle: TSIdentityTool , eine Open-Source-Implementierung der Mechanismen der Identitäts- und Sicherheitsstufe.

4
landave

Die verwendete Methode basiert auf Hashcash. http://en.wikipedia.org/wiki/Hashcash

Hashcash ist ein Proof-of-Work-System zur Begrenzung von E-Mail-Spam und Denial-of-Service-Angriffen.

Quelle: http://forum.teamspeak.com/showthread.php/57988-Security-level-how-is-it-determined-increased-technical?p=257115#post257115

3
Woodsy

Ich kann es nicht sicher sagen. Wenn Sie jedoch nach einer ähnlichen Funktion suchen, würde ich sie wie folgt implementieren: Eine ID enthält einen privaten und einen öffentlichen Teil (das macht Teamspeak). Ich denke, es ist ein Asnyc-Verschlüsselungsschlüssel, den Sie selbst generieren können.
Generieren Sie nun einfach eine Folge von Zahlen, z. s = [1..n] und hashe sie.

Sobald die ersten M Bits des generierten Hashs mit den ersten M Bits des öffentlichen Schlüssels übereinstimmen, nehmen Sie es als gültigen Arbeitsprofi für die Sicherheitsstufe von M .

Sie brauchten n Hashing-Runden, um den Hash zu finden, aber um ihn zu nutzen, muss der Server das Ergebnis s nur einmal hashen und prüfen, wie viele Bits mit Ihrem öffentlichen Schlüssel übereinstimmen. Die Schwierigkeit für Sie wird exponentiell steigen.

Dies ist in der Tat ähnlich wie bei Bitcoin. Aber Bitcoin versucht, eine bestimmte Anzahl von Nullen vor den Hash zu bekommen, und Sie haben keine Zufallszahl, sondern den B-Baum des Blocks, den Sie abbauen möchten, plus eine Nonce (Zufallszahl).

Von Teamspeak : Generieren Sie eine ID, z. IHoxfrQNl152vs80N4wYvsEmNd8= Exportiere es, um das Geheimnis zu sehen: z. 205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ=

Wenn Sie jetzt die Sicherheit erhöhen, ändert sich nur der erste Teil des Exports. Von 8 → 9 → 24 erhält es von 205 bis 247 bis 520935.

Mein höchster Schlüssel hat eine Zahl um 29147155819 auf Stufe 34.

Ich denke, diese Nummer wird irgendwie mit etwas hashen, das mit meinem öffentlichen Schlüssel zusammenhängt. Jeder kann es also mit einer einzigen Runde Hashing beweisen, aber mein PC brauchte 29147155819 Runden Hashing, um es zu finden, was eine ganze Weile gedauert hat;)

Übrigens: Die maximale Sicherheit beträgt 128, also ist das wohl die Länge des öffentlichen Schlüssels in Bits.

Ich hoffe ich konnte helfen - Tarion

2
Tarion

Sie könnten im Grunde genommen so etwas wie die Bitcoin-Schwierigkeit verwenden und nur Schlüssel als gültig betrachten, die zufällig ein Geben-Präfix haben (beginnt beispielsweise mit einer bestimmten Zahl von '0').

1
Dillinur