TeamSpeak VoIP通信システムは、いわゆるidentitiesの概念を使用して、サーバーに対してクライアントを識別します。これらのIDは、基本的に公開/秘密キーのペアです。
禁止された後など、人々が新しいアイデンティティを生成するのを防ぐために、セキュリティレベルと呼ばれる機能を追加しました。セキュリティレベルを上げると、到達するまでにCPU時間が飛躍的に長くなります。
このように、禁止されたユーザーは、サーバーに再び参加する前に、最低限の時間をかけて必要なセキュリティレベルの新しいIDを生成する必要があります。
今私の質問に:
セキュリティレベルはどのように実装されていますか?1を改善する時間は指数関数的に増加しますが、サーバー側で1を検証する時間は同じままです(または少なくとも直線的に増加します)。
TeamSpeakのIDは、64ビットの符号なし整数であるカウンター値と共に、 libtomcryptライブラリ によって生成されるNIST曲線ECC-256のECCキーペアです。
セキュリティレベルは、従来のProof-of-workシステムを利用しています。
PUBLICKEY
を、アイデンティティのASN.1 DERエンコードされた公開鍵のbase64エンコードされた文字列とします。さらに、COUNTER
を64ビットの符号なし整数の10進ASCIIエンコードとします。次に、セキュリティレベルを次のように定義します。
securitylevel := leadingzerobits(sha1(PUBLICKEY || COUNTER))
その結果、セキュリティレベルn
に到達するために必要なカウンター値の予想数は2^n
になります(SHA-1が一様ランダム関数であるという仮定の下)。
理論的には、最大セキュリティレベルは160になる可能性があることに注意してください(SHA-1は160ビットのハッシュを生成するため)。ただし、TeamSpeakクライアントは制限を人為的に128に設定しているようです。実際には、誰も128を超えるセキュリティレベルに到達することはないため、これは違いがありません(SHA-1の攻撃で別の突破が発生する場合を除きます)。
ソース: TSIdentityTool 。これは、IDおよびセキュリティレベルのメカニズムのオープンソース実装です。
使用される方法はhashcashに基づいています。 http://en.wikipedia.org/wiki/Hashcash
Hashcashは、電子メールスパムおよびサービス拒否攻撃を制限するように設計された作業証明システムです。
はっきりとはわかりません。しかし、同様の機能を探している場合は、次のように実装します。IDにはプライベート部分とパブリック部分が含まれます(これがTeamspeakの機能です)。だから、自分で生成できるasnyc暗号化キーだと思います。
次に、一連の数値を生成します。 s = [1..n]
とハッシュ化します。
生成されたハッシュの最初のM
ビットが公開鍵の最初のM
ビットと一致するとすぐに、それをセキュリティレベルM
の有効なprofとみなします。
ハッシュを見つけるにはn
ラウンドのハッシュが必要でしたが、プロファイリングするには、サーバーは結果s
を一度だけハッシュし、公開鍵と一致するビット数を確認する必要があります。あなたのための困難は指数関数的に上昇します。
これは実際にはビットコインがすることと似ています。しかし、ビットコインはハッシュの前に特定の数のゼロを取得しようとし、乱数はハッシュしませんが、マイニングするブロックのBツリーとナンス(乱数)をハッシュします。
From Teamspeak: IDを生成します。 IHoxfrQNl152vs80N4wYvsEmNd8=
エクスポートして秘密を確認します。例: 205VFy/YWQLyDeTxIIQvyy4hGQYxWloFH0R9VW4VRCxQHkcOdFdyX2YHMztQDQQeDA1gNG9Ce0N6CipVHkMie2lzX3ReRX4HFQhqFiB5FBQEEi0DVhhCUltiOE4GcmV2W3FkDX1OdXcrUUxwUUloQVBHRjYvM3EzWCtGeUpkRHlWTTFXZGh1VHJRZVA0Q3hMWE1ITXVxNlU1TTQ=
セキュリティを強化すると、エクスポートの最初の部分のみが変更されます。 8→9→24から取得205
〜247
〜520935
。
私の最高の鍵は29147155819
レベル34。
この数値は、どういうわけか私の公開鍵に関連する何かにハッシュされると思います。したがって、誰でも1回のハッシュでそれを証明できますが、私のPCには29147155819
それを見つけるためのハッシュのラウンド。かなり時間がかかりました;)
ところで、最大のセキュリティは128なので、これが公開鍵のビット単位の長さだと思います。
お役に立てれば幸いです-タリオン
あなたは基本的にビットコインの難易度のようなものを使用して、たまたま与えられた接頭辞(例えば、与えられた数 '0'で始まる)を持つキーのみを有効と見なすことができます。