diff --git a/opsec/anonymityexplained/3.png b/opsec/anonymityexplained/3.png new file mode 100644 index 0000000..365f94e Binary files /dev/null and b/opsec/anonymityexplained/3.png differ diff --git a/opsec/anonymityexplained/4.png b/opsec/anonymityexplained/4.png new file mode 100644 index 0000000..ce6cc02 Binary files /dev/null and b/opsec/anonymityexplained/4.png differ diff --git a/opsec/anonymityexplained/5.png b/opsec/anonymityexplained/5.png new file mode 100644 index 0000000..f14006a Binary files /dev/null and b/opsec/anonymityexplained/5.png differ diff --git a/opsec/anonymityexplained/6.png b/opsec/anonymityexplained/6.png new file mode 100644 index 0000000..92e9251 Binary files /dev/null and b/opsec/anonymityexplained/6.png differ diff --git a/opsec/anonymityexplained/7.png b/opsec/anonymityexplained/7.png new file mode 100644 index 0000000..c4a9db8 Binary files /dev/null and b/opsec/anonymityexplained/7.png differ diff --git a/opsec/anonymityexplained/index.html b/opsec/anonymityexplained/index.html index 4a1356f..a9aad47 100644 --- a/opsec/anonymityexplained/index.html +++ b/opsec/anonymityexplained/index.html @@ -89,7 +89,38 @@ -
The strength of your Anonymity is measured by the odds of finding you amongst a group of people.
+ - Anonymity
let's say your Anonymity is Perfect and you are simply "one human being in the world", the adversary currently has a chance of 1 out of 8 billion to guess that it is you. He'd do better to try and play the lottery than to try and guess that it's you.
+Now let's say the adversary knows that you live in France what are the odds now ?
+Now let's say that the adversary knows you live in France, the odds have been significantly reduced from 1 out of 8 billion to 1 out of 65 million, but still that's not enough to accurately pinpoint you, the probability of the adversary figuring out who you are is still very low.
+ - Pseudonymity
But now let's say that the adversary knows more than that, let's suppose that the adversary knows that you have a masters in cybersecurity, and that you work a general IT job in France, for a software company. Now the odds have shrinked further, especially if the adversary is able to combine multiple sources of data to try and profile you.
+Let's say you are trying to chat on SimpleX while the adversary is in the chat with you, and he sees that you have a gorillaz profile picture, call yourself Nihilist, and talk about Opsec all the time. If the adversary is good at profiling you over time, he could have already shrinked down the odds to 1 out of 10 thousand people. Here we're talking about a drastically reduced anonymity, which we can consider to be pseudonymity. but that is still not enough to know who you are IRL.
+ - Onymity
But you need to be aware that even the tiniest opsec mistake thing can reduce the odds of your anonymity to 1 out of 1, where you are effectively deanonymized. For instance let's say you are in this SimpleX chatroom , and let's say you are sending a picture of your own limited edition monerochan:
+Now the thing is, there are only 100 monerochan plushies out there, if the adversary is the seller of those monerochan plushies, he knows where he sent all of the 100 plushies, therefore your anonymity has been reduced to 1 out of 100 But thing is, upon closer exception it is worse than you may think:
+If you look closer at the image the "Certificate of authenticity" says that it is the 41th monerochan out of the 100 plushies that exist. Therefore if the adversary is the plushie seller, your anonymity odds have been reduced 1 out of 1 As he now knows to whom he sent the 41th plushie. Meaning that you just deanonymized yourself for that particular adversary.
+You get the idea, if you want to remain Anonymous, you need to always ask yourself "how many people could send that?", if you were to send that picture i sent above, you'd realize that this is a bad idea, same as in saying your real IRL name, your phone number, your home address, your home public IP address, etc.
+As you have probably noticed after looking at the footer of any of the blogposts in this blog, they are all licensed under the public domain license. This means that there is no copyright restrictions at all, it is free for all, forever.
+The reason behind this stems from Sum Nihil, where i strongly believe that it doesn't matter who does the work, who gets the fame, who gets to profit off of it, what truly matters is that the work gets done, no matter who does it.
+Here, the work is to make sure that everyone out there knows that when using the right technology in the right way, they cannot be oppressed, silenced, censored, controlled, and governed anymore. If you can help me reach that goal i'm definitely going to welcome it, even if it means to allow other people to run the blog.
+The entire blog is meant to remain available for free, for everyone, over clearnet and over the Tor network. Ideally i'd like it to be resillient to takedowns in the case if something were to happen to it in the future. Therefore, the more people run the blog themselves, the more resillient it will become, and the farther the word will be able to go out there.
+On a debian server (VPS or not), install the following packages:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ sudo apt install nginx wget curl -y
+
+
+
+Then, you need to download the blog somewhere, you can simply git clone it from the blog-contributions gitea repository into the /srv/ directory:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ git clone https://git.nowhere.moe/nihilist/blog-contributions /srv/blog/
+
+
+
+then you can use this nginx configuration (and dont forget to enable it with a symlink to sites-enabled):
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ rm /etc/nginx/sites-*/default
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ vim /etc/nginx/sites-available/blog.nowhere.moe
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ ln -s /etc/nginx/sites-available/blog.nowhere.moe /etc/nginx/sites-enabled/
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ cat /etc/nginx/sites-available/blog.nowhere.moe
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name blog.nowhere.moe;
+ return 301 https://$server_name$request_uri;
+}
+
+server {
+ ######## TOR CHANGES ########
+ listen 4443;
+ listen [::]:4443;
+ server_name blog.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion;
+ add_header Onion-Location "http://blog.nowherejezfoltodf4jiyl6r56jnzintap5vyjlia7fkirfsnfizflqd.onion$request_uri" always;
+ ######## TOR CHANGES ########
+
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ server_name blog.nowhere.moe;
+########################################## HARDENING SSL #############################################
+ ssl_certificate /root/.acme.sh/blog.nowhere.moe/fullchain.cer;
+ ssl_certificate_key /root/.acme.sh/blog.nowhere.moe/blog.nowhere.moe.key;
+ ssl_dhparam /root/.acme.sh/dhparam.pem;
+
+
+# SSL Settings
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
+ ssl_prefer_server_ciphers on;
+
+
+ ssl_session_cache shared:SSL:10m;
+ ssl_session_timeout 10m;
+ ssl_session_tickets off;
+ ssl_ecdh_curve auto;
+
+ # OCSP stapling
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ ssl_trusted_certificate /root/.acme.sh/blog.nowhere.moe/fullchain.cer;
+ resolver 1.1.1.1 208.67.222.222;
+
+ add_header Strict-Transport-Security "max-age=63072000" always;
+
+
+
+
+ access_log off;
+ error_log off;
+###################################END OF HARDENING SSL###########################################
+
+
+
+ root /srv/blog/;
+ rewrite ^/servers/anon.html /opsec/index.html permanent;
+ rewrite ^/servers/(.*)$ /opsec/$1 permanent;
+ index index.html;
+}
+
+but as you can see we're missing the TLS certificates, so let's get them using acme.sh:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ wget -O - https://get.acme.sh | sh -s email=nihilist@contact.nowhere.moe
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ systemctl stop nginx ; acme.sh --issue --standalone -d blog.nowhere.moe -k 4096; systemctl start nginx
+
+
+And now that we have them, let's see if the nginx config is correct:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ nginx -t
+nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
+nginx: configuration file /etc/nginx/nginx.conf test is successful
+
+
+Now that the nginx config is correct let's restart nginx to load in the new config:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ systemctl restart nginx
+
+
+And then we can see that the website is up and reachable at the clearnet domain:
+Now since the clearnet is easily censored nowadays, let's make sure it is also available over Tor. Let's first install Tor:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ apt install tor -y
+
+
+
+Then we git clone the mkp repository to be able to generate an onion hidden service address:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ apt install gcc libc6-dev libsodium-dev make autoconf tor
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ git clone https://github.com/cathugger/mkp224o /srv/mkp224o
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ cd /srv/mkp224o ; ./autogen.sh ; ./configure ; make
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ ./mkp224o datura
+sorting filters... done.
+filters:
+ datura
+in total, 1 filter
+using 12 threads
+daturacccspczuluj2hbgqfcpkjo75hn7bzmuzsm5zys3az6k3su45ad.onion
+daturaxnp7x4ubwlslgyeaft5dabaxotmsaxanayocnpxarc7wi36kid.onion
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ mkdir /var/lib/tor/onions
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ mv daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion /var/lib/tor/onions
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ ls -lash
+total 16K
+4.0K drwx------ 4 debian-tor debian-tor 4.0K Jan 27 15:33 .
+4.0K drwx--S--- 8 debian-tor debian-tor 4.0K Feb 1 15:08 ..
+4.0K drwx------ 3 debian-tor debian-tor 4.0K Jul 12 2023 daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion
+4.0K drwx------ 3 debian-tor debian-tor 4.0K Jan 27 15:48 nihilhfjmj55gfbleupwl2ub7lvbhq4kkoioatiopahfqwkcnglsawyd.onion
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ ls -lash daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion
+total 24K
+4.0K drwx------ 3 debian-tor debian-tor 4.0K Jul 12 2023 .
+4.0K drwx------ 4 debian-tor debian-tor 4.0K Jan 27 15:33 ..
+4.0K drwx------ 2 debian-tor debian-tor 4.0K Jul 12 2023 authorized_clients
+4.0K -r-------- 1 debian-tor debian-tor 63 Jul 12 2023 hostname
+4.0K -r-------- 1 debian-tor debian-tor 64 Jul 12 2023 hs_ed25519_public_key
+4.0K -r-------- 1 debian-tor debian-tor 96 Jul 12 2023 hs_ed25519_secret_key
+
+
+
+Then after copying the hidden service files where they belong we change the directory rights accordingly:
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ chmod 700 daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ chmod 400 daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion/*
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ chmod 700 daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion/authorized_clients -R
+
+[ Datura ] [ /dev/pts/11 ] [lib/tor/onions]
+→ chown debian-tor: /var/lib/tor/onions -R
+
+
+Then we edit the torrc config file to make sure it uses the correct hidden service directory, along with a port to be used to access the website:
+
+[ Datura ] [ /dev/pts/11 ] [/srv/mkp224o]
+→ cat /etc/tor/torrc
+HiddenServiceDir /var/lib/tor/onions/daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion/
+HiddenServicePort 80 127.0.0.1:4443 # for web service HTTP (recommended!)
+HiddenServicePort 443 127.0.0.1:4444 # for web service HTTPS (but not recommended!)
+
+HiddenServicePort 18080 127.0.0.1:18080 # for monero nodes
+HiddenServicePort 18081 127.0.0.1:18081 # for monero nodes
+
+# to have another hidden service, you can append it afterward like so; but you need to use different ports:
+
+HiddenServiceDir /var/lib/tor/onions/daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion/
+HiddenServicePort 80 127.0.0.1:4445
+
+
+Then we restart Tor to refresh the configuration:
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ systemctl restart tor@default
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ systemctl status tor@default
+● tor@default.service - Anonymizing overlay network for TCP
+ Loaded: loaded (/lib/systemd/system/tor@default.service; enabled-runtime; preset: enabled)
+ Active: active (running) since Sun 2024-11-10 21:39:43 CET; 2 days ago
+ Main PID: 2790923 (tor)
+ Tasks: 13 (limit: 77002)
+ Memory: 1.5G
+ CPU: 1d 12h 17min 42.199s
+ CGroup: /system.slice/system-tor.slice/tor@default.service
+ └─2790923 /usr/bin/tor --defaults-torrc /usr/share/tor/tor-service-defaults-torrc -f /etc/tor/torrc --RunAsDaemon 0
+
+
+And from there, we edit the nginx configuration to make sure the website is reachable over the tor domain aswell along with having the header set so that the user's tor browser mentions that there is a .onion link available:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ vim /etc/nginx/sites-available/blog.nowhere.moe
+
+[ Datura ] [ /dev/pts/23 ] [/srv/mkp224o]
+→ cat /etc/nginx/sites-available/blog.nowhere.moe
+server {
+ listen 80;
+ listen [::]:80;
+ server_name blog.nowhere.moe;
+ return 301 https://$server_name$request_uri;
+}
+
+server {
+ ######## TOR CHANGES ########
+ listen 4443;
+ listen [::]:4443;
+ server_name blog.daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion;
+ add_header Onion-Location "http://blog.daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion$request_uri" always;
+ ######## TOR CHANGES ########
+
+ [...]
+}
+
+
+And then we refresh nginx and we see that the website can be reached over the .onion link aswell:
+
+[ Datura ] [ /dev/pts/23 ] [~]
+→ systemctl restart nginx
+
+
+And that's it! you now have made your own copy of the blog available over clearnet and Tor.
+ +Now in order to make sure you can welcome external contributions, you need at least to be able to have a gitea instance:
+ +Once setup, you can clone the blog-contributions repository in your gitea instance:
+And then, you can recreate the kanban board like so:
+ +And then adding issues into it like so:
+ +Now in order to give people a list of all the backup blog mirrors in one go, i list them manually on an uptimekuma instance:
+First, the mirror (clearnet and .onion) gets added into the "testing" category:
+Then, if the mirror is still reachable after 1 month, i move it into the "stable" category:
+And there the mirror stays until i see it is no longer reachable.
++ Until there is Nothing left.
Creative Commons Zero: No Rights Reserved
+
+
+
+ RSS Feed
SimpleX Chat
+
+
Donate XMR: 8AUYjhQeG3D5aodJDtqG499N5jXXM71gYKD8LgSsFB9BUV1o7muLv3DXHoydRTK4SZaaUBq4EAUqpZHLrX2VZLH71Jrd9k8
Contact: nihilist@contact.nowhere.moe (PGP)
+