3 Are you a real IPv6 friend?
7 People like you and me don't want or need Facebook. However, we do
8 want to securely communicate with our friends. And chat with them. And
9 know when they are online. Let's solve this problem once-and-for-all
10 in a decentralised, sustainable and future proof way.
12 ## Here comes the real IPv6 friend
14 Instead of using a single system or server, we use IPv6 to connect to
15 our friends directly. Because each of our friends is reachable by IPv6
16 if they are online (otherwise they would not be a real IPv6 friend),
17 we can easily verify if they are online. To find out who is online,
18 just connect to their computer!
22 It's a bit geeky, but it works actually rather simple.
23 To become a real IPv6 friend, you need to do the following things:
25 - Generate a GPG key with a comment named **RIF** following the URL of
26 your computer (f.i. **RIF https://nico.ungleich.cloud**)
27 - Ensure that the URL points to the IPv6 address of your computer
28 - Setup a webserver on your computer
29 - Export your key and all real IPv6 friend keys to your webserver as
31 - For each of your friends, check whether they are online
32 - Import the friends of your friends and check whether they are
35 ### Example: Generating a key with the right comment
37 In this example I choose to create an ECC based key that requires the
41 [1:24] line:~% gpg --expert --full-gen-key
42 gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc.
43 This is free software: you are free to change and redistribute it.
44 There is NO WARRANTY, to the extent permitted by law.
46 Please select what kind of key you want:
47 (1) RSA and RSA (default)
51 (7) DSA (set your own capabilities)
52 (8) RSA (set your own capabilities)
55 (11) ECC (set your own capabilities)
58 Please select which elliptic curve you want:
68 Please specify how long the key should be valid.
69 0 = key does not expire
70 <n> = key expires in n days
71 <n>w = key expires in n weeks
72 <n>m = key expires in n months
73 <n>y = key expires in n years
74 Key is valid for? (0) 0
75 Key does not expire at all
76 Is this correct? (y/N) y
78 GnuPG needs to construct a user ID to identify your key.
80 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? c
81 Comment: RIF https://nico.ungleich.cloud
82 You selected this USER-ID:
83 "Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>"
85 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
86 We need to generate a lot of random bytes. It is a good idea to perform
87 some other action (type on the keyboard, move the mouse, utilize the
88 disks) during the prime generation; this gives the random number
89 generator a better chance to gain enough entropy.
90 We need to generate a lot of random bytes. It is a good idea to perform
91 some other action (type on the keyboard, move the mouse, utilize the
92 disks) during the prime generation; this gives the random number
93 generator a better chance to gain enough entropy.
94 gpg: key 27541E11E73F288D marked as ultimately trusted
95 gpg: directory '/home/nico/.gnupg/openpgp-revocs.d' created
96 gpg: revocation certificate stored as '/home/nico/.gnupg/openpgp-revocs.d/B982A8BABC030C66DEF5984527541E11E73F288D.rev'
97 public and secret key created and signed.
99 pub ed25519 2019-09-09 [SC]
100 B982A8BABC030C66DEF5984527541E11E73F288D
101 uid Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>
102 sub cv25519 2019-09-09 [E]
107 ### Example: Setting up a webserver
109 On a Debian/Devuan based distro:
113 sudo chown $(whoami) /var/www/html
117 ### Exporting all keys
119 To make yourself accessible and expose who your real IPv6 friends are.
122 gpg -a --export RIF > /var/www/html/rifkeys
125 ### Example: List your friends
127 You can use the included rif-listfriends.sh or directly gpg:
130 [1:40] line:~% gpg --list-keys --with-colons | grep RIF | awk -F: '{ print $10 }' | sed 's/\\x3a/:/'
131 Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>
132 Nico Schottelius (myself) (RIF https://nico2.ungleich.cloud) <nico@nico.ungleich.cloud>
136 ### Example: Checking which friends are online
138 Use the included rif-checkfriends.sh script or iterate yourself over
142 [1:54] line:realipv6friend% sh rif-checkfriends.sh
143 Checking Nico Schottelius on https://nico.ungleich.cloud ...
144 Nico Schottelius is online
145 Checking Nico Schottelius (myself) on https://nico2.ungleich.cloud ...
146 Nico Schottelius (myself) is offline
147 [1:54] line:realipv6friend%
151 ### Example: Importing friends of my friend
153 Importing friends of a friend is as simple as importing all the
154 exported keys! We import friends directly from the URL of a friend:
157 curl -6 -s https://nico.ungleich.cloud/rifkeys | gpg --import
160 You can also use the included rif-importfriends.sh.
163 ### Example: Updating your friends
165 Now that you have imported the friends of your friends, they have
166 automatically also become your friends!
168 Obviously, you will want to check whether you even want to sign some
169 of the friends (keys) that you downloaded, but clearly you want to
170 show off with the biggest amount of friends (that's what is most
171 important anyway, isn't it?).
173 In any case, to update your friend list, simply repeat the command you
174 ran above already in the beginning:
177 gpg -a --export RIF > /var/www/html/rifkeys
180 Or use the included `rif-exportfriends.sh`
182 ### Example: Importing friends of all friends and exporting them
184 From time to time you might want to checkup on which friends gained
185 new friends and add them to your friend list. This is as easy as
186 iterating over all your friends and importing their friends into your
187 friends list. And because you are a good friend, you might want to
188 export all friends again.
190 To make things easy, the included a script `rif-friendimportexport.sh`
191 automates this process.
194 ### Example: Sending a message to a friend
196 You can probably just use your mail program for that - and you might
197 even be able to send it IPv6 only!
201 As real IPv6 friends are decentralised, there is no central registry
202 of friends. Just startup the webserver on your machine, export your
203 key(s) and ping your friend.
205 With every friend that is added to your network, the reach grows in
206 the chain of all friends of every friend!
208 So just start in your small cycle and forward your friend URL to your
214 Real IPv6 friend is a project launched by Nico Schottelius on 2019-09-10.
215 If you want to become my friend, my friend URL is https://nico.ungleich.cloud.