ZKC, Zero Knowledge Communications, est une suite de programmes pour permettre des communications privées et sécurisées entre un certain nombre de parties.
La suite ZKC est un outil de preuve de concept! Le code reflète cela en étant quelque peu liés au lieu de séparer complètement et correctement. Bien que nous prenions grand soin de nous assurer que les bits importants sont corrects, il y a certainement des bugs qui se cachent. Nous prendrons volontiers des RP qui déplacent le ZKC dans un projet plus mature.
C'est une bonne idée de créer un utilisateur Zkserver et de se connecter pour finaliser le processus d'installation. Créez un répertoire Zkserver et copiez le fichier de configuration en place, puis modifiez le fichier de configuration.
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.confIl y a 2 éléments qui doivent être examinés dans le fichier de configuration.
allowidentify = no
createpolicy = noAllowIdentify est un paramètre qui indique explicitement à ZkServer s'il est autorisé à s'identifier aux parties externes. Ce bouton existe pour permettre de vrais systèmes fermés. Lorsque ce paramètre est défini sur non, le seul moyen de communiquer avec lui est d'avoir un ZKClient qui a déjà communiqué avec ce Zkserver ou le ZKClient utilisé ZKIMPORT pour insérer l'enregistrement d'identité Zkserver dans sa configuration. Si ce bouton est défini sur OUI, le zkserver autorise les requêtes de son identité pendant la phase de pré-session.
CreatePolicy a trois paramètres: oui, non et jeton. Lorsque CreatePolicy est défini sur une partie externe ne peut pas créer de compte. Si CreatePolicy est défini sur OUI, tout ZKClient peut créer un compte sur ce Zkserver. Et enfin, si CreatePolicy est réglé dans le jeton, le zkclient doit fournir un jeton pendant la création de compte. Ce jeton peut être obtenu à partir de l'administration Zkserver. La création d'un jeton peut être effectuée en tant qu'administrateur Zkserver en exécutant la commande zkservertoken. Cela crachera un jeton qui peut être utilisé une fois pour créer un compte.
Remarque: Si vous n'utilisez pas le répertoire par défaut ~ / .zkserver, vous devez consulter toutes les entrées de répertoire / nom de fichiers dans le fichier de configuration.
Les éléments restants du fichier de configuration sont assez explicites.
ZKClient est un client de communication IRSSI Spect-Alike. Les utilisateurs de l'IRSSI trouveront son interface familière.
Si zkclient est démarré pour la première fois, il créera un répertoire et un fichier de configuration par défaut dans ~/.zkclient/zkclient.conf . Si vous souhaitez apporter des modifications au fichier de configuration, vous devez quitter le programme, modifiez le fichier de configuration et redémarrez ZKClient.
Les versions supérieures à 0.3.0 peuvent exporter un fichier de configuration par défaut en utilisant la méthode suivante:
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.confCréez un répertoire ZKClient et copiez le fichier de configuration en place, puis modifiez le fichier de configuration.
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.confIl y a 1 élément qui doit être examiné dans le fichier de configuration.
savehistory = noSaveHistory est par défaut défini sur no. Si vous voulez avoir une histoire persistante (après avoir quitté ZKClient), définissez ceci sur oui.
Remarque: Si vous n'utilisez pas le répertoire par défaut ~ / .zkclient, vous devez consulter toutes les entrées de répertoire / nom de fichiers dans le fichier de configuration.
Les éléments restants du fichier de configuration sont assez explicites.
Lors du premier lancement de ZKClient, il incitera l'utilisateur à: Nom d'utilisateur, Nick, Server et Token. Le nom d'utilisateur est votre nom (par exemple Alice McAlice), Nick est votre Nick préféré car il est affiché par votre reçue (par exemple Alice1337), le serveur est l'adresse de votre Zkserver et enfin le jeton est le jeton fourni par l'administrateur Zkserver afin de créer un compte (si nécessaire). Une fois cette étape terminée, vous pouvez désormais communiquer avec Zkserver.
À ce stade, le ZKClient TUI est complètement en place et peut taper / aider à avoir une idée des commandes disponibles.
ZKClient utilise un cryptage à cliquet pour les communications et le serveur n'est pas en mesure de fouiner les messages. La seule chose que Zkserver peut voir, c'est que quelqu'un communique avec quelqu'un d'autre. Cela oblige donc les utilisateurs à configurer des cliquettes entre eux. Illustrons le flux avec un exemple.
Supposons qu'Alice veut communiquer avec Bob et que les deux ont un compte sur un Zkserver partagé, alors le processus est le suivant:
1. Alice must upload her identity as an encrypted blob to the zkserver. This
can be accomplished by typing /kx and then filling out a password that is
going to be shared with Bob. The server will return a PIN code upon
completion.
2. Using an out-of-band communication mechanism Alice must share the PIN and
password with Bob.
3. Bob needs to fetch Alice's identity by typing the following /fetch PIN
("PIN" is replaced with the actual number provided by Alice). If the PIN is
correct Bob will be prompted for the password of the encrypted blob. If the
blob decrypts properly Bob will additionally be prompted to accept Alice's
fingerprint. If Bob accepts Alice's fingerprint then the rest of the key
exchange will be finalized.
Zkserver ne passe que des blobs cryptés dans les deux sens entre les utilisateurs. Il n'a aucune connaissance de ce qui est échangé. Par conséquent, un échange clé ne peut être finalisé qu'une fois que toutes les parties ont été en ligne assez longtemps pour que tous les blobs voyagent d'avant en arrière.
À ce stade, Alice ou Bob vont pouvoir renvoyer des messages et un fort en utilisant la commande / m (par exemple, Alice serait le suivant / M Bob Hello là!).
Il y a beaucoup plus de commandes dans les clés ZKClient et Tui, mais celles-ci sont décrites ailleurs.
ZKEXPORT exporte l'identité publique Zkserver ou ZKClient. L'identité Zkserver comprend également l'adresse de l'hôte. La chaîne Base64 résultante peut être envoyée par e-mail ou autrement échangée avec votre homologue.
Exemple de zkclient:
$ zkexport -root /Users/marco/.zkclient1/
AAAAEU1hcmNvIFBlZXJlYm9vbSAxAAAAAAAABm1hcmNvMQAAY3rsUd6bTpLI/n2EwmGKPkK3dA/V+wyz5HHLiQgzHNJ9KAZTOrGznd9Ulhe0Y0EVoW8OkuM/G51w6BdvIOm1CWaOAhw8SJi0/vbjZzETd8k397Vl3LPcDUFUbp+JQVKdtBWDhevh3MFN0DY7Oc5ZZrT+lIE+KVwQm/PaPpeIohoWAEBu3HEE6vuq4eQt7BQ6dbEV61ZKUHbMm/61ymhXCA==Exemple de zkserver:
$ zkexport -s -root /Users/marco/.zkserver/
AAAACHprc2VydmVyAAAACHprc2VydmVyr51dJzm8pxrjiQsxFF3Bez+6izPdWAcEWZFHka7OwoTAoamQ1hm5eU5HwgQdSS7Ek+nd2LkvjUcu55l3jUhKdBwpfrCn/N/mGWpJS6iMSFSxU/OcRvWe9pEySQZR4gyjjb4TKuaaaReGBI4d8rUfOwoDTs1y05YO4Fgtx9a0BOQsBHvxoPKeqGJ6gxf5QlF4Xu8RRashfRYcTVG44uMpBwAAAmUwggJhMIIBw6ADAgECAhBGHi9VXIHCoQ6W3uSSG9OLMAoGCCqGSM49BAMEMAsxCTAHBgNVBAoTADAeFw0xNjExMjgxNzQwNThaFw00OTEyMzEyMzU5NTlaMAsxCTAHBgNVBAoTADCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEAPHlelHUjxH+4JR2+PP71imPZ5b0JjF4vq86UYdgzJXzYmVShJgd+f8qK4ZP+GjLDiZjfl8ov+HUF63uX3V23EZxAVTW0FDyshRiJ+Lt5YmWRMVAM4i+I979Gjq6ySf9bm4Z4vxx1lvUBizussP3KoEG7AdmvbP/HqWzjuQaFH3oeTxDo4HFMIHCMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MIGeBgNVHREEgZYwgZOCCWxvY2FsaG9zdIIUTWFyY29zLU1hYy1Qcm8ubG9jYWyHBMCojQGHBMCoHQGHEAAAAAAAAAAAAAAAAAAAAAGHEP6AAAAAAAAAuCSI2MJKFRGHEP0JBrb3SIrKuCSI2MJKFRGHBAqqAGmHBH8AAAGHEP6AAAAAAAAAAAAAAAAAAAGHEP6AAAAAAAAAAiUA//7ved0wCgYIKoZIzj0EAwQDgYsAMIGHAkIAstVERsGjpqib7xm1NaplfzmpvOD0H+Zr8lJfKkSCWcnzbPhqo+rl71QlTdqZNzvQHX/hfBNntcXE8f4J80oI+zYCQUl0d7BZYis1X3OTGvguHd01GoxTPFv3HAvu1YlTWFvoShWilKOzH1jDJM//qyagwe/sg67pBUzQ24GQdGDxn/qIAAAAZKIMPORT est destiné à importer des cordes de base64 de base de ZKExported.
Ajoutez des exemples ici.
Au fur et à mesure que l'utilisateur Zkserver tape simplement Zkservertoken et que l'outil crache un jeton d'utilisation unique. Par exemple:
$ zkservertoken
7000 8677 6548 2615Des versions binaires sont fournies pour les systèmes et architectures d'exploitation courants:
https://github.com/companyzero/zkc/releases
Chaque version contient un fichier manifeste avec les hachages SHA256 pour les binaires dans cette version. Pour les vérifier, vous aurez besoin:
Les étapes pour vérifier les binaires sont les suivantes:
Téléchargez le fichier manifeste, la signature du fichier manifeste et le zip / tarball pour votre système d'exploitation à partir d'ici.
Obtenez la valeur SHA256 pour le zip / tarball pour votre système d'exploitation et vérifiez qu'il correspond à la valeur du fichier manifeste, par exemple pour Linux 64 bits
$ sha256sum zkc-linux-amd64-v0.2.0.tar.gz
51dd11ffbcc573462eb61df8fa5caa60677bcc9178fda5d68d02b3414aa6765f zkc-linux-amd64-v0.2.0.tar.gz
Importez la clé de signature de la version ZKC dans GNUPG.
$ gpg --keyserver hkps://pgp.mit.edu --recv-key 0x14B9CD80
gpg: requesting key 14B9CD80 from hkps server pgp.mit.edu
gpg: key 511E9D66: public key "zkc Release Signing Key <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Vérifiez que la signature du File Manifest est valide et créée par la clé de signature de la version ZKC.
$ gpg --verify zkc-manifest-v0.2.0.txt.asc
gpg: assuming signed data in `zkc-manifest-v0.2.0.txt'
gpg: Signature made Mon Jul 2 14:17:16 2018 EDT using RSA key ID 14B9CD80
gpg: Good signature from "zkc Release Signing Key <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: EDCF B52A FCDA E2D2 D9C3 7708 E046 0873 511E 9D66
Subkey fingerprint: 1D16 538A 43D1 6765 43E7 31BF D79D DEA2 14B9 CD80
Le zip ou le tarball avec des binaires pour votre plate-forme est maintenant vérifié et vous pouvez être convaincu qu'ils ont été générés par l'équipe du ZKC.
Avec la libération 0.3.0, le format disque de Zkserver a été modifié. Il est conseillé de sauvegarder le répertoire Zkserver avant d'exécuter la nouvelle version Zkserver. Le code contient le code de mise à niveau et il a été testé, mais il faut toujours tenir compte de cet avertissement avant les mises à niveau.
ZKC n'a pas encore été audité. Utilisez judicieusement.
Nous recherchons des entrepreneurs pour auditer et développer le ZKC et ses LIB crypto. La rémunération est offerte dans Decred.
ZKC est sous licence sous la licence CopyFree ISC.