[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Abuse resistant anonymous publishing



Hi or-talk (and Ben),

I am sorry to be jumping in the middle of the wikipedia-Tor debate, but Steven 
Murdoch just made me aware of it. A while back I had a short discussion with 
Roger about a possible way of mitigating abuse through anonymity systems like 
Tor on open publishing systems like wikipedia (and with additional precautions 
Indymedia). I have further discussed this with Ben Laurie at PET 2005.

The basic idea is quite simple: anonymity allows users to avoid being 
associated with a persistent identifier that could be used to filter out abuse 
cheaply. It is in fact a Sybil attack, ie. one user can pretend to be multiple 
users. Note that this can also happen if one controls many nodes (through a 
bot net for example). The aim of our protocol is to be able to associate 
persistent identifiers, with posts that are controversial (through a process 
that is defined), to be used to filter abuse (note that these do not have to 
be an identity, but only be useful to filter abuse). We should also try to 
maintain the user's anonymity, and at least plausible deniability.

My favorite approach in solving these problems is using and assuming the 
existence of social networks. In the case of Indymedia, I know they exist 
(people get teargassed together in the streets quite routinely -- this creates 
solid bonds), in the case of wikipedia it might be the case that they will 
have to be cultivated (through better flagging up who is the responsible 
editors for sections, who has been contributing so far to an article, and 
on-line chat forums where people can discuss).

Thus I will assume that getting introduced in to someone that is involved in 
wikipedia is not hard, but getting introduced to all/many people as having 
different identities is hard! (gmail and orkut has proved that it is posible 
to have an invite only system with a small seed ending up being quite 
inclusive). As a result we can have a graph that describes who has been 
introduced by whom (lets call it the wikipedia introduction graph, or just 
intro graph). Furthermore this graph has a couple of 'roots' ie the people who 
are 'in-charge' of wikipedia, or multiple roots (by section for example -- if 
we chose the people that magame sections of the site).

Example path from Root to User Charlie to be used in examples...:

Root -> Alice -> Bob -> Charlie

The protocol has three phases:

1) Introduction -- someone that is already in the intro graph 'introduces' a 
new user into the graph. They do this because they know the user or have 
chatted to him... From a technical point of view this provides the new user 
with the necessary (anonymous?) credentials to post to/modify the site.

2) Each action of the user is 'authenticated' using the credentials, and a 
'signature' is generated. This signature provides any third parties with the 
Root that the user is attached.

3) Responsibility allocation: If the action is deemed abusive by the Root (or 
a collective mechanism like voting / veto / ...), then the Responsibility 
allocation mechanism is started by the Root. This means that step by step the 
path lining the user Charlie to the Root is walked (starting at the Root, then 
Alice, then Bob then Charlie) until someone 'takes responsibility for the 
post. This process can depend on Alice and Bob (ie it must not be possible to 
trace without their consent) but if they do not collaborate in the tracing 
they accept to take responsibility. The article is tagged with the full traced 
path from the Root to the principal that has taken responsibility.

Mini-FAQ:

Why is this helping at all against abuse?

Assuming that it is hard to get multiple connections to the intro graph, 
persistent offenders can be identified, either by their own username or the 
username of the person who consistently introduces them. This is incentives 
compatible: you do not want to introduce people that may abuse the system 
otherwise abusive messages will be tagged with (and possible filtered on the 
bases of) your name! The chain from the Root to the user assuming 
responsibility for the article can them be used (very much like IPs or user 
names today) to implement filtering policies. Furthermore these policies can 
be specified by the users and do not need to be centralized and applied by the 
server.

What about anonymity?

No real IDs ever need to be traced! The design does not require step 1 to 
provide a real name at all, and in any case the design can ensure (through the 
use of crypto-fu?) that authentication only reveals the first hop (ie Alice). 
Others need to collaborate to ask further down the chain for someone to take 
responsibility. In any case the final user is no certain as we will see...

Wait a sec, a bad user can connect other abusive users easily!?

Yes as soon as an abuse user connects to the intro graph they can introduce as 
many of their friends as they like! This is the reason why filtering policies 
need to make use of the full path from the Root to the user that ultimately 
takes responsibility: a user that consistently introduces many other abusers 
will always be on the path, and can be used to filter stuff out! As a side 
effect of this one cannot (and should not) trust that the user that finally 
took responsibility is indeed the initiator of the abusive action. They could 
be a Sybil or another person up the chain that disagrees with the fact that 
this action constitutes abuse!

Why are you calling it 'taking responsibility' instead of tracing?

The point of the protocol is for someone to say 'I stand by this action' -- 
his path to the root can then be used for filtering such action out, by users 
that do consider it as abuse. Note that there is always contention in online 
communities about what constitutes abuse and this mechanism allows for 
differing opinions. Then there can be different policies filtering out 
different users in the chain. Possibly anyone (not just people on the Path 
between Root and Charlie) should be able to take responsibility and have the 
item tagged with their path.

What about abusing the anti-abuse system?

There is a risk that trolls will abuse the action of requesting tracing/taking 
responsibility for all actions, trying to get as much information as 
possible/wasting time/undermining confidence in the system. The conditions 
under which this mechanism is initiated is really not clear, (Root decides, 
voting, veto, ...). In any case it is a good idea for someone to take 
responsibility of the initiation of this process by tagging the request with 
their path to the Root. This way Root, Alice and Bob can filter out persistent 
abusers of the anti-abuse system :-). There is no contradiction there: 
anonymous political speech is a right (hence this complex system), but 
moderation (censorship?) has to be done transparently, and those doing it must 
come forward by tagging their action with their path to Root.

It seems that Root has a lot of power in all this (== your system embodies 
fascist values!)?

Yes, this is a problem. At the same time there is nothing stopping (aside from 
efficiency and the appropriate crypto-fu) full decentralization. Each person 
can be their own Root, and apply custom filtering according to the paths 
relative to them. Note that taking responsibility cannot be abused any more 
than before (since either you connect directly to the abuser, at which point 
you should know better, or you are still connected through nodes that will not 
consider your action abusive and will take responsibility for it!).

Ok, so how do we do all this magic?

It is clear that a trusted third party can do all this efficiently. Can we 
find a variant of certificate systems that allow delegation in an anonymous 
way to decentralize all this, and make sure that no one party can screw any 
other? Open research problem -- I am working on it!

Any feedback is welcome!

George