ZKC,零知识通信,是一套计划,可实现任何数量各方之间的私人和安全通信。
ZKC套件是概念验证工具!该代码是通过某种交织而不是完全合理地分开来反映这一点的。尽管我们非常小心,以确保重要的位是正确的,但肯定是潜伏的虫子。我们将很乐意将将ZKC转移到一个更成熟的项目中。
最好创建Zkserver用户并登录以最终确定安装过程。创建一个Zkserver目录,然后将配置文件复制到位,然后编辑配置文件。
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.conf在配置文件中必须查看2个项目。
allowidentify = no
createpolicy = no允许Indentify是一种明确告诉Zkserver是否允许将自己识别为外部当事方的设置。该旋钮存在以实现真正的封闭系统。当此设置设置为与之通信的唯一方法是将ZKCLIENT与此之前与此Zkserver通信的ZkClient或使用Zkclient使用Zkimport将Zkserver Identity Record插入其配置中。如果设置为“是”,则Zkserver将允许在会议前阶段查询其身份。
CreatePolicy具有三个设置:是的,不是和令牌。当createPolicy设置为无外部方时,无法创建帐户。如果将CreatePolicy设置为是,任何Zkclient都可以在此Zkserver上创建一个帐户。最后,如果设置了createPolicy来代币,则ZKClient必须在帐户创建期间提供令牌。该令牌可以从Zkserver管理中获得。可以通过运行zkservertoken命令作为Zkserver管理员创建令牌。这将吐出一个可以用于创建帐户的令牌。
注意:如果您不使用默认〜/.zkserver目录,则需要查看配置文件中的所有目录/文件名条目。
配置文件中的其余项目是相当自我解释的。
ZkClient是IRSSI外观类似的通信客户端。 IRSSI的用户会发现它的接口很熟悉。
如果首次启动zkclient,它将在~/.zkclient/zkclient.conf中创建默认目录和配置文件。如果您想更改配置文件,则必须退出程序,请编辑配置文件并重新启动ZKClient。
大于0.3.0的版本可以使用以下方法导出默认配置文件:
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.conf创建一个ZkClient目录,然后将配置文件复制到位,然后编辑配置文件。
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.conf在配置文件中必须查看1个项目。
savehistory = no默认情况下,Save History设置为NO。如果您想拥有持久的历史记录(退出ZKCLIENT后)将其设置为“是”。
注意:如果您不使用默认〜/.zkclient目录,则需要查看配置文件中的所有目录/文件名条目。
配置文件中的其余项目是相当自我解释的。
首次启动ZKClient后,它将提示用户的使用:用户名,Nick,Server和令牌。用户名是您的名称(例如Alice McAlice),nick是您的首选尼克,因为它由您收到的(例如Alice1337)显示,服务器是您的Zkserver的地址,最后是标记是提供标记的Zkserver管理员,以创建一个帐户(如果需要的话)。此步骤完成后,您现在可以与Zkserver进行通信。
在这一点上,Zkclient TUI已完全启动,一旦可以输入 /帮助以了解可用的命令。
Zkclient使用棘轮加密进行通信,服务器无法侦听消息。 Zkserver唯一可以看到的是有人正在与其他人进行交流。因此,这要求用户在他们之间设置棘轮。让我们用一个示例来说明流程。
假设爱丽丝想与鲍勃(Bob)进行交流,并且都在共享的zkserver上有一个帐户,则该过程如下:
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仅在用户之间来回传递加密的斑点。它在所有正在交换的内容上都不知道。因此,只有一旦所有各方在网上进行足够长的时间,所有斑点都可以来回旅行。
在这一点上,爱丽丝或鲍勃将能够使用 /M命令将消息发送回消息(例如,爱丽丝(Alice)会在下面 /m鲍勃(M Bob Hello)上hello!)。
Zkclient和Tui键中还有更多命令,但在其他地方描述了这些命令。
Zkexport导出ZKSERVER或ZKCLIENT公共身份。 Zkserver身份也包括主机地址。可以通过电子邮件发送或以其他方式交换所得的base64字符串。
zkclient示例:
$ zkexport -root /Users/marco/.zkclient1/
AAAAEU1hcmNvIFBlZXJlYm9vbSAxAAAAAAAABm1hcmNvMQAAY3rsUd6bTpLI/n2EwmGKPkK3dA/V+wyz5HHLiQgzHNJ9KAZTOrGznd9Ulhe0Y0EVoW8OkuM/G51w6BdvIOm1CWaOAhw8SJi0/vbjZzETd8k397Vl3LPcDUFUbp+JQVKdtBWDhevh3MFN0DY7Oc5ZZrT+lIE+KVwQm/PaPpeIohoWAEBu3HEE6vuq4eQt7BQ6dbEV61ZKUHbMm/61ymhXCA==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旨在进口Zkexport的Base64字符串。
在此处添加示例。
由于ZKSERVER用户只需键入Zkservertoken即可,该工具将吐出一个用途令牌。例如:
$ zkservertoken
7000 8677 6548 2615为常见的操作系统和体系结构提供了二进制版本:
https://github.com/companyzero/zkc/releases
每个版本都包含一个清单文件,并在该版本中包含二进制文件的SHA256哈希。要验证这些,您将需要:
验证二进制文件的步骤如下:
从此处下载文件清单,文件清单的签名以及您的操作系统的zip/tarball。
获取操作系统的zip/tarball的SHA256值,并检查它与文件清单中的值匹配,例如64位Linux
$ sha256sum zkc-linux-amd64-v0.2.0.tar.gz
51dd11ffbcc573462eb61df8fa5caa60677bcc9178fda5d68d02b3414aa6765f zkc-linux-amd64-v0.2.0.tar.gz
导入GNUPG中的ZKC发布签名密钥。
$ 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)
验证文件清单的签名有效,并由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
现在已经验证了带有二进制文件的拉链或带有二进制文件的tarball,您可以相信它们是由ZKC团队生成的。
随着0.3.0释放,更改了Zkserver的磁盘格式。建议在运行新的Zkserver版本之前备份Zkserver目录。该代码包含升级代码,并已对其进行测试,但是在升级之前应始终注意此警告。
ZKC尚未受到审核。明智地使用。
我们正在寻找承包商来审核和开发ZKC及其加密货币。付款是在Decred提供的。
ZKC已根据复制ISC许可证获得许可。