After 4 weeks of downtime my sites are online again.
Basic building blocks for communication in Freenet.
This is a guide to using Freenet as backend for communication solutions - suitable for anything from filesharing over chat up to decentrally hosted game content like level-data. It uses the Python interface to Freenet for its examples.
This guide consists of several installments: Part 1 (this text) is about exchanging data, Part 2 is about confidential communication and finding people and services without drowning in spam and Part 3 ties it all together by harnessing existing plugins which already include all the hard work which distinguishes a quick hack from a real-world system. Happy Hacking and welcome to Freenet, the forgotten cypherpunk paradise where no one can watch you read!
Written in the discussion about a pull request for Freenet.
When I look up a commit, I’m not searching for prose. I’m searching for short snippets of information I need. If they are long-winded explanations, I am unlikely to even read them.
To understand this, please imagine coming back home, getting off the bike and taking 15 minutes to look at the most recent pull-request.
Samantha Cristoforetti reads the Hitchhikers Guide to the Galaxy on the International Space Station
This is the world we live in: The Hitchhikers Guide read from Space.
If you don’t get goosebumps just thinking about it, envision it again: The old visions are becoming real step by step, and now those who actually venture in space read the works of visionaries from their temporary home beyond the atmosphere.
New traditions form from a reality which still seems
How E-Mail with GnuPG could hide when you talk, where you talk from and what you talk about.
or in technical terms:
E-Mail with perfect forward security, hidden subject and masked date using GnuPG and better frontends.
Here I want to show how it would be possible to use E-Mail with GnuPG to get close to the confidentiality of Freenet friend-to-friend communication, because we have the tech (among the most heavily scrutinized and well-tested technology we use today) and we have the infrastructure. All it requires are more intelligent E-Mail clients. Better UI which makes the right thing easy.
If you think “I have no idea what this tool is for”: Infocalypse gives you fully decentralized Github with real anonymity, using only free software.
# freenet -> local hg clone freenet://ArneBab/life-repo # local -> freenet hg clone life-repo real-life hg clone real-life freenet://ArneBab/real-life # send pull request cd real-life hg fn-pull-request --wot ArneBab/life-repo (enter message) # check for pull-requests cd ../life-repo sleep 1800 # (wait for confidential delivery) hg fn-check-notifications --wot ArneBab
If you like this, please don’t only click
+1, but share it with everyone who could be interested. The one who knows best how to reach your friends is you — and that’s how it should be.
This guide shows the convenient way of working which has a higher barrier of entry. It uses WoT Pseudonyms to allow you to insert repositories by Pseudonym and repository name. If you can cope with inserting by private key and sending pull-requests manually, you can use it without the WoT, too, which reduces the setup effort quite a bit. Just skip the setup of the Web of Trust and Freemail and plugins. You can then clone the life repo via
hg clone freenet://USK@6~ZDYdvAgMoUfG6M5Kwi7SQqyS-gTcyFeaNN1Pf3FvY,OSOT4OEeg4xyYnwcGECZUX6~lnmYrZsz05Km7G7bvOQ,AQACAAE/life-repo.R1/4 life-repo. See
hg fn-genkey and
hg help infocalypse for details. ↩
Clearly you are my greatest failure. Now at long last, you will die.
Again Mengsk activates the Xel'Naga artifact. As the lightning from the artifact tears at her flesh and cracks every part of her body, Kerrigan rasps an answer:
This is what I’d have wished to see. ↩
The one thing I resent about Kerrigan in Starcraft 2 is that they made her weak.
In SC1 Kerrigan embraced and ruled the swarm. She started as strong terran, never to let anyone talk down to her, never afraid to say what she wanted. Then she got infested, and she prevailed over the infestation, becoming the queen of blades, ruling the Zerg instead of being ruled by the Overmind.
In the cutscenes of SC2 she’s a helpless wreck, ever reliant upon the help of others and exposed as a tool of the overmind to free the swarm from Amon.
It feels as if someone wrote the story to deconstruct the legend of the queen of blades. The in-game story seems much better, though. ↩
A religious leader is nothing more than a media-star who managed to convince people that the tale, in which he or she is special, is actually true.
Just like aristocrats managed to convince people that what their ancestors did gives them the right to control the lives of other people.
And like the rich convince people that money gives them the right to control a larger part of the world than others.
Creating a daemon with almost zero effort.
I asked myself: Are the most popular articles on my site the ones I like best?
Morning has broken
the words are spoken
now do you dare
to absolve of the error made
or will you die in your own shade?
I planned to get this into a newspaper, but it was too technical for the Guardian and too non-practical for Linux Voice. Then my free time ran out. Today I saw Barret Brown comment his 5 years sentence for quoting a Fox news commentator and sharing a public link. I knew it was time to publish. Welcome to Freenet: The forgotten cryptopunk paradise!
A long time ago in a chatroom far away, select groups of crypto-anarchists gathered to discuss the death of privacy since the NSA could spy on all communications with ease. Among those who proposed technical solutions was a student going by the name sanity, and he published the widely regarded first paper on Freenet: A decentralized anonymous datastore which was meant to be a cryptopunk paradise: true censorship resistance, no central authority and long lifetime only for information which people were actually interested in.
Many years passed, two towers fell, the empire expanded its hunt for rebels all over the globe, and now, as the empire’s grip has become so horrid that even the most loyal servants of the emperors turn against them and expose their dark secrets to the masses, Freenet is still moving forward. Lost to the eye of the public, it shaped and reshaped itself - all the while maintaining its focus to provide true freedom of the press in the internet.
Bitcoin is often treated as a haven for black market buyers and people who want to avoid illegitimate laws. However 3 simple steps would suffice to mostly obliterate Bitcoin for black market usage of ordinary users.
Three steps to break Bitcoin for small scale anonymous usage:
I have to sift through 6 really boring config files. To stay sane, I call in Emacs for support.
My task looks like this:
(click for full size)
»What is the .asc file?« This explanation is intended to be copied as-is into emails when someone asks about your signature.
The .asc file is a signature which can be used to verify that the email was really sent by me and wasn’t tampered with. It can be verified with standard email security tools like Enigmail, Gpg4win or MacGPG - and others tools supporting OpenPGP.
I currently cope with refactoring in an upstream project to which I maintain some changes which upstream does not merge. One nasty part is that the project converted from CamelCase for function names to words_with_underscores. And that created lots of merge errors.
Today I finally decided to speed up my work.
The first thing I needed was a function to convert a string in CamelCase to words_with_underscores.
By default Emacs Orgmode uses uppercase words for todo keywords. But having tens of entries marked with TODO and DONE in my file looked horribly cluttered to me. So I searched for alternatives. After a few months of experimentation, I decided on the following scheme.
I sent this email to many of my friends to regain confidential private communication. If you want to do the same, feel free to reuse the text-version (be sure to replace the noderef textblock with your own noderef from http://127.0.0.1:8888/friends/myref.txt).
About 10% of my friends joined - which is enough to build the darknet and makes it possible for me to speak freely again.
First: The Essence of this text:
I’ve been censoring my emails for years. Not just what I write, but also whom and when.
Freenet allows me to write invisible messages to my friends. Those are messages I do not need to censor. They give me freedom. Surveillance can show that we could write, but not whether, when or what we actually write. If Freenet is used for that, it needs very little resources.
This is how to connect:
- Download and install Freenet from https://freenetproject.org,
- in the automatically opened setup wizard select “only friends”
- Copy the textblock1 you got with my email and paste it into the textfield on http://127.0.0.1:8888/addfriend/
- Then just send me what Freenet shows on the page http://127.0.0.1:8888/friends/myref.txt (attach to an email or just copy it into the email)
As soon as I add you, too, we are connected. We can then write messages via the friends page (click my name):
- Write message,: http://127.0.0.1:8888/friends/
- Read messages: http://127.0.0.1:8888/alerts/
Censored version of my textblock (you’ll get an uncensored version by email)
Easily answering the question: “How much space does this need?”
Because I am lazy,1 and that makes me fast.
Using Macros to avoid tedious tasks
I have lots of stuff to do, so I cannot afford not being lazy ☺ ↩
I just watched the short film Ambition from ESA, and I still have tears in my eyes.
The film is awesome.
→ In don't run 'strings' on untrusted files Michal Zalewski complained that running the strings-utility for computer forensics or other fields of information security could make you vulnerable yourself, so you should not use that. Given that strings is Free Software, I find a different conclusion from the vulnerability of tools used by professional forensics people.
I’d say if you’re actually using these tools to earn money, it is high time to go in and fix them.
In the last years, spam became worse and worse. The more my site grew, the more time I had to spend deleting blatant advertisements. Even captchas did not help anymore: Either they were so hard that I myself needed 3 tries on average to get through, or I got hundreds of spam messages per day. A few years ago, I caved in and disabled comments. The alternative would have been to turn my Website into a mere PR-outlet of Facebook, twitter or one of the commenting platforms out there.
» babcom: decentralized, spam-resistant comments! «
I just finished lots of new uploads of sites into freenet - with the new freesitemgr (which actually uploads quickly when WoT is disabled, check todays IRC-logs tomorrow to get background on that). You can get the new freesitemgr from github.com/ArneBab/lib-pyfreenet-staging or via infocalypse:
hg clone freenet://USK@kDVhRYKItV8UBLEiiEC8R9O8LdXYNOkPYmLct9oT9dM%2CdcEYugEmpW6lb9fe4UzrJ1PgyWfe0Qto2GCdEgg-OgE%2CAQACAAE/pyfreenet.R1/14
The sites are also available via my freenet inproxy:
freenet-team - an introduction of most of the freenet hackers I know.
mathmltest - example of mathml in freenet.
winterface-deadlines - deadlines for the Winterface GSoC project
freenet-funding - the freenet fundraising plan, still lacking good design and crisp presentation slides or a video
freenet-meltdown - on the recent massive performance degradation which lasted a few month and ended with the link length fix.
fix-link-length - background on the link-length fix which made freenet actually do small world routing again instead of random routing (into which it had degraded, partially due to local requests, partially due to having so many peers per node that random routing actually worked for the current network size, so the pressure by routing-success to go back to small world routing was too weak compared to the pressure from local requests to randomize the connections)
download-web-site - how to download a single page from a website - for example to mirror it into freenet. Hint: For all the sites on draketo.de or 1w6.org you are allowed to do so freely (licensed under GPL).
guiledocs - the online documentation for GNU Guile with a focus on Scheme (using Guile): A powerful lisp-like language with multiple implementations.
decorrespondent-metadata - experiment how much information one can glean about your life from just one week of metadata, in dutch.
netzpolitiz-metadaten - same article translated to german. License: cc by-nc-sa
Adventures of a Pythonista in Schemeland - the adventures of a Pythonista in Schemeland: A deep understanding of Scheme for Python users. I learned to love Scheme with this. BSD license.
programming-languages - The Programming languages lecture. License: cc by-nc-sa
tao of programming - "When you have learned to snatch the error code from the trap frame, it will be time for you to leave."
Often I want to simply backup a single page from a website. Until now I always had half-working solutions, but today I found one solution using wget which works really well, and I decided to document it here. That way I won’t have to search it again, and you, dear readers, can benefit from it, too ☺
wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories --span-hosts --adjust-extension --no-check-certificate -e robots=off -U 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:220.127.116.11) Gecko/20070802 SeaMonkey/1.1.4' [URL]
I needed to calculate the probability that for every freenet user there are at least 70 others in a distance of at most 0.01. That needs binomial coefficients with n and k on the order of 4000. My old Python script failed me with an
OverflowError: integer division result too large for a float. So I turned to Guile Scheme and exact math.
Freenet provides a global, anonymous datastore where you can upload sites which then work like normal websites. But different from websites, they have a version-number.
The reason for this is, that you can only upload to a given key once1. This data then gets stored in the network and is effectively immutable (much like immutable data structures in functional programming).
If you try to upload to a given key twice, you can get collisions. In that case, it isn’t clear which data a client will retrieve - similar to race conditions in threaded programs. That’s why we do not write to the same key twice in practice (though there is a key-type which can be used for passwords or simple file-names. It is called KSK and was the first key-type freenet provided. That led to wars on overwriting files like gpl.txt - similar to the edit-wars we nowadays get on Wikipedia, but with real anonymity thrown in ☺). ↩
I just discussed with “sceptics” on twitter about climate change. There Ronan Connolly (@RonanConnolly) showed me his article which tries to give the impression that there is no scientific consensus that climate change is man-made.