ZKC, Zero Knowledge Communications, es un conjunto de programas para permitir comunicaciones privadas y seguras entre cualquier número de partes.
¡La suite ZKC es una herramienta de prueba de concepto! El código refleja esto al estar un poco entrelazado en lugar de separado completamente y adecuadamente. Si bien tuvimos mucho cuidado para asegurarnos de que los bits importantes sean correctos, ciertamente hay errores al acecho. Felizmente tomaremos PRS que mueven a ZKC a un proyecto más maduro.
Es una buena idea crear un usuario de Zkserver e iniciar sesión para finalizar el proceso de instalación. Cree un directorio de Zkserver y copie el archivo de configuración en su lugar y luego edite el archivo de configuración.
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.confHay 2 elementos que deben considerarse en el archivo de configuración.
allowidentify = no
createpolicy = noINSOWNIDENTIA es una configuración que le dice explícitamente a Zkserver si se le permite identificarse a partes externas. Esta perilla existe para habilitar los verdaderos sistemas cerrados. Cuando esta configuración no se establece en la única forma de comunicarse con ella es tener un ZKClient que se haya comunicado con este Zkserver antes o el ZKClient usó ZKImport para insertar el registro de identidad de Zkserver en su configuración. Si esta perilla se establece en Sí, el Zkserver permitirá consultas de su identidad durante la fase de preesión.
CreatePolicy tiene tres configuraciones: sí, no y token. Cuando CreatePolicy está configurado en No, una parte externa no puede crear una cuenta. Si CreatePolicy está configurado en Sí, cualquier ZKClient puede crear una cuenta en este Zkserver. Y finalmente, si CreatePolicy está configurado para token, el ZKClient debe proporcionar un token durante la creación de la cuenta. Este token se puede obtener de la administración de Zkserver. La creación de un token se puede hacer como administrador de Zkserver ejecutando el comando zkservertoken. Esto escupirá un token que se puede usar una vez para crear una cuenta.
Nota: Si no está utilizando el directorio predeterminado ~/.zkserver que necesita para revisar todas las entradas de directorio/nombres de archivo en el archivo de configuración.
Los elementos restantes en el archivo de configuración son bastante explicativos.
ZKClient es un cliente de comunicación parecido a IRSSI. Los usuarios de IRSSI encontrarán su interfaz familiar.
Si ZKClient se inicia por primera vez, creará un directorio predeterminado y un archivo de configuración en ~/.zkclient/zkclient.conf . Si desea realizar cambios en el archivo de configuración, debe salir del programa, editar el archivo de configuración y reiniciar ZKClient.
Las versiones mayores a 0.3.0 pueden exportar un archivo de configuración predeterminado utilizando el siguiente método:
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.confCree un directorio ZKClient y copie el archivo de configuración en su lugar y luego edite el archivo de configuración.
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.confHay 1 elemento que debe considerarse en el archivo de configuración.
savehistory = noSaveHistory se establece de forma predeterminada en no. Si desea tener un historial persistente (después de salir de ZKClient), establece esto en sí.
Nota: Si no está utilizando el directorio predeterminado ~/.zkclient que necesita para revisar todas las entradas de directorio/nombres de archivo en el archivo de configuración.
Los elementos restantes en el archivo de configuración son bastante explicativos.
Tras el primer lanzamiento de ZKClient, solicitará al usuario: Nombre de usuario, Nick, Server y Token. El nombre de usuario es su nombre (por ejemplo, Alice McAlice), Nick es su Nick preferido como lo muestra su recibido (por ejemplo, Alice1337), el servidor es la dirección de su Zkserver y, por último, el token es el token proporcionado de Zkserver para crear una cuenta (si es necesario). Una vez que este paso está completo, ahora puede comunicarse con Zkserver.
En este punto, el zkclient TUI está completamente arriba y una vez puede escribir /ayudar para tener una idea de qué comandos están disponibles.
ZKClient utiliza el cifrado en trinquete para las comunicaciones y el servidor no puede husmear mensajes. Lo único que Zkserver puede ver es que alguien se está comunicando con otra persona. Por lo tanto, esto requiere que los usuarios configuren trinquetes entre ellos. Ilustramos el flujo con un ejemplo.
Suponga que Alice quiere comunicarse con Bob y ambos tienen una cuenta en un Zkserver compartido, entonces el proceso es el siguiente:
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 solo pasa gotas encriptadas de un lado a otro entre los usuarios. No tiene conocimiento de lo que se está intercambiando. Por lo tanto, un intercambio clave solo se puede finalizar una vez que todas las partes hayan estado en línea el tiempo suficiente para que todos los blobs viajen de un lado a otro.
En este punto, Alice o Bob podrán enviar mensajes de regreso y Fuerte usando el comando /M (por ejemplo, Alice lo haría a lo siguiente /M Bob Hola!).
Hay muchos más comandos en las teclas Zkclient y Tui, pero se describen en otra parte.
Zkexport exporta la identidad pública Zkserver o Zkclient. La identidad de Zkserver también incluye la dirección del host. La cadena Base64 resultante se puede enviar por correo electrónico o intercambiarse con su contraparte.
Ejemplo de zkclient:
$ zkexport -root /Users/marco/.zkclient1/
AAAAEU1hcmNvIFBlZXJlYm9vbSAxAAAAAAAABm1hcmNvMQAAY3rsUd6bTpLI/n2EwmGKPkK3dA/V+wyz5HHLiQgzHNJ9KAZTOrGznd9Ulhe0Y0EVoW8OkuM/G51w6BdvIOm1CWaOAhw8SJi0/vbjZzETd8k397Vl3LPcDUFUbp+JQVKdtBWDhevh3MFN0DY7Oc5ZZrT+lIE+KVwQm/PaPpeIohoWAEBu3HEE6vuq4eQt7BQ6dbEV61ZKUHbMm/61ymhXCA==Ejemplo 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á destinado a importar cadenas Base64 Zkexported.
Agregue ejemplos aquí.
Como el usuario de Zkserver simplemente escribe Zkserverteken y la herramienta escupirá un token de uso único. Por ejemplo:
$ zkservertoken
7000 8677 6548 2615Se proporcionan versiones binarias para sistemas operativos y arquitecturas comunes:
https://github.com/companyzero/zkc/releases
Cada versión contiene un archivo manifiesto con hashes SHA256 para los binarios en esa versión. Para verificarlos, necesitará:
Los pasos para verificar los binarios son los siguientes:
Descargue el archivo manifiesto, la firma para el archivo manifiesto y el zip/tarball para su sistema operativo desde aquí.
Obtenga el valor SHA256 para el Zip/Tarball para su sistema operativo y verifique que coincida con el valor en el manifiesto del archivo, por ejemplo, para Linux de 64 bits
$ sha256sum zkc-linux-amd64-v0.2.0.tar.gz
51dd11ffbcc573462eb61df8fa5caa60677bcc9178fda5d68d02b3414aa6765f zkc-linux-amd64-v0.2.0.tar.gz
Importe la clave de firma de lanzamiento de ZKC en 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)
Verifique que la firma para el manifiesto del archivo sea válida y creada por la clave de firma de la versión 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
El zip o el tarball con binarios para su plataforma ahora se verifica y puede estar seguro de que el equipo ZKC lo generó.
Con la liberación 0.3.0, se cambió el formato de disco de Zkserver. Es aconsejable hacer una copia de seguridad del directorio Zkserver antes de ejecutar la nueva versión de Zkserver. El código contiene el código de actualización y se ha probado, sin embargo, uno siempre debe prestar atención a esta advertencia antes de las actualizaciones.
ZKC aún no ha sido auditado. Use sabiamente.
Estamos buscando contratistas para auditar y desarrollar ZKC y sus Crypto Libs. El pago se ofrece en Decred.
ZKC tiene licencia bajo la licencia ISC CopyFree.