aboutsummaryrefslogtreecommitdiff
path: root/draft-schanzen-gns.txt
diff options
context:
space:
mode:
Diffstat (limited to 'draft-schanzen-gns.txt')
-rw-r--r--draft-schanzen-gns.txt266
1 files changed, 161 insertions, 105 deletions
diff --git a/draft-schanzen-gns.txt b/draft-schanzen-gns.txt
index b44d435..dbfbae6 100644
--- a/draft-schanzen-gns.txt
+++ b/draft-schanzen-gns.txt
@@ -66,19 +66,20 @@ Table of Contents
66 3.1. PKEY . . . . . . . . . . . . . . . . . . . . . . . . . . 5 66 3.1. PKEY . . . . . . . . . . . . . . . . . . . . . . . . . . 5
67 3.2. GNS2DNS . . . . . . . . . . . . . . . . . . . . . . . . . 6 67 3.2. GNS2DNS . . . . . . . . . . . . . . . . . . . . . . . . . 6
68 3.3. LEHO . . . . . . . . . . . . . . . . . . . . . . . . . . 6 68 3.3. LEHO . . . . . . . . . . . . . . . . . . . . . . . . . . 6
69 3.4. BOX . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 69 3.4. NICK . . . . . . . . . . . . . . . . . . . . . . . . . . 7
70 3.5. BOX . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
70 4. Publishing records . . . . . . . . . . . . . . . . . . . . . 8 71 4. Publishing records . . . . . . . . . . . . . . . . . . . . . 8
71 4.1. Key derivations . . . . . . . . . . . . . . . . . . . . . 8 72 4.1. Key derivations . . . . . . . . . . . . . . . . . . . . . 8
72 4.2. Resource records block . . . . . . . . . . . . . . . . . 9 73 4.2. Resource records block . . . . . . . . . . . . . . . . . 9
73 4.3. Block data encryption and decryption . . . . . . . . . . 10 74 4.3. Block data encryption and decryption . . . . . . . . . . 11
74 5. Internationalization and Character Encoding . . . . . . . . . 13 75 5. Internationalization and Character Encoding . . . . . . . . . 13
75 6. Record Resolution . . . . . . . . . . . . . . . . . . . . . . 13 76 6. Record Resolution . . . . . . . . . . . . . . . . . . . . . . 13
76 6.1. Entry Zone . . . . . . . . . . . . . . . . . . . . . . . 13 77 6.1. Entry Zone . . . . . . . . . . . . . . . . . . . . . . . 14
77 6.2. Recursive Resolution . . . . . . . . . . . . . . . . . . 13 78 6.2. Recursive Resolution . . . . . . . . . . . . . . . . . . 14
78 7. Namespace Revocation . . . . . . . . . . . . . . . . . . . . 13 79 7. Namespace Revocation . . . . . . . . . . . . . . . . . . . . 14
79 8. Security Considerations . . . . . . . . . . . . . . . . . . . 13 80 8. Security Considerations . . . . . . . . . . . . . . . . . . . 14
80 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 81 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14
81 10. Test Vectors . . . . . . . . . . . . . . . . . . . . . . . . 13 82 10. Test Vectors . . . . . . . . . . . . . . . . . . . . . . . . 14
82 11. Normative References . . . . . . . . . . . . . . . . . . . . 16 83 11. Normative References . . . . . . . . . . . . . . . . . . . . 16
83 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 84 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17
84 85
@@ -104,8 +105,7 @@ Table of Contents
104 some respects as even as an alternative to some of today's Public Key 105 some respects as even as an alternative to some of today's Public Key
105 Infrastructures, in particular X.509 for the Web. 106 Infrastructures, in particular X.509 for the Web.
106 107
107 This document contains the GNU Name System (GNS) technical 108
108 specification of the GNU Name System (GNS), a fully decentralized and
109 109
110 110
111 111
@@ -114,6 +114,8 @@ Schanzenbach, et al. Expires 24 January 2020 [Page 2]
114Internet-Draft The GNU Name System July 2019 114Internet-Draft The GNU Name System July 2019
115 115
116 116
117 This document contains the GNU Name System (GNS) technical
118 specification of the GNU Name System (GNS), a fully decentralized and
117 censorship-resistant name system. GNS provides a privacy-enhancing 119 censorship-resistant name system. GNS provides a privacy-enhancing
118 alternative to the Domain Name System (DNS). The design of GNS 120 alternative to the Domain Name System (DNS). The design of GNS
119 incorporates the capability to integrate and coexist with DNS. GNS 121 incorporates the capability to integrate and coexist with DNS. GNS
@@ -163,8 +165,6 @@ Internet-Draft The GNU Name System July 2019
163 165
164 166
165 167
166
167
168Schanzenbach, et al. Expires 24 January 2020 [Page 3] 168Schanzenbach, et al. Expires 24 January 2020 [Page 3]
169 169
170Internet-Draft The GNU Name System July 2019 170Internet-Draft The GNU Name System July 2019
@@ -352,7 +352,27 @@ Internet-Draft The GNU Name System July 2019
352 (e.g. "Host:" header) it must be converted to a punycode 352 (e.g. "Host:" header) it must be converted to a punycode
353 representation [RFC3492]. 353 representation [RFC3492].
354 354
3553.4. BOX 3553.4. NICK
356
357 Nickname records can be used by zone administrators to publish an
358 indication on what label this zone prefers to be referred to. This
359 is a suggestion to other zones what label to use when creating a PKEY
360 Section 3.1 record containing this zone's public zone key. A NICK
361 resource record contains an UTF-8 string (which is not 0-terminated)
362 representing the preferred label. This string may NOT inlcude a ".".
363 A NICK DATA entry has the following format:
364
365 0 8 16 24 32 40 48 56
366 +-----+-----+-----+-----+-----+-----+-----+-----+
367 | NICKNAME |
368 / /
369 / /
370 | |
371 +-----+-----+-----+-----+-----+-----+-----+-----+
372
373 Figure 6
374
3753.5. BOX
356 376
357 In GNS, every "." in a name delegates to another zone, and GNS 377 In GNS, every "." in a name delegates to another zone, and GNS
358 lookups are expected to return all of the required useful information 378 lookups are expected to return all of the required useful information
@@ -366,6 +386,14 @@ Internet-Draft The GNU Name System July 2019
366 received, a GNS resolver must unbox it if the name to be resolved 386 received, a GNS resolver must unbox it if the name to be resolved
367 continues with "_SERVICE._PROTO", otherwise it is to be left 387 continues with "_SERVICE._PROTO", otherwise it is to be left
368 untouched. This way, TLSA (and SRV) records do not require a 388 untouched. This way, TLSA (and SRV) records do not require a
389
390
391
392Schanzenbach, et al. Expires 24 January 2020 [Page 7]
393
394Internet-Draft The GNU Name System July 2019
395
396
369 separate network request, and TLSA records become inseparable from 397 separate network request, and TLSA records become inseparable from
370 the corresponding address records. A BOX DATA entry has the 398 the corresponding address records. A BOX DATA entry has the
371 following format: 399 following format:
@@ -380,20 +408,11 @@ Internet-Draft The GNU Name System July 2019
380 | | 408 | |
381 +-----+-----+-----+-----+-----+-----+-----+-----+ 409 +-----+-----+-----+-----+-----+-----+-----+-----+
382 410
383 Figure 6 411 Figure 7
384 412
385 PROTO the 16-bit protocol number, e.g. 6 for tcp. In network byte 413 PROTO the 16-bit protocol number, e.g. 6 for tcp. In network byte
386 order. 414 order.
387 415
388
389
390
391
392Schanzenbach, et al. Expires 24 January 2020 [Page 7]
393
394Internet-Draft The GNU Name System July 2019
395
396
397 SVC the 16-bit service value of the boxed record, i.e. the port 416 SVC the 16-bit service value of the boxed record, i.e. the port
398 number. In network byte order. 417 number. In network byte order.
399 418
@@ -422,6 +441,15 @@ Internet-Draft The GNU Name System July 2019
422 q := SHA512 (zk_h) 441 q := SHA512 (zk_h)
423 442
424 We use a hash-based key derivation function (HKDF) as defined in 443 We use a hash-based key derivation function (HKDF) as defined in
444
445
446
447
448Schanzenbach, et al. Expires 24 January 2020 [Page 8]
449
450Internet-Draft The GNU Name System July 2019
451
452
425 [RFC5869]. We use HMAC-SHA512 for the extraction phase and HMAC- 453 [RFC5869]. We use HMAC-SHA512 for the extraction phase and HMAC-
426 SHA256 for the expansion phase. 454 SHA256 for the expansion phase.
427 455
@@ -443,13 +471,6 @@ Internet-Draft The GNU Name System July 2019
443 zk_h is a 256-bit public key derived from the zone key "zk" using 471 zk_h is a 256-bit public key derived from the zone key "zk" using
444 the keying material "h". 472 the keying material "h".
445 473
446
447
448Schanzenbach, et al. Expires 24 January 2020 [Page 8]
449
450Internet-Draft The GNU Name System July 2019
451
452
453 L is the prime-order subgroup as defined in Section 2. 474 L is the prime-order subgroup as defined in Section 2.
454 475
455 q Is the 512-bit DHT key under which the resource records block is 476 q Is the 512-bit DHT key under which the resource records block is
@@ -470,6 +491,21 @@ Internet-Draft The GNU Name System July 2019
470 refresh publication. A GNS resource records block has the following 491 refresh publication. A GNS resource records block has the following
471 format: 492 format:
472 493
494
495
496
497
498
499
500
501
502
503
504Schanzenbach, et al. Expires 24 January 2020 [Page 9]
505
506Internet-Draft The GNU Name System July 2019
507
508
473 0 8 16 24 32 40 48 56 509 0 8 16 24 32 40 48 56
474 +-----+-----+-----+-----+-----+-----+-----+-----+ 510 +-----+-----+-----+-----+-----+-----+-----+-----+
475 | SIGNATURE | 511 | SIGNATURE |
@@ -495,17 +531,10 @@ Internet-Draft The GNU Name System July 2019
495 / | 531 / |
496 +-----+-----+-----+-----+-----+-----+-----+-----+ 532 +-----+-----+-----+-----+-----+-----+-----+-----+
497 533
498 Figure 7 534 Figure 8
499 535
500 where: 536 where:
501 537
502
503
504Schanzenbach, et al. Expires 24 January 2020 [Page 9]
505
506Internet-Draft The GNU Name System July 2019
507
508
509 SIGNATURE A 512-bit ECDSA deterministic signature compliant with 538 SIGNATURE A 512-bit ECDSA deterministic signature compliant with
510 [RFC6979]. The signature is computed over the data following the 539 [RFC6979]. The signature is computed over the data following the
511 PUBLIC KEY field. The signature is created using the derived 540 PUBLIC KEY field. The signature is created using the derived
@@ -526,6 +555,13 @@ Internet-Draft The GNU Name System July 2019
526 PURPOSE A 32-bit signature purpose flag. This field MUST be 15 (in 555 PURPOSE A 32-bit signature purpose flag. This field MUST be 15 (in
527 network byte order). 556 network byte order).
528 557
558
559
560Schanzenbach, et al. Expires 24 January 2020 [Page 10]
561
562Internet-Draft The GNU Name System July 2019
563
564
529 EXPIRATION Specifies when the resource records block expires and the 565 EXPIRATION Specifies when the resource records block expires and the
530 encrypted block SHOULD be removed from the DHT and caches as it is 566 encrypted block SHOULD be removed from the DHT and caches as it is
531 likely stale. However, applications MAY continue to use non- 567 likely stale. However, applications MAY continue to use non-
@@ -546,22 +582,6 @@ Internet-Draft The GNU Name System July 2019
546 set RDATA into the BDATA field of a GNS record block. The wire 582 set RDATA into the BDATA field of a GNS record block. The wire
547 format of the RDATA looks as follows: 583 format of the RDATA looks as follows:
548 584
549
550
551
552
553
554
555
556
557
558
559
560Schanzenbach, et al. Expires 24 January 2020 [Page 10]
561
562Internet-Draft The GNU Name System July 2019
563
564
565 0 8 16 24 32 40 48 56 585 0 8 16 24 32 40 48 56
566 +-----+-----+-----+-----+-----+-----+-----+-----+ 586 +-----+-----+-----+-----+-----+-----+-----+-----+
567 | RR COUNT | EXPIRA- / 587 | RR COUNT | EXPIRA- /
@@ -586,10 +606,18 @@ Internet-Draft The GNU Name System July 2019
586 / PADDING / 606 / PADDING /
587 / / 607 / /
588 608
589 Figure 8 609 Figure 9
590 610
591 where: 611 where:
592 612
613
614
615
616Schanzenbach, et al. Expires 24 January 2020 [Page 11]
617
618Internet-Draft The GNU Name System July 2019
619
620
593 RR COUNT A 32-bit value containing the number of variable-length 621 RR COUNT A 32-bit value containing the number of variable-length
594 resource records which are following after this field in network 622 resource records which are following after this field in network
595 byte order. 623 byte order.
@@ -609,15 +637,6 @@ Internet-Draft The GNU Name System July 2019
609 then use "zk_h" to compute "q" which is the query for the DHT. Upon 637 then use "zk_h" to compute "q" which is the query for the DHT. Upon
610 receiving a block from the DHT, the receiver first checks that the 638 receiving a block from the DHT, the receiver first checks that the
611 PUBLIC KEY field matches "zk_h". Then, the client MUST verify the 639 PUBLIC KEY field matches "zk_h". Then, the client MUST verify the
612
613
614
615
616Schanzenbach, et al. Expires 24 January 2020 [Page 11]
617
618Internet-Draft The GNU Name System July 2019
619
620
621 signature. These steps are mandatory to prevent record spoofing and 640 signature. These steps are mandatory to prevent record spoofing and
622 MUST be performed before decryption. 641 MUST be performed before decryption.
623 642
@@ -639,6 +658,22 @@ Internet-Draft The GNU Name System July 2019
639 "K" into a 256-bit AES [RFC3826] key and a 256-bit TWOFISH [TWOFISH] 658 "K" into a 256-bit AES [RFC3826] key and a 256-bit TWOFISH [TWOFISH]
640 key: 659 key:
641 660
661
662
663
664
665
666
667
668
669
670
671
672Schanzenbach, et al. Expires 24 January 2020 [Page 12]
673
674Internet-Draft The GNU Name System July 2019
675
676
642 0 8 16 24 32 40 48 56 677 0 8 16 24 32 40 48 56
643 +-----+-----+-----+-----+-----+-----+-----+-----+ 678 +-----+-----+-----+-----+-----+-----+-----+-----+
644 | AES KEY | 679 | AES KEY |
@@ -652,7 +687,7 @@ Internet-Draft The GNU Name System July 2019
652 | | 687 | |
653 +-----+-----+-----+-----+-----+-----+-----+-----+ 688 +-----+-----+-----+-----+-----+-----+-----+-----+
654 689
655 Figure 9 690 Figure 10
656 691
657 Similarly, we divide "IV" into a 128-bit initialization vector and a 692 Similarly, we divide "IV" into a 128-bit initialization vector and a
658 128-bit initialization vector: 693 128-bit initialization vector:
@@ -666,15 +701,7 @@ Internet-Draft The GNU Name System July 2019
666 | | 701 | |
667 +-----+-----+-----+-----+-----+-----+-----+-----+ 702 +-----+-----+-----+-----+-----+-----+-----+-----+
668 703
669 704 Figure 11
670
671
672Schanzenbach, et al. Expires 24 January 2020 [Page 12]
673
674Internet-Draft The GNU Name System July 2019
675
676
677 Figure 10
678 705
679 The keys and IVs are used for a CFB128-AES-256 and CFB128-TWOFISH-256 706 The keys and IVs are used for a CFB128-AES-256 and CFB128-TWOFISH-256
680 chained symmetric cipher. Both ciphers are used in Cipher FeedBack 707 chained symmetric cipher. Both ciphers are used in Cipher FeedBack
@@ -694,6 +721,15 @@ Internet-Draft The GNU Name System July 2019
694 721
695 TODO 722 TODO
696 723
724
725
726
727
728Schanzenbach, et al. Expires 24 January 2020 [Page 13]
729
730Internet-Draft The GNU Name System July 2019
731
732
6976.1. Entry Zone 7336.1. Entry Zone
698 734
699 There are three sources from which the entry zone can be determined: 735 There are three sources from which the entry zone can be determined:
@@ -723,13 +759,6 @@ Internet-Draft The GNU Name System July 2019
723 The following represents a test vector for a record of type MX with a 759 The following represents a test vector for a record of type MX with a
724 priority of 10 and the mail hostname mail.example.com. 760 priority of 10 and the mail hostname mail.example.com.
725 761
726
727
728Schanzenbach, et al. Expires 24 January 2020 [Page 13]
729
730Internet-Draft The GNU Name System July 2019
731
732
733 label := "mail" 762 label := "mail"
734 763
735 d := 764 d :=
@@ -749,6 +778,14 @@ Internet-Draft The GNU Name System July 2019
749 f2dbf7930be76fb9 778 f2dbf7930be76fb9
750 5e7c80b1416f8ca6 779 5e7c80b1416f8ca6
751 dc50ce8e1fb759b9 780 dc50ce8e1fb759b9
781
782
783
784Schanzenbach, et al. Expires 24 January 2020 [Page 14]
785
786Internet-Draft The GNU Name System July 2019
787
788
752 fedcdcf546c17e9b 789 fedcdcf546c17e9b
753 4c4f23632855c053 790 4c4f23632855c053
754 6668e9f684f4dc33 791 6668e9f684f4dc33
@@ -778,14 +815,6 @@ Internet-Draft The GNU Name System July 2019
778 815
779 AES_IV := 816 AES_IV :=
780 a808b929bc9fad7a 817 a808b929bc9fad7a
781
782
783
784Schanzenbach, et al. Expires 24 January 2020 [Page 14]
785
786Internet-Draft The GNU Name System July 2019
787
788
789 686bbe3432bed77a 818 686bbe3432bed77a
790 819
791 TWOFISH_KEY := 820 TWOFISH_KEY :=
@@ -805,6 +834,14 @@ Internet-Draft The GNU Name System July 2019
805 000a046d61696c07 Priority (10) |4 | mail | 7 834 000a046d61696c07 Priority (10) |4 | mail | 7
806 6578616d706c6503 example | 3 835 6578616d706c6503 example | 3
807 636f6d0000000000 com | \0 | Followed by 836 636f6d0000000000 com | \0 | Followed by
837
838
839
840Schanzenbach, et al. Expires 24 January 2020 [Page 15]
841
842Internet-Draft The GNU Name System July 2019
843
844
808 0000000000000000 24 bytes of padding to 2^6 845 0000000000000000 24 bytes of padding to 2^6
809 0000000000000000 846 0000000000000000
810 00000000 847 00000000
@@ -835,13 +872,6 @@ Internet-Draft The GNU Name System July 2019
835 001fd19a6406a721 872 001fd19a6406a721
836 713f0a0d 873 713f0a0d
837 874
838
839
840Schanzenbach, et al. Expires 24 January 2020 [Page 15]
841
842Internet-Draft The GNU Name System July 2019
843
844
84511. Normative References 87511. Normative References
846 876
847 [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", 877 [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
@@ -861,6 +891,13 @@ Internet-Draft The GNU Name System July 2019
861 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November 891 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
862 2003, <https://www.rfc-editor.org/info/rfc3629>. 892 2003, <https://www.rfc-editor.org/info/rfc3629>.
863 893
894
895
896Schanzenbach, et al. Expires 24 January 2020 [Page 16]
897
898Internet-Draft The GNU Name System July 2019
899
900
864 [RFC3826] Blumenthal, U., Maino, F., and K. McCloghrie, "The 901 [RFC3826] Blumenthal, U., Maino, F., and K. McCloghrie, "The
865 Advanced Encryption Standard (AES) Cipher Algorithm in the 902 Advanced Encryption Standard (AES) Cipher Algorithm in the
866 SNMP User-based Security Model", RFC 3826, 903 SNMP User-based Security Model", RFC 3826,
@@ -890,14 +927,6 @@ Internet-Draft The GNU Name System July 2019
890 for Security", RFC 7748, DOI 10.17487/RFC7748, January 927 for Security", RFC 7748, DOI 10.17487/RFC7748, January
891 2016, <https://www.rfc-editor.org/info/rfc7748>. 928 2016, <https://www.rfc-editor.org/info/rfc7748>.
892 929
893
894
895
896Schanzenbach, et al. Expires 24 January 2020 [Page 16]
897
898Internet-Draft The GNU Name System July 2019
899
900
901 [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital 930 [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital
902 Signature Algorithm (EdDSA)", RFC 8032, 931 Signature Algorithm (EdDSA)", RFC 8032,
903 DOI 10.17487/RFC8032, January 2017, 932 DOI 10.17487/RFC8032, January 2017,
@@ -917,6 +946,14 @@ Authors' Addresses
917 Email: schanzen@gnunet.org 946 Email: schanzen@gnunet.org
918 947
919 948
949
950
951
952Schanzenbach, et al. Expires 24 January 2020 [Page 17]
953
954Internet-Draft The GNU Name System July 2019
955
956
920 Christian Grothoff 957 Christian Grothoff
921 Berner Fachhochschule 958 Berner Fachhochschule
922 Hoeheweg 80 959 Hoeheweg 80
@@ -949,4 +986,23 @@ Authors' Addresses
949 986
950 987
951 988
952Schanzenbach, et al. Expires 24 January 2020 [Page 17] 989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008Schanzenbach, et al. Expires 24 January 2020 [Page 18]