While i2p's node DB isn't exactly in the clear. There's not so many of us that you can't getting pretty good picture of where it's running.
China's already doing a really good job at blocking it. The protocol is secure in that you can't tell what anybody is doing on it. And the node DB is only somewhat accessible. But that's nothing a little coordinated espionage won't suss out.
Every ISP throws out a couple of honeypots. You don't allow nodes to stay connected to it for long so everybody keeps refreshing it. They're thinking it's a DDOS. It's distributed fingerprinting.
You throw up a node, record its regular traffic, start up I2P and see who it connects to. F with your netem so they connect, but eventually discard that connection because it's unstable. You get to cycle through a bunch of connections that way. Everybody who sends more than a SQL injection script to it is running I2P. You occasionally dump people off of it. New people try to connect. You dump them off of it. You create a list. That particular list isn't worth much, the spread factor is kind of low on the protocol. But you share your IPs with everyone else that's running honeypots. Or you just throw out a lot of honey pots in a lot of places if you're a state actor. Everybody that hits the list gets logged.
We're heading towards some dystopian shit now. If ISPs get to the point where they're allowed to kick you off for suspicion of shady things, the protocol is baked.
It's nearly impossible to identify the traffic. It's fairly impossible to identify the origin or the destination of things from inside the network. It's difficult to block individual connections from happening you're real time. But, if they manage to make unidentified traffic illegal, it's not that hard to detect that I-2p is happening and kick people off wholesale. Once the list is shared, they could just black-ball the IPs on every ISP for any connection.
The real problem is, I'm having a really hard time finding some protocol or method that wouldn't fall to this. You could easily hide some really low bandwidth stuff stego style in audio or video streaming from person to person, like say, forum traffic, but if you wanted to stop people from moving music and videos back and forth, I don't know that you could hide that traffic through any means.
