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。