Module de chiffrement FiSH pour ZNC, offrant une protection cryptographique des communications IRC via les modes ECB et CBC avec support complet d'OpenSSL 3 et de l'échange de clés DH1080.
- ✅ Sécurité renforcée : Chiffrement bout-en-bout des messages IRC (canaux et messages privés)
- ✅ Compatibilité étendue : Support ECB (clients legacy) et CBC (standard moderne)
- ✅ Échange automatique : Protocol DH1080 pour négociation sécurisée des clés
- ✅ OpenSSL 3 : Compatible avec les dernières versions de ZNC 1.11.x et OpenSSL 3
- ✅ Flexibilité : Configuration par canal, par utilisateur, chiffrement des topics
- ✅ Interopérabilité : Compatible avec FiSH/irssi et mIRC FiSH10
- ZNC version 1.11.x ou supérieure
- OpenSSL version 3.x
- CMake version 3.1 ou supérieure
- Compilateur C++ avec support C++11
-
Cloner le dépôt
git clone https://github.com/ZarTek-Creole/znc-fish.git cd znc-fish -
Compiler le module
mkdir build && cd build cmake .. make
-
Installer le module
make install
Ou copier manuellement
fish.sodans~/.znc/modules/ -
Charger le module dans ZNC
/msg *status LoadMod fish -
Redémarrer ZNC après remplacement du module pour décharger toute version précédente.
-
Mode CBC (par défaut, recommandé) :
/msg *fish SetKey #canal CBC:maClèSecrète -
Mode ECB (pour clients legacy) :
/msg *fish SetKey pseudo ECB:cléLegacy
-
Lister les clés :
/msg *fish ListKeysAjouter
fullpour afficher les clés complètes :/msg *fish ListKeys full -
Afficher une clé spécifique :
/msg *fish ShowKey #canal /msg *fish ShowKey pseudo -
Supprimer une clé :
/msg *fish DelKey #canal -
Copier une clé :
/msg *fish SetKeyFrom <destination> <source>
Le protocole DH1080 permet l'échange sécurisé de clés sans transmission directe.
-
Avec un utilisateur :
/msg *fish KeyX pseudo [ecb|cbc] -
Avec un utilisateur pour un canal :
/msg *fish KeyXChan #canal pseudo [ecb|cbc] -
Diffusion à tous les utilisateurs d'un canal :
/msg *fish KeyXChanAll #canal [ecb|cbc] -
Échange automatique (au premier MP sans clé) :
/msg *fish AutoKeyX on|off
Le module accepte DH1080_INIT et DH1080_INIT_CBC, et envoie/accepte les clés publiques FiSH10 avec suffixe A.
-
Par canal :
/msg *fish EncryptTopic #canal on|off|status -
Global :
/msg *fish EncryptGlobalTopic on|off|status
/msg *fish DisableTarget <#canal|pseudo> on|off
Pour envoyer un message en clair malgré une clé active, commencer par `` ou configurer :
/msg *fish PlainPrefix <préfixe>
-
Messages entrants/sortants :
/msg *fish ProcessIncoming on|off /msg *fish ProcessOutgoing on|off -
Notices et actions :
/msg *fish EncryptNotice on|off /msg *fish EncryptAction on|off
-
Marquer les messages déchiffrés :
/msg *fish MarkIncoming on|off /msg *fish MarkIncomingTarget <cible> on|off -
Position du marqueur :
/msg *fish MarkPos prefix|suffix -
Texte du marqueur :
/msg *fish MarkStr dec|enc|plain <texte> -
Marquer les messages corrompus :
/msg *fish MarkBroken on|off
-
Configurer une clé pour un canal :
/msg *fish SetKey #moncanal CBC:superSecret123 -
Rejoindre le canal et communiquer :
- Tous les messages seront automatiquement chiffrés/déchiffrés
- Les autres utilisateurs doivent avoir la même clé
-
Vérifier la configuration :
/msg *fish ListKeys
- Format :
+OK *<base64>(IV + texte chiffré, base64 MIME standard) - Plus sécurisé, standard moderne
- Chaque message a un vecteur d'initialisation unique
- Format :
+OK <fish64>oumcps <fish64>(base64 FiSH./0-9a-zA-Zen blocs de 12 caractères) - Compatible avec anciens clients FiSH
- Moins sécurisé mais nécessaire pour l'interopérabilité
- Fallback automatique : Le module essaie d'abord le mode configuré, puis l'autre mode si échec
- Apprentissage automatique : Le mode stocké peut être mis à jour lors d'un déchiffrement réussi (sauf si désactivé)
- Changement de mode :
/msg *fish SetMode <cible> ecb|cbc /msg *fish GetMode <cible>
Les clés sont stockées dans ZNC NV avec le format :
CBC:<clé>ouECB:<clé>- Par défaut CBC si aucun préfixe
/msg *fish SelfTest ecb MaClé bonjour
/msg *fish SelfTest cbc MaClé bonjour
Ces commandes chiffrent puis déchiffrent le texte pour vérifier le bon fonctionnement.
Pour tester avec FiSH/irssi ou mIRC FiSH10 :
-
Messages privés :
- Chaque côté :
/msg *fish KeyX <pseudo> - Envoyer un message court comme
!df
- Chaque côté :
-
Canal :
- Définir la même clé CBC sur tous les clients
- Vérifier que les messages
+OK *...sont déchiffrés correctement
SetKey <#canal|Pseudo> [CBC:|ECB:]<clé>— Définir une cléDelKey <#canal|Pseudo>— Supprimer une cléShowKey <#canal|Pseudo>— Afficher une cléListKeys [full]— Lister toutes les clésSetKeyFrom <dest> <source>— Copier une cléSetMode <cible> ecb|cbc— Définir le modeGetMode <cible>— Obtenir le mode actuel
KeyX <pseudo> [ecb|cbc]— Échanger une clé avec un utilisateurKeyXChan <#canal> <pseudo> [ecb|cbc]— Échanger pour un canalKeyXChanAll <#canal> [ecb|cbc]— Diffuser à tous les utilisateursAutoKeyX on|off— Échange automatique au premier MP
ProcessIncoming on|off— Traiter les messages entrantsProcessOutgoing on|off— Traiter les messages sortantsEncryptNotice on|off— Chiffrer les noticesEncryptAction on|off— Chiffrer les actions (/me)
EncryptTopic <#canal> on|off|status— Chiffrer le topic d'un canalEncryptGlobalTopic on|off|status— Paramètre global pour tous les canaux
MarkIncoming on|off— Marquer les messages déchiffrésMarkIncomingTarget <cible> on|off— Par cibleMarkPos prefix|suffix— Position du marqueurMarkStr dec|enc|plain <texte>— Texte du marqueurMarkBroken on|off— Marquer les messages corrompus (ajouter&pour blocs FiSH tronqués)
PlainPrefix <préfixe>— Définir un préfixe pour texte clair (`` par défaut)DisableTarget <#canal|pseudo> on|off— Désactiver le chiffrement pour une cibleSelfTest <ecb|cbc> <clé> <texte>— Test de chiffrement roundtrip
Ce projet est distribué sous licence Apache License 2.0. Consultez le fichier LICENSE pour plus de détails.
- L'implémentation ECB respecte le comportement FiSH (clé brute via
BF_set_key(strlen(key), key)et encodage base64 FiSH) - Les avertissements de dépréciation OpenSSL 3 sont supprimés dans le code via des pragmas GCC
- Documentation ZNC
- OpenSSL Documentation
- FiSH Protocol Specification
- Code de Conduite
- Guide de Contribution
- Politique de Sécurité
- Journal des Modifications
- Auteur : ZarTek-Creole
- Issues : Signaler un bug ou demander une fonctionnalité
- Discussions : Participer aux discussions
- Pull Requests : Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md
Merci à tous les contributeurs et à la communauté ZNC pour leur support continu.
Note : Redémarrez ZNC après l'installation ou la mise à jour du module pour garantir le chargement de la version la plus récente.