Blog Stakely
22 Juin 2021

BitCanna : Sécurité et gestion des clés Tendermint (TMMKS)

22 Juin 2021

La gestion des clés privées des validateurs est sans aucun doute l'aspect le plus critique de la validation des réseaux basés sur Tendermint. Ces clés sont responsables de la signature et de la validation de chaque bloc produit dans le réseau, représentant la totalité du staking déléguée au node. Si un hacker accédait au serveur pour voler les clés, il pourrait les utiliser pour attaquer le réseau, le staking et la réputation du validateur.

Un système approprié de gestion des clés Tendermint est nécessaire pour réduire les accidents de double signature, qui conduisent au redoutable « slashing » et signe la fin du validateur. Ces incidents fatals se produisent lorsqu'un validateur basé sur Tendermint signe deux fois un bloc proposé, ce que le réseau détecte comme une attaque. Cela peut être causé par l'exécution simultanée de deux validateurs basés sur Tendermint avec les mêmes clés privées.


Présentation du système de gestion de clés Tendermint (TMKMS)

TMKMS est la solution pour gérer les clés des validateurs sur les réseaux basés sur Tendermint. Il a été initialement développé par l'équipe Cosmos et est actuellement maintenu par Iqlusioninc.

Ce système de gestion des clés sépare le processus de signature du validateur, ce qui permet d'exécuter le processus de signature sur différents hôtes. Il offre également une protection contre la double signature.

TMKMS prend en charge deux types de signatures :

  • Soft-sign : la signature logicielle classique avec une simple clé privée. Les avantages de cette solution par rapport à la non-utilisation de TMKMS sont la protection contre la double signature et le fait que les clés et le validateur se trouvent sur des serveurs distincts.
  • Modules de sécurité physiques (HSM) : ces modules sont fournis par des dispositifs tels que Ledger Nano S et YubiHSM, qui signent sans exposer les clés privées. Ces méthodes sont plus sûres, mais un accès physique au serveur est nécessaire.

Dans cet article, nous expliquons comment configurer un service TMKMS pour un validateur BitCanna en utilisant le soft-sign sur un hôte différent.

Comment configurer TMKMS sur les validateurs BitCanna

Nous avons besoin de deux serveurs pour configurer TMKMS sur un validateur basé sur Tendermint :

  • Serveur TMKMS
  • Serveur du validateur

Le serveur TMKMS doit avoir un pare-feu avec tous les ports fermés sauf le port SSH. Il est recommandé d'utiliser un port SSH différent du port 22 par défaut, mais nous l'utiliserons à titre d'exemple.

sudo ufw allow 22 ssh
sudo ufw enable

Il est préférable de n'autoriser les connexions SSH qu'à partir de machines autorisées :

sudo ufw allow from <remote host> to any port 22

Une fois cette configuration effectuée, nous procédons à l'installation de Cargo et TMKMS :

sudo apt update  
sudo apt install build-essential git  
curl [https://sh.rustup.rs](https://sh.rustup.rs/) -sSf | sh  
# Select the default instalation
git clone [https://github.com/iqlusioninc/tmkms.git](https://github.com/iqlusioninc/tmkms.git) && cd tmkms

Dans cet exemple, nous allons le configurer pour utiliser la signature logicielle (soft-sign) sur un serveur cloud. Si vous avez un serveur local, la solution la plus sûre est d'utiliser la signature HSM de Yubikey.

cargo build --release --features=softsign

Une fois cela fait, nous devons retourner sur le serveur du validateur et vérifier la version de Tendermint qui est en cours d'exécution. Pour ce faire, nous utilisons la commande suivante :

bcnad tendermint version

Il est important de vérifier la version de Tendermint car elle sera configurée ultérieurement sur le serveur TMKMS.

L'étape suivante consiste à autoriser l'accès au port 26658 du validateur uniquement avec l'IP du serveur TMKMS :

sudo ufw allow from <ip tmkms> to any port 26658

Ensuite, éditez la configuration du validateur :

nano $HOME/.bcna/config/config.toml
priv_validator_laddr = "tcp://< ip du validateur>:26658"

Notez que nous devons mettre l'IP du validateur au lieu de l'IP du TMKMS.

Comme alternative, nous pouvons ajouter le NodeID comme préfixe :

priv_validator_laddr = "tcp://<nodeid>@<validator ip>:26658"

Sur le serveur TMKMS, nous pouvons créer de nouvelles clés ou importer des clés existantes. Dans cet exemple, nous allons utiliser les clés existantes d'un validateur BitCanna. Ce faisant, nous incluons la sécurité TMKMS dans un validateur existant.

Nous allons prendre le fichier $HOME/.bcna/config/priv_validator_key.json et le déplacer sur la machine TMKMS.

Sur le serveur TMKMS, démarrez un nouveau service :

$HOME/tmkms/target/release/tmkms init $HOME/kms/bcna

Créez les dossiers $HOME/kms/bcna sur le serveur TMKMS et copiez-y le fichier priv_validator_key.json. Exécutez ensuite les commandes suivantes :

$HOME/tmkms/target/release/tmkms softsign import $HOME/kms/bcna/priv_validator_key.json $HOME/kms/bcna/secrets/cosmoshub-3-consensus.key

rm $HOME/kms/bcna/priv_validator_key.json

Ensuite, éditez le fichier de configuration TMKMS Toml et définissez le bon chain-id, l'IP du validateur et la version de Tendermint :

nano $HOME/kms/bcna/tmkms.toml

id = "bitcanna-testnet-3
chain_ids= ["bitcanna-testnet-3"]  
chain_id= "bitcanna-testnet-3"]  
key_format = { type = "bech32", account_key_prefix = "bcnpub", consensus_key_prefix = "bcnvalconspub" }  
addr = "tcp://Validator_IP:26658" }  
protocol_version = "v0.34"
fichier de configuration kms
fichier de configuration kms

Démarrez le service TMKMS en pointant vers le fichier de configuration que nous venons d'éditer :

$HOME/tmkms/target/release/tmkms start -c $HOME/kms/bcna/tmkms.toml
Gestion clés TMKMS BitCanna
Gestion clés TMKMS BitCanna

Démarrez le validateur BitCanna. Si le validateur et le processus TMKMS ne renvoient pas d'erreurs, nous pouvons configurer TMKMS en tant que service :

sudo tee <<EOF >/dev/null /etc/systemd/system/tmkmsbcna.service

[Unit]  
Description=tmkms bcna service  
After=network.target  
StartLimitIntervalSec=0

[Service]
Type=simple  
Restart=always  
RestartSec=10  
User=XXXXX  
ExecStart=$$(echo $HOME)/tmkms/target/release/tmkms start -c $(echo $HOME)/kms/bcna/tmkms.toml  
LimitNOFILE=1024

[Install]
WantedBy=multi-user.target
EOF

Activez le service :

sudo systemctl enable tmkmsbcna

Démarrez le service :

sudo systemctl start tmkmsbcna

Vérifiez les logs :

journalctl -u tmkmsbcna -f

Et voilà ! Merci d'avoir lu ce tutoriel, nous espérons qu'il vous aidera à améliorer la sécurité globale du réseau BitCanna et des autres chaînes Tendermint. Si vous avez des questions, vous pouvez nous contacter par e-mail ou sur Telegram.

Cet article vous a plu ?

Partagez-le avec vos amis !

Auteur·rice

Ignacio
Stakely

Résumé

Présentation du système de gestion de clés Tendermint (TMKMS)
Comment configurer TMKMS sur les validateurs BitCanna

Meilleurs articles

Inscrivez-vous pour recevoir du contenu exclusif

Abonnez-vous pour recevoir les dernières nouvelles et annonces de Stakely. Découvrez avant tout le monde les nouvelles fonctionnalités, les nouveaux réseaux avec lesquels nous travaillons et bénéficiez des meilleurs conseils pour optimiser votre staking

© Stakely 2024 | Stakely, S.L. | NIF B72551682

C/Ferraz 2, 2º Izq, 28008, Madrid, Espagne