Include friendchecker
This commit is contained in:
parent
9cda2ce9b8
commit
3b8e2bff86
2 changed files with 151 additions and 0 deletions
137
README.md
137
README.md
|
@ -10,3 +10,140 @@ know when they are online. Let's solve this problem once-and-for-all
|
||||||
in a decentralised, sustainable and future proof way.
|
in a decentralised, sustainable and future proof way.
|
||||||
|
|
||||||
## Here come's the real IPv6 friend
|
## Here come's the real IPv6 friend
|
||||||
|
|
||||||
|
Instead of using a single system or server, we use IPv6 to connect to
|
||||||
|
our friends directly. Because each of our friends is reachable by IPv6
|
||||||
|
if they are online (otherwise they would not be a real IPv6 friend),
|
||||||
|
we can easily verify if they are online. To find out who is online,
|
||||||
|
just connect to their computer!
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
It's a bit geeky, but it works actually rather simple.
|
||||||
|
To become a real IPv6 friend, you need to do the following things:
|
||||||
|
|
||||||
|
- Generate a GPG key with a comment named RIF following the URL of
|
||||||
|
your computer
|
||||||
|
- Ensure that the URL points to the IPv6 address of your computer
|
||||||
|
- Setup a webserver on your computer
|
||||||
|
- Export your key and all real IPv6 friend keys to your webserver as
|
||||||
|
"rifkeys.txt
|
||||||
|
- For each of your friends, check whether they are online!
|
||||||
|
|
||||||
|
### Example: Generating a key with the right comment
|
||||||
|
|
||||||
|
In this example I choose to create an ECC based key that requires the
|
||||||
|
export option in gpg:
|
||||||
|
|
||||||
|
```
|
||||||
|
[1:24] line:~% gpg --expert --full-gen-key
|
||||||
|
gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc.
|
||||||
|
This is free software: you are free to change and redistribute it.
|
||||||
|
There is NO WARRANTY, to the extent permitted by law.
|
||||||
|
|
||||||
|
Please select what kind of key you want:
|
||||||
|
(1) RSA and RSA (default)
|
||||||
|
(2) DSA and Elgamal
|
||||||
|
(3) DSA (sign only)
|
||||||
|
(4) RSA (sign only)
|
||||||
|
(7) DSA (set your own capabilities)
|
||||||
|
(8) RSA (set your own capabilities)
|
||||||
|
(9) ECC and ECC
|
||||||
|
(10) ECC (sign only)
|
||||||
|
(11) ECC (set your own capabilities)
|
||||||
|
(13) Existing key
|
||||||
|
Your selection? 9
|
||||||
|
Please select which elliptic curve you want:
|
||||||
|
(1) Curve 25519
|
||||||
|
(3) NIST P-256
|
||||||
|
(4) NIST P-384
|
||||||
|
(5) NIST P-521
|
||||||
|
(6) Brainpool P-256
|
||||||
|
(7) Brainpool P-384
|
||||||
|
(8) Brainpool P-512
|
||||||
|
(9) secp256k1
|
||||||
|
Your selection? 1
|
||||||
|
Please specify how long the key should be valid.
|
||||||
|
0 = key does not expire
|
||||||
|
<n> = key expires in n days
|
||||||
|
<n>w = key expires in n weeks
|
||||||
|
<n>m = key expires in n months
|
||||||
|
<n>y = key expires in n years
|
||||||
|
Key is valid for? (0) 0
|
||||||
|
Key does not expire at all
|
||||||
|
Is this correct? (y/N) y
|
||||||
|
|
||||||
|
GnuPG needs to construct a user ID to identify your key.
|
||||||
|
|
||||||
|
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? c
|
||||||
|
Comment: RIF https://nico.ungleich.cloud
|
||||||
|
You selected this USER-ID:
|
||||||
|
"Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>"
|
||||||
|
|
||||||
|
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
|
||||||
|
We need to generate a lot of random bytes. It is a good idea to perform
|
||||||
|
some other action (type on the keyboard, move the mouse, utilize the
|
||||||
|
disks) during the prime generation; this gives the random number
|
||||||
|
generator a better chance to gain enough entropy.
|
||||||
|
We need to generate a lot of random bytes. It is a good idea to perform
|
||||||
|
some other action (type on the keyboard, move the mouse, utilize the
|
||||||
|
disks) during the prime generation; this gives the random number
|
||||||
|
generator a better chance to gain enough entropy.
|
||||||
|
gpg: key 27541E11E73F288D marked as ultimately trusted
|
||||||
|
gpg: directory '/home/nico/.gnupg/openpgp-revocs.d' created
|
||||||
|
gpg: revocation certificate stored as '/home/nico/.gnupg/openpgp-revocs.d/B982A8BABC030C66DEF5984527541E11E73F288D.rev'
|
||||||
|
public and secret key created and signed.
|
||||||
|
|
||||||
|
pub ed25519 2019-09-09 [SC]
|
||||||
|
B982A8BABC030C66DEF5984527541E11E73F288D
|
||||||
|
uid Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>
|
||||||
|
sub cv25519 2019-09-09 [E]
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Setting up a webserver
|
||||||
|
|
||||||
|
On a Debian/Devuan based distro:
|
||||||
|
|
||||||
|
```
|
||||||
|
apt install nginx
|
||||||
|
sudo chown $(whoami) /var/www/html
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Exporting all keys
|
||||||
|
|
||||||
|
To make yourself accessible and expose who your real IPv6 friends are.
|
||||||
|
|
||||||
|
```
|
||||||
|
gpg -a --export RIF > /var/www/html/rifkeys
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: List your friends
|
||||||
|
|
||||||
|
```
|
||||||
|
[1:40] line:~% gpg --list-keys --with-colons | grep RIF | awk -F: '{ print $10 }' | sed 's/\\x3a/:/'
|
||||||
|
Nico Schottelius (RIF https://nico.ungleich.cloud) <ipv6@nico.ungleich.cloud>
|
||||||
|
Nico Schottelius (myself) (RIF https://nico2.ungleich.cloud) <nico@nico.ungleich.cloud>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Checking which friends are online
|
||||||
|
|
||||||
|
Use the included rif-checkfriends.sh script or iterate yourself over
|
||||||
|
above output.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## To be added
|
||||||
|
|
||||||
|
- advanced usage -> ipv6 email
|
||||||
|
|
||||||
|
### CLI ideas
|
||||||
|
|
||||||
|
- **rif prepare**: check webserver, keyring, etc.
|
||||||
|
- **rif online**: check who is online
|
||||||
|
|
14
rif-checkfriends.sh
Normal file
14
rif-checkfriends.sh
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# 2019-09-10, Nico Schottelius, Seoul
|
||||||
|
|
||||||
|
gpg --list-keys --with-colons | grep RIF | awk -F: '{ print $10 }' | sed 's/\\x3a/:/' | (
|
||||||
|
while read line
|
||||||
|
do name=$(echo $line | sed 's/\(.*\)(.*/\1/')
|
||||||
|
# Assume by default offline
|
||||||
|
online=offline
|
||||||
|
url=$(echo $line | sed -e 's/.*(RIF //' -e 's/).*//')
|
||||||
|
echo "Checking $name on $url ..."
|
||||||
|
curl -s "$url" > /dev/null && online=online
|
||||||
|
echo $name is $online
|
||||||
|
done
|
||||||
|
)
|
Loading…
Reference in a new issue