# tools/keygen
https://chaton.g1sms.fr/
Le principe est de convertir les clefs ECC sous plusieurs formats.
Ce principe d'équivalence des clefs entre les différents services crypto est la Pierre de Rosette qui permet à "Astroport.ONE" de dessiner nos identités "Web3".
-- La procédure peut paraître relativement difficile à réaliser par un novice, il s'agit de pratiquer un emèlement de 4 clefs : PGP, SSH, IPFS et G1 --
cette procédure garantie au collectif auto-hébergeur Web3 que chaque ```/home/user``` possède des connaissances en [/SHELL](/SHELL), [/GIT](/GIT), ( [/Blockchain](/Blockchain) , [/Docker](/Docker) ... la liste s'étoffe et se précise selon votre participation et les services que vous maintenez ...)
## PGP SSH key
le principe de la WoT des Dragons est de permettre un accès SSH aux machines relié à l'essaim "Boostrap".
Nous allons créer une clef au format courbe elyptique ED25519 (plus sécurisé que RSA) qui sera ensuite utilisée par SSH comme identifiant "USER".
Au lieu de créer sa clef avec ```ssh-keygen```
```
echo "ENTER EMAIL?"
read EMAIL
ssh-keygen -t ed25519 -C ${EMAIL,,}
```
**On va utiliser PGP**
https://docs.github.com/fr/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
1. Créer sa clé ed25519 avec gpg
```
## GET EMAIL & PIN password
echo "ENTER EMAIL?"
read EMAIL
EMAIL=${EMAIL,,} # lowercase
echo "ENTER PIN?"
read PIN
gpg --batch --passphrase="${PIN}" --default-new-key-algo "ed25519/cert,sign,auth+cv25519/encr" --quick-generate-key "${EMAIL}"
```
Ou bien avec [pgpid](https://codeberg.org/foopgp/pgpid) (meilleur gestion des clés privés, au travers de qrcodes et grâce aux nitrokeys/yubikeys)
* Configurer son agent gpg
*This is useless on recent GNU/Linux Distribution (since ~2020)*
```
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
gpg -k --with-keygrip ${EMAIL} |awk '/Keygrip/ {print $3; exit}' >> ~/.gnupg/sshcontrol
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
echo ${SSH_AUTH_SOCK}
```
* Mettre à jour son .bashrc
```
echo "export SSH_AUTH_SOCK=\$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent" >> ~/.bashrc
```
* Afficher les clés publiques ssh
```
# SSH
ssh-add -L
# PGP
gpg --export-ssh-key ${EMAIL}
```
Désormais votre clef SSH fait partie d'un trousseau PGP.
* SECURITE :
désactiver la connexion par login/password dans le fichier
```/etc/ssh/sshd_config```
```
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
# optionnel : activer le forward X11
X11Forwarding yes
```
Ensuite cette clef publique sera à placer dans le fichier ```~/.ssh/authorized_keys``` des machines auxquelles vous avez accès dans le plan d'adressage IP
> "Astroport.ONE" se charge de la relier à IPFS ... Offrant à votre clef, un canal de communication décentralisé, une "toile de confiance dynamique" et un plan d'adressage "Off Grid".
## IPFSNODEID from PGP/SSH user key
Pour cela, nous allons la convertir au format IPFS afin de l'associer au PeerID de votre Station Astroport.
2. Convert id_ed25519 to ipfs key
```
mkdir -p ~/.zen/game
## Convert GPG/SSH key into IPFS key (Node ID)
~/.zen/Astroport.ONE/tools/keygen -g \
-t ipfs -o ~/.zen/game/secret.ipns ${EMAIL}
## Convert IPFS key to Duniter key (G1 Wallet)
~/.zen/Astroport.ONE/tools/keygen -i ~/.zen/game/secret.ipns -t duniter -o ~/.zen/game/secret.dunikey
```
3. Determine New PeerID & PrivKey
```
PeerID=$(~/.zen/Astroport.ONE/tools/keygen -i ~/.zen/game/secret.ipns -t ipfs)
echo $PeerID
PrivKey=$(~/.zen/Astroport.ONE/tools/keygen -i ~/.zen/game/secret.ipns -t ipfs -s)
echo $PrivKey
```
4. Modify IPFS Node identity
```
~/.zen/Astroport.ONE/stop.sh
# Backup actual Node ID
cat ~/.ipfs/config | jq -r '.Identity.PeerID' \
> ~/.zen/game/ipfsnodeid.bkp
cat ~/.ipfs/config | jq -r '.Identity.PrivKey' \
>> ~/.zen/game/ipfsnodeid.bkp
# Insert new Node ID
cp ~/.ipfs/config ~/.ipfs/config.bkp
jq '.Identity.PeerID="'$PeerID'"' ~/.ipfs/config > ~/.ipfs/config.tmp
jq '.Identity.PrivKey="'$PrivKey'"' ~/.ipfs/config.tmp > ~/.ipfs/config && rm ~/.ipfs/config.tmp
# Verify & restart IPFS daemon
[[ "$(cat ~/.ipfs/config | jq -r '.Identity.PrivKey' )" != "$PrivKey" ]] \
&& blurp="ERROR" \
|| blurp="SUCCESS"
echo ${blurp}
## SUCCESS
## supprimer les anciennes clef de SWARM
rm ~/.zen/game/myswarm_secret.*
## Réactivation Astroport.ONE
~/.zen/Astroport.ONE/start.sh
```
Désormais la "Balise" IPNS de votre Station est liée à votre clef PGP/SSH.
---
> **La jonction "Web3" INFRA vient de se faire.**
Votre clef publique se décline sur GPG/SSH, IPFSNODEID et NODEG1PUB
```
NODEG1PUB=$(cat ~/.zen/game/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2)
echo ${NODEG1PUB}
```
---
## DeltaChat
On pourra importer sa clef dans DeltaChat pour établir une messagerie privée email
https://delta.chat/en/help#can-i-reuse-my-existing-private-key
## Toile de confiance **/Dragons**
Les utilisateurs ayant suivi cette procédure forment **une toile de confiance technique** qui pourra être utilisée au travers de "Astroport.ONE"
```
sudo systemctl start astroport
```
o o
\ /
o o o o o o
\ / | / \ /
o o - o o - o
| / \ / /
o - o o - ♥ - o - o
\ / \ / \ \
o - o o o o o
/ \ \ \ /
o o - o o o - o
/
o
Astroport va utiliser la clef IPFS comme balise de publication avec les autres Stations de l'essaim.
(12345) Etat de synchronisation de la stations avec son essaim :
* http://astroport.localhost:12345
* https://astroport.copylaradio.com/12345