Tripcode

维基百科,自由的百科全书

Tripcode是一種認證方式,主要用於匿名留言板或沒有用戶註冊系統的留言板,如日本的2ch2chan、美国的4chan、台灣的Komica等。Tripcode是通過雜湊演算法產生的。

概述

4chan上用戶不宜使用tripcode,大部分無名留言。這圖表是/a/板(日本動漫)的用戶統計數據。橫軸:時間,垂直軸:用戶人口。綠色:無名者,藍色:使用tripcode用戶,紅色:使用名字的用戶。

由於系統不提供(或不需要)用戶註冊,所以任何人均可以使用同一用戶名留言。為了區分同一用戶名的不同使用者,可在用戶名後加入一個唯一的識別碼(詳細的產生方法見下文)。所產生的識別碼被稱為「帽子(英語:cap,日語:キャップ)」,而Tripcode這個字的來源就是日語的『1人用(ひとりよう)キャップ』(中文:一人用帽子),取其中とりップ合成了日語トリップ即英語Trip這個字。

表示方式

一般來說,一個Tripcode通常包含一個用戶名、一個已加密密碼以及一個分隔兩者的符號。輸入時只需在用戶名的一個格內填入用戶名、指定的分隔符[1]、以及用戶自定義的密碼。[2]

顯示留言的時候,通常以「用戶名◆已加密的密碼」這種格式表示。分隔符起了兩種作用:正常情況下只是用來分隔用戶名和密碼,並顯示為◆;或表明偽造的用戶名,此時則顯示成◇。

以下是一些例子[3]

輸入 輸出
1 Hello#World Hello◆4gxleYp5e2
2 Big#World Big◆4gxleYp5e2
3 Hello#abc Hello◆hghTE2MlOA
4 Hello◆4gxleYp5e2 Hello◇4gxleYp5e2

產生方法

Tripcode生成流程圖

一般的做法是對用戶輸入的密碼進行雜湊演算,例如MD5DES演算法。其中用戶密碼只取前8位以防止過長的密碼使演算法佔用太多時間。然後再於雜湊演算時加入(salt),而是由系統管理員指定或隨機產生的,目的是為了加強加密的隨機性。最後與用戶名合併並顯示出來。

使用上的注意

由於使用了不可逆的雜湊演算來處理用戶輸入的密碼,除了用戶本身外其他人無法得知原本的密碼,而系統一般都不對原本的密碼進行記錄,適合於作為個人識別用途。然而由於密碼本身經過刪減及處理,加密後的密文亦只得10位[4],理論上將可能發生「碰撞」,即不同的密碼能產生相的tripcode。使用窮舉法的碰撞率大約為254分之一,使用一般的個人電腦[5]需要約30萬年時間來算出相同的trip,雖然如此但仍不能否定它的存在。Tripcode的唯一性與理論並不相符。

加長tripcode的長度、改用更強的雜湊演算方式能減少碰撞率,相應地用於計算tripcode的時間則會增加。

然而字典攻擊對於一些系統還是湊效的,例如只包括數字的密碼只需3小時就能算出與之有相同tripcode的密碼。但同時使用salt進行加密則可避免此等攻擊。一組只存於系統內部的salt比一組用戶能夠簡單取得的salt更安全[6]。由於不同的留言板使用了不同的salt甚至不同的演算法,用戶很難在不同的板區內使用相同的一組上顯示名稱。例如上例的第一行在板A顯示為Hello◆4gxleYp5e2,在板B以同一組密碼輸入,顯示的結果可能為Hello◆p89aJg1afk。

如同普通密碼一樣,使用大小混合和加入各式符號的密碼亦能增加安全性。

衍生物

一些系統為了更進一步的分辨留言板的用戶,系統會對其IP進行類似tripcode的運算。此做法是基於用戶不希望IP被直接公開,由IP加密後的密文依然存有唯一性。相對於用戶名的tripcode而言,一組特定的算法可以肯定由IP加密後的密文的理論上的唯一性。

參見

註釋

  1. ^ 通常是 # 號或 !
  2. ^ 然而如果不需要用Tripcode的時候後兩者可不需輸入。
  3. ^ 由於每個系統中使用的雜湊演算法和salt不同,會得出不同的結果。
  4. ^ 長度因系統而異。
  5. ^ 假設速度為每秒處理3萬次。
  6. ^ 內部即如phpperl等由伺服器端處理的地方,salt寫在這些程式碼內,一般遠端用戶無法直接存取原始檔。而如果把salt放在javascript等由用戶端計算tripcode的地方則用戶可以簡單直接地得知salt。