Anomos is a decentralized peer-to-peer file sharing system derived from BitTorrent which is capable of protecting its user’s identities by means of an advanced, planned mix network. Its purpose is twofold. In one way it is simply an intellectual exercise; we are computer scientists interested in encryption, the limits of anonymity, and the design of networks. In another sense it is a profound demonstration of individual liberty, a demand for freedom, privacy and anonymity on the Internet. Here I will give a brief outline of the technical details of Anomos. As the project is still in the early stages of development some aspects of it are still subject to change.
General Features
- File transfers through Anomos are anonymous (the degree of this anonymity will be discussed in a future post). After being sent, packets are routed through a number of intermediary nodes before reaching their final destination. These intermediary nodes can only confirm that their neighbors are participating in the network, they cannot confirm that their neighbors are sharing or merely relaying information, nor can they determine what is being shared.
- Downloading with Anomos is decentralized — the downloader receives parts of the requested file from a number of different sources, similar to how BitTorrent functions.
- Connections within Anomos are End-To-End encrypted.
- Communication with the Tracker is also encrypted.
Growing the Network
Like many BitTorrent systems Anomos relies on a centralized Tracker server to initiate downloads. However, to provide anonymity, the Anomos Tracker has been almost completely redesigned. When a client connects to the Tracker for the first time, they are assigned a small number of neighbors with whom they will directly communicate. Each neighbor the Tracker assigns to the client is given a locally unique ID (meaning that no two neighbors of the client will have the same ID). Using the the IP addresses provided by the Tracker and the local IDs, the client establishes connections with their neighbors.

After the connections have been formed the network may look like this:

Tracking Codes
Much of the power of Anomos comes from its “tracking code†system. The Tracker maintains a weighted undirected graph modeling the network. The graph’s vertices (the circles in the above images) represent clients, the edges (the arrowed lines) represent connections, and the weights (not pictured above) allow for fine grained control of how connections are formed (for instance: the tracker may route less traffic through peers who are heavily loaded). When an anonymous connection needs to be formed, the Tracker computes a path between the two peers involved. The path consists of a list of the peers through whom the packets should pass. The tracker then uses the numbered connections between those peers to create a description of the path (called a Tracking Code) which can be given to anyone without compromising the anonymity of the uploader or downloader. For instance if P0 wants to send a request to P9 then the Tracking code for that connection might be “0:1:2:4:0″

When P0 receives the tracking code, she creates the packet which needs to be sent, pops the first number off the tracking code, and sends the packet to her neighbor with that number. The process is repeated until the packet gets to its destination. Astute readers may notice that with this scheme the tracking codes would shrink and thereby reveal the recipient of the message at the second to last node. The actual codes are padded with a pseudorandom number at each node in the circuit to prevent this. You might also notice that with this scheme the recipient of the message doesn’t immediately know whether to pass the message on or to keep it. In order to resolve this, each peer initially assumes that they are the intended recipient and therefore try to decrypt the message. If the result of the decryption is garbage they pass the message on as per the Tracking Code, otherwise they respond. We’ve come up with a much better way to do this.
Requesting a file
If a client wants to download a file he first requests it from the tracker over secure HTTP. The tracker finds a small number of other users who have the file or parts of it and generates Tracking codes which connect the downloader to each of them. The Tracker also crafts the request data to be sent to each of these peers and encrypts it with each respective peer’s public key (which the Tracker knows but the downloader does not). This allows us to do end-to-end encryption without the uploader or downloader gleaning information about the network from seeing the same public key multiple times. The Tracker also generates an AES key for encrypting further communications between uploader and downloader. Here’s an example of a response the client might receive:

After receiving this, the client will create a packet containing the data in red (which the client himself cannot read), and send it through the network.
Sharing
After the initial request, the AES key generated by the Tracker is used to encrypt data between the two sharers. These sharers then pass messages in almost exactly the same way they would have in BitTorrent. The downloader sends a request, the uploader responds with a chunk.
Misc
In BitTorrent share ratios (the ratio of Amount Uploaded / Amount Downloaded) are used to punish peers who take without giving back. This can often be a barrier to entry for peers with few files or files which are not popular. Anomos helps these peers by adding their Amount Relayed to their Upload count, thereby rewarding people who donate their bandwidth to help others share anonymously.
I’ve presented some of the basics about the Anomos P2P system here, in future posts I will discuss more advanced topics such as how dropped connections are handeled, the level of anonymity the system provides, and perhaps an overview of the BitTorrent protocol.
We’ll be putting the source code repository online soon. If you’d like to be informed of major developments or would be interested in testing (several months from now) send us an email at: participate
anomos.info
- John




Hello, I was looking around for a while searching for what is data encryption and I happened upon this site and your post regarding What is Anomos?, I will definitely this to my what is data encryption bookmarks!
Does this mean that all clients within the same ‘swarm’ (if that term applies to Anomos in the same way it does to bittorrent) are involved in downloading / seeding the same file? As in, the network is made up of a large number of discrete swarms all sharing difference pieces of content, just as bittorrent is (ignoring the dhts for a moment)?
If so, I’m wondering if that means that ppl like the RIAA would still be able to connect and collect IPs because even while I’m receiving data from P4 which originally came from P9, P4 must still be involved in the swarm at some level – and is still facilitating the transfer of content, just as is the tracker. I realise you’re more concerned with anonymity than with what I guess you could call privacy, but hopefully I’ve explained myself so that you can understand the question.
@pat, Thanks for the question.
Not all clients involved in a relay will be in the same swarm. The tracker (assuming it’s serving more than one file — as most bittorrent trackers do) assigns neighbors randomly from it’s pool of all peers. So in your example P4 most likely has not participated in uploading/downloading the file that you’re receiving from P9. They may not even know that the tracker is serving that file, and have no way (ignoring extremely sophisticated attacks) of finding out which file they’re relaying.
Just read this and it made me enthusiastic for this project. One question arose and maybe you can answer:
Why is the tracker not anonymously run as a TOR hidden service as well?
I believe that this could have some positive effects:
a) the tracker does not know the clients real IP
b) the tracker cannot be brought down
c) no incoming ports are needed, such no fiddling with routers/firewalls for the unexperienced
d) …. and maybe many more ;)
on the other hand, the design overhead for the above may be close to nil :).
cheers & tia
Idea: Thanks for the question, There’s no reason the tracker couldn’t be run as a hidden service, however, peers would still have to provide their actual IP addresses to the tracker (so that neighbor connections could be made). We’ve toyed with the idea of letting peers give the tracker a .onion address instead. This would allow the peer’s neighbors to make the initial connection over TOR, and afterwards they could exchange IPs and renegotiate the connection to get better performance (assuming you don’t mind letting neighbor nodes know that you’re participating in the anomos network, they still won’t know what you’re sharing or with whom). Renegotiating the neighbor connections would be necessary, otherwise it would probably wind up being slower than just running BitTorrent over Tor. Off the top of my head I can think of a few attacks that would destroy the anonymity gained by doing this, such as a malicious tracker running a client and making it a neighbor of every other peer in the network. But, if the intent is simply to protect oneself against the possibility of a good tracker being compromised at some point in the future, this strategy may be useful.
John,
thanks a lot for the answer. I thought running the tracker as a .onion would make it robust against being attacked by authorities, should someone share copyprotected material via Anomos. I do share the view that compromising anonymity becomes a problem, as soon as ip adresses need exchanging.
To me, and please excuse if I have not fully understood the concept yet, it appeared that the tracker seems to know all about the parties communicating with each other and what they share. With this in mind, wouldn’t I want (as Eve) to set up a tracker and gain intelligence about all ppl sharing material?
To the other hand, the TOR design seems to be pretty robust in terms of hiding services as well as the fact which parties communicate with each other and it even keeps the parties anonymous towards each other.
What if the TOR model would be adopted and the design would exclusively use .anomos (as opposed to .onion;) adresses to communicate with each other, maybe even including trackers? Such no central authority would have full knowledge, neither would the nodes be able to identify each other.
What about being anonymous for your ISP? Is that possible, does anomos do that, what about a normal proxy?
will check back later
I see you have a first draft of the routing scheme. I want to participate and have a proposal for maximum performance. All nodes in a swarm shoud be available as peers and not only a few selected. Exactly two intermediate nodes is needed and not more. These are random neighbours to each peer in a peeer-to-peer connection. These neighbours are changed at a regular interval to keep the connection stable. Thats all. Anything differing from this is not optimal and overkill.
Note. Each peer-to-peer connection has its unique two intermediate nodes. These are selected from all users and not only from the swarm.
Why only connect to a fuzzy local neighbourhood network? It is only a matter of probability for the whole intermediate chain of nodes to be infiltratable by a spy. Globally with 0 and 1 and 2 occuring intermediate nodes is better.
Example. With 2 intermediate nodes the chain is infiltrated if both infiltrators unluckily are chosen as intermediates. 0 and 1 and 2 occuring intermediate nodes gives some fuzziness above that and even better performance.
Then raise the number of intermediate nodes incrementally as home networks get higher capacity. You did not cut away peers from the swarm under a 100/100 Mb connection in the first place did you???
Example. A maximum of N intermediate nodes (found out empirically or by knowledge) needs N unlucky chosen infiltrating spy nodes in an Amomos user’s local neighbourhood to intercept her as a peer. If global peers instead with local intermediate nodes no focused spying can take place. High N:s will cost performance………Who the hell reads this anyway?………..
I reinterpretated your text and now finally I see that we mean the same.
“Freedom” is won….
Disclaimer. Actually 0 and 1 occuring intermediate nodes is needed but that gives on the bound 50% vs 33% for a maximum of 2 occuring nodes that there was 0 intermediate nodes in the relay. Is 33% to unsure for legal actions when peer interception is possible on the network or must N go to infinity?
Conclusion. Anonymous data packet Infinite length circuit switching
Anonymous data packet (if and only if) Infinite length circuit switching
Hi, is possible runing tracker on onion hidden service ?
i am runing now tracker on hidden service, if i try seeding first time torrent, others peers now my ip adress ?
The tarcker url https://pe2nwsuxa3c5spbz.onion
or http://pe2nwsuxa3c5spbz.onion:443/
Thanks
It is possible to run a tracker as a Tor hidden service, but it requires the users to report their actual IP to the tracker, which is a provided option.
TorUser, Rich: It’s actually not possible yet because we don’t have support for SOCKS proxies, but we intend on adding the feature in the near future.
so this all means that my isp wont really know what i am downloading? i am kinda new in this world, so i just want to make sure i understand.
in any way, even if the data is encrypted the isp’s may be able to decrypt it, not?
thanks.
forgot to ask, does it work in all of the countries? what about france?
how do you use this program with uttorent. there are no instructions. or i couldnt find them. please help.
What about ‘private trackers’? Can you use this with a passkey and ratio tracking? (I’m thinking not).
Hi
this project is dead ?
whats news ?
@gboy @mastero @cptcarter1st and @all
bittorrent on the i2p network is already working and does something similar to the proposed anomos bt network.
for a list of already anonymously shared stuff see e.g. tracker2.postman.i2p.to
to download i2p go to i2p2.de
@hello
1) i don’t trust software from anonymous developer, what the name of zzz ?
2) is java, i don’t want to use 50% of my CPU to share my files !
3) the newer version of i2p use 2,3… tunnels from same node. do you now about that ???
How are you going to avoid pedophile activity?
Idea:
Why not add data repository encryption as well? What is mean is that one could upload an (already encrypted) file to a location where public access to a file is possible (e.g. through HTTP). The atorrent file then also contains decryption key for the seed in the public access location, which is upon packet download automatically decrypted.
Another idea:
Why not create inter-link trackers expanding the ad-hoc networks to a full fledged P2P network, with a protocol extension that would allow looking up atorrent files as well, next to merely downloading them? To link ad-hoc networks, you could use the Anomos clients downloading/uploading multiple files, hence having access to multiple ad-hoc networks. In this way, you could, either ad-hoc or permanently, interlink the networks in a random way during downloading as well, so that any infiltration attempts are further frustrated to the point of impossibility.
I myself am really interested in this, and had a project in mind since about a year ago that would work in almost entirely the same way as what you explained here, with the inclusion of more features such as these which I mentioned before. Never had the time to realize it unfortunately, although i’d love to assist you guys in trying to think of solutions for any outstanding issues you might be having.
Best,
Bruno
University of Amsterdam – FNWI Faculty, Artificial Intelligence
Have you guys thought about decentralizing the tracker? Trust based systems will always be a tough sell for the security-minded. A malicious tracker could log IPs, hand out bogus AES session keys, thereby being able to decrypt, even mount attacks on other friendly trackers.
Howdy,
i’ve a tracker running for testing now:
https://christian667.dyndns.org
BUT:
How many leecher have to connect and download one file to get the download started? is the “new” tracking code system – as linked in the main story above – allready working and built in .95?
Is still somebody working on this code? It seems nearly finished for a first main release and for public use..
regards
Has this project gone dead?
The theory behind it seems to put a lot of weight on the tracker which could dramatically slow down the trackers server.
It would be great to include anomos system in a client bittorrent like bittornado, and create an anomos tracker!
Is there any tracker currently running Anomos? It looks very interesting.
How that’s different from Japanese P2P software Perfect Dark ?
What type of encryption are you using? RC4, AES, twofish, etc?