제로 지식 커뮤니케이션 인 ZKC는 여러 당사자간에 개인적이고 안전한 커뮤니케이션을 가능하게하는 다양한 프로그램입니다.
ZKC 제품군은 개념 증명 도구입니다! 이 코드는 완전히 분리되지 않고 다소 얽히게함으로써이를 반영합니다. 우리는 중요한 비트가 올바른지 확인하기 위해 세심한주의를 기울 였지만 확실히 버그가 숨어 있습니다. 우리는 ZKC를보다 성숙한 프로젝트로 옮기는 PRS를 행복하게 가져갈 것입니다.
설치 프로세스를 마무리하기 위해 zkserver 사용자를 만들고 로그인하는 것이 좋습니다. zkserver 디렉토리를 작성하고 구성 파일을 제자리에 복사 한 다음 구성 파일을 편집하십시오.
$ mkdir ~ /.zkserver
$ cp $GOPATH /src/github.com/companyzero/zkc/zkserver/zkserver.conf ~ /.zkserver/
$ vi ~ /.zkserver/zkserver.conf구성 파일에는 2 개의 항목이 있습니다.
allowidentify = no
createpolicy = noAllowIdentify는 외부 당사자에게 자신을 식별 할 수 있는지 Zkserver에게 명시 적으로 알려주는 설정입니다. 이 손잡이는 실제 폐쇄 시스템을 가능하게하기 위해 존재합니다. 이 설정이 설정되지 않으면 이와 통신 할 수있는 유일한 방법은 이전 에이 zkserver와 통신 한 zkclient 또는 zkimport를 사용하여 Zkserver Identity 레코드를 구성에 삽입하는 Zkclient를 갖는 것입니다. 이 노브가 예로 설정되면 zkserver는 사전 세션 단계에서 신원의 쿼리를 허용합니다.
CreatePolicy에는 세 가지 설정이 있습니다. 예, 아니요 및 토큰. CreatePolicy가 설정되면 외부 당사자는 계정을 만들 수 없습니다. CreatePolicy가 YES로 설정된 경우 ZkClient는이 Zkserver에서 계정을 생성 할 수 있습니다. 마지막으로 CreatePolicy가 토큰으로 설정되면 zkclient는 계정 생성 중에 토큰을 제공해야합니다. 이 토큰은 Zkserver 관리로부터 얻을 수 있습니다. zkservertoken 명령을 실행하여 토큰을 만들 수 있습니다. 이것은 계정을 만들기 위해 한 번 사용할 수있는 토큰을 뱉어냅니다.
참고 : 구성 파일에서 모든 디렉토리/파일 이름 항목을 검토 해야하는 기본값 ~/.zkserver 디렉토리를 사용하지 않는 경우.
구성 파일의 나머지 항목은 매우 자체 설명입니다.
ZKCLIENT는 IRSSI 모양의 커뮤니케이션 클라이언트입니다. IRSSI 사용자는 인터페이스가 친숙하다고 생각합니다.
zkclient가 처음 시작되면 ~/.zkclient/zkclient.conf 에서 기본 디렉토리 및 구성 파일을 만듭니다. 구성 파일을 변경하려면 프로그램을 종료하고 구성 파일을 편집하고 zkclient를 다시 시작해야합니다.
0.3.0보다 큰 버전은 다음 방법을 사용하여 기본 구성 파일을 내보낼 수 있습니다.
$ zkclient -export /tmp/zkclient.conf
exporting config file to: /tmp/zkclient.confzkclient 디렉토리를 작성하고 구성 파일을 제자리에 복사 한 다음 구성 파일을 편집하십시오.
$ mkdir ~ /.zkclient
$ cp $GOPATH /src/github.com/companyzero/zkc/zkclient/zkclient.conf ~ /.zkclient/
$ vi ~ /.zkclient/zkclient.conf구성 파일에 살펴 봐야하는 1 개의 항목이 있습니다.
savehistory = noSaveHistory는 기본적으로 기본적으로 NO로 설정됩니다. zkclient를 종료 한 후 지속적인 역사를 원한다면 이것을 예로 설정하십시오.
참고 : 구성 파일에서 모든 디렉토리/파일 이름 항목을 검토 해야하는 기본값 ~/.zkclient 디렉토리를 사용하지 않는 경우.
구성 파일의 나머지 항목은 매우 자체 설명입니다.
ZkClient를 처음 시작하면 사용자 이름, Nick, Server 및 Token을 사용자에게 프롬프트합니다. 사용자 이름은 귀하의 이름 (예 : Alice McAlice)이며, Nick은 귀하가 수신 된 (예 : Alice1337)에 표시되는 선호하는 Nick입니다 (예 : Alice1337), 서버는 Zkserver의 주소이며 마지막으로 Token은 계정을 생성하기 위해 Token을 제공 한 Zkserver 관리자입니다. 이 단계가 완료되면 이제 Zkserver와 통신 할 수 있습니다.
이 시점에서 zkclient tui는 완전히 올라가고 한 번은 어떤 명령을 사용할 수 있는지에 대한 아이디어를 얻기 위해 입력 /도움말을 할 수 있습니다.
Zkclient는 통신에 래칫 된 암호화를 사용하며 서버는 메시지를 스누핑 할 수 없습니다. Zkserver가 볼 수있는 유일한 것은 누군가가 다른 사람과 의사 소통하고 있다는 것입니다. 따라서 사용자는 자신 사이에 래칫을 설정해야합니다. 예제와 함께 흐름을 설명해 봅시다.
Alice는 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는 사용자간에 암호화 된 멍청이 만 전달합니다. 교환되는 것에 대해 전혀 지식이 없습니다. 따라서 모든 당사자가 온라인으로 오랫동안 오랫동안 오랫동안 여행 할 수있는 주요 교환은 마무리 될 수 있습니다.
이 시점에서 Alice 또는 Bob은 /m 명령을 사용하여 메시지를 돌려 보내고 Fort를 보낼 수있을 것입니다 (예 : Alice는 다음 /m Bob Hello!).
Zkclient 및 Tui 키에는 더 많은 명령이 있지만 다른 곳에 설명되어 있습니다.
Zkexport는 Zkserver 또는 Zkclient Public Identity를 내보내고 있습니다. Zkserver Identity에는 호스트 주소도 포함됩니다. 결과 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는 Zkexported Base64 Strings를 가져 오기위한 것입니다.
여기에 예제를 추가하십시오.
Zkserver 사용자가 간단히 Zkservertoken을 입력하면 도구가 단일 사용 토큰을 뱉어냅니다. 예를 들어:
$ zkservertoken
7000 8677 6548 2615이진 릴리스는 일반적인 운영 체제 및 아키텍처를 위해 제공됩니다.
https://github.com/companyzero/zkc/releases
각 릴리스에는 해당 릴리스의 바이너리에 대한 SHA256 해시가있는 매니페스트 파일이 포함되어 있습니다. 이를 확인하려면 다음이 필요합니다.
이진을 확인하는 단계는 다음과 같습니다.
파일 매니페스트, 파일 매니페스트의 서명, 여기에서 OS의 Zip/Tarball을 다운로드하십시오.
OS의 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)
파일 Manifest의 서명이 유효하고 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
플랫폼을위한 바이너리가있는 Zip 또는 Tarball은 이제 확인되었으며 ZKC 팀이 생성했다고 확신 할 수 있습니다.
0.3.0 릴리스로 디스크 형식의 ZkServer가 변경되었습니다. 새 Zkserver 버전을 실행하기 전에 Zkserver 디렉토리를 백업하는 것이 좋습니다. 이 코드에는 업그레이드 코드가 포함되어 있으며 테스트되었지만 업그레이드 전에 항상이 경고에 유의해야합니다.
ZKC는 아직 감사되지 않았습니다. 현명하게 사용하십시오.
우리는 계약자가 ZKC와 암호화 Libs를 감사하고 개발할 수있는 계약자를 찾고 있습니다. 급여는 Decred에서 제공됩니다.
ZKC는 CopyFree ISC 라이센스에 따라 라이센스가 부여됩니다.