O ZKC, Zero Knowledge Communications, é um conjunto de programas para permitir comunicações privadas e seguras entre qualquer número de partes.
A suíte ZKC é uma ferramenta de prova de conceito! O código reflete isso, sendo um pouco entrelaçado em vez de separado de maneira completa e adequada. Enquanto tivemos muito cuidado para garantir que os bits importantes estejam corretos, certamente há bugs à espreita. Felizmente, levaremos o PRS que move o ZKC para um projeto mais maduro.
É uma boa ideia criar um usuário do ZkSserver e fazer login para finalizar o processo de instalação. Crie um diretório ZkSserver e copie o arquivo de configuração no lugar e edite o arquivo de configuração.
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.confExistem 2 itens que devem ser analisados no arquivo de configuração.
allowidentify = no
createpolicy = noO AllowIdentify é uma configuração que indica explicitamente o ZkServer se for permitido se identificar para partes externas. Este botão existe para ativar os verdadeiros sistemas fechados. Quando essa configuração é definida como não, a única maneira de se comunicar com ela é ter um ZKClient que se comunicou com esse ZkSserver antes ou o ZKCLIENT usou o ZKIMPORT para inserir o registro de identidade do ZkServer em sua configuração. Se este botão estiver definido como sim, o ZkServer permitirá consultas de sua identidade durante a fase de pré-sessão.
O CreatePolicy tem três configurações: sim, não e token. Quando o CreatePolicy está definido como nenhuma parte externa não pode criar uma conta. Se o CreatePolicy estiver definido como sim, qualquer zkclient pode criar uma conta neste zkServer. E, finalmente, se o CreatePolicy for definido como token, o ZKClient deve fornecer um token durante a criação da conta. Este token pode ser obtido na administração do ZkSserver. Criar um token pode ser feito como administrador do ZkSserver, executando o comando Zkservertken. Isso cuspirá um token que pode ser usado uma vez para criar uma conta.
NOTA: Se você não estiver usando o diretório ~/.zkServer padrão, é necessário revisar todas as entradas do diretório/nomes de arquivos no arquivo de configuração.
Os itens restantes no arquivo de configuração são bastante auto -explicativos.
O ZKCLIENT é um cliente de comunicação parecido com Irssi. Os usuários do IRSSI acharão sua interface familiar.
Se o ZKClient for iniciado pela primeira vez, criará um diretório padrão e um arquivo de configuração em ~/.zkclient/zkclient.conf . Se você deseja fazer alterações no arquivo de configuração, deve sair do programa, edite o arquivo de configuração e reinicie o ZKCLIENT.
Versões superiores a 0,3.0 podem exportar um arquivo de configuração padrão usando o seguinte método:
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.confCrie um diretório ZKClient e copie o arquivo de configuração no lugar e edite o arquivo de configuração.
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.confHá 1 item que deve ser analisado no arquivo de configuração.
savehistory = noSalvehistory é, por padrão, definido como não. Se você deseja ter uma história persistente (depois de sair do ZKClient), defina isso como sim.
NOTA: Se você não estiver usando o diretório padrão ~/.zkClient, precisará revisar todas as entradas do diretório/nomes de arquivos no arquivo de configuração.
Os itens restantes no arquivo de configuração são bastante auto -explicativos.
Após o primeiro lançamento do ZKCLIENT, ele solicitará ao usuário: Nome de usuário, Nick, Server e Token. O nome de usuário é o seu nome (por exemplo, Alice McAlice), Nick é o seu Nick preferido, pois é exibido pelo seu recebido (por exemplo, Alice1337), o servidor é o endereço do seu ZkSserver e, por fim, o token é o Token do ZkSserver, para criar uma conta (se necessário). Quando esta etapa estiver concluída, agora você pode se comunicar com o ZkServer.
Neste ponto, o ZKClient Tui está totalmente acima e uma vez pode digitar /ajudar a ter uma idéia de quais comandos estão disponíveis.
O ZKCLIENT usa a criptografia de catraca para comunicações e o servidor não consegue bisbilhotar mensagens. A única coisa que Zksever pode ver é que alguém está se comunicando com outra pessoa. Portanto, isso exige que os usuários configurem catracas entre si. Vamos ilustrar o fluxo com um exemplo.
Suponha que Alice queira se comunicar com Bob e ambos tenham uma conta em um zkServer compartilhado, o processo é o seguinte:
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.
O ZkServer passa apenas blobs criptografados entre os usuários. Não tem conhecimento de tudo o que está sendo trocado. Portanto, uma troca -chave só pode ser finalizada assim que todas as partes estiverem online o suficiente para que todos os blobs viajem para frente e para trás.
Neste ponto, Alice ou Bob poderão enviar mensagens de volta e fort usando o comando /m (por exemplo, Alice faria com o seguinte /m bob olá lá!).
Existem muitos outros comandos nas teclas ZKCLIENT e TUI, mas essas são descritas em outros lugares.
O ZKEXPORT exporta a identidade pública ZkServer ou ZKClient. A identidade do Zkserver também inclui o endereço do host. A sequência BASE64 resultante pode ser enviada por e -mail ou trocada com sua contraparte.
Exemplo ZKClient:
$ zkexport -root /Users/marco/.zkclient1/
AAAAEU1hcmNvIFBlZXJlYm9vbSAxAAAAAAAABm1hcmNvMQAAY3rsUd6bTpLI/n2EwmGKPkK3dA/V+wyz5HHLiQgzHNJ9KAZTOrGznd9Ulhe0Y0EVoW8OkuM/G51w6BdvIOm1CWaOAhw8SJi0/vbjZzETd8k397Vl3LPcDUFUbp+JQVKdtBWDhevh3MFN0DY7Oc5ZZrT+lIE+KVwQm/PaPpeIohoWAEBu3HEE6vuq4eQt7BQ6dbEV61ZKUHbMm/61ymhXCA==Exemplo do ZkSserver:
$ 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/qIAAAAO ZKIMPORT destina -se a importar strings Base64 Zkexported64.
Adicione exemplos aqui.
Como o usuário do ZkSserver, basta digitar Zkservertken e a ferramenta cuspirá um token de uso único. Por exemplo:
$ zkservertoken
7000 8677 6548 2615Os lançamentos binários são fornecidos para sistemas operacionais e arquiteturas comuns:
https://github.com/companyzero/zkc/releases
Cada liberação contém um arquivo de manifesto com hashes sha256 para os binários nessa liberação. Para verificar isso, você precisará:
As etapas para verificar os binários são as seguintes:
Faça o download do manifesto do arquivo, a assinatura para o manifesto do arquivo e o zip/tarball para o seu sistema operacional daqui.
Obtenha o valor SHA256 para o zip/tarball para o seu sistema operacional e verifique se ele corresponde ao valor do manifesto do arquivo, por exemplo, para Linux de 64 bits
$ sha256sum zkc-linux-amd64-v0.2.0.tar.gz
51dd11ffbcc573462eb61df8fa5caa60677bcc9178fda5d68d02b3414aa6765f zkc-linux-amd64-v0.2.0.tar.gz
Importe a tecla de assinatura de liberação do ZKC no 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 se a assinatura do manifesto do arquivo é válida e criada pela chave de assinatura de liberação do 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
O zip ou tarball com binários para sua plataforma agora é verificado e você pode ter certeza de que eles foram gerados pela equipe do ZKC.
Com a liberação 0.3.0, o formato de disco do ZkSserver foi alterado. É aconselhável fazer backup do diretório ZkSserver antes de executar a nova versão do ZkSserver. O código contém o código de atualização e foi testado, no entanto, deve -se sempre atender a esse aviso antes das atualizações.
O ZKC ainda não foi auditado. Use sabiamente.
Estamos procurando contratados para auditar e desenvolver o ZKC e suas LIBs criptográficas. O salário é oferecido no Decred.
O ZKC é licenciado sob a licença CopyFree ISC.