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許可證獲得許可。