[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [lsd0001] branch master updated: more hashing
From: |
gnunet |
Subject: |
[GNUnet-SVN] [lsd0001] branch master updated: more hashing |
Date: |
Tue, 10 Sep 2019 19:01:31 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository lsd0001.
The following commit(s) were added to refs/heads/master by this push:
new b51990e more hashing
b51990e is described below
commit b51990e6aed95ec8c212a4124a02dd661cbf70c2
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Tue Sep 10 18:59:38 2019 +0200
more hashing
---
draft-schanzen-gns.html | 1588 +++++++++++++++++++++++++++++++++++++++++++++++
draft-schanzen-gns.txt | 68 +-
draft-schanzen-gns.xml | 33 +-
3 files changed, 1641 insertions(+), 48 deletions(-)
diff --git a/draft-schanzen-gns.html b/draft-schanzen-gns.html
new file mode 100644
index 0000000..deb36fb
--- /dev/null
+++ b/draft-schanzen-gns.html
@@ -0,0 +1,1588 @@
+<!DOCTYPE html>
+<html lang="en" class="Internet-Draft">
+<head>
+<meta charset="utf-8">
+<meta content="Common,Latin" name="scripts">
+<meta content="initial-scale=1.0" name="viewport">
+<title>
+ The GNU Name System Specification
+ </title>
+<meta content="Martin Schanzenbach" name="author">
+<meta content="
+ This document contains the GNU Name System (GNS) technical
specification.
+ " name="description">
+<meta content="xml2rfc 2.26.0" name="generator">
+<meta content="name systems" name="keyword">
+<link href="draft-schanzen-gns.xml" type="application/rfc+xml" rel="alternate">
+<link href="#copyright" rel="license">
+<style type="text/css">/*
+
+ NOTE: Changes at the bottom of this file overrides some earlier settings.
+
+ Once the style has stabilized and has been adopted as an official RFC style,
+ this can be consolidated so that style settings occur only in one place, but
+ for now the contents of this file consists first of the initial CSS work as
+ provided to the RFC Formatter (xml2rfc) work, followed by itemized and
+ commented changes found necssary during the development of the v3
+ formatters.
+
+*/
+
+/* fonts */
+@import url('https://fonts.googleapis.com/css?family=Noto+Sans'); /*
Sans-serif */
+@import url('https://fonts.googleapis.com/css?family=Noto+Serif'); /* Serif
(print) */
+@import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); /*
Monospace */
+
+@viewport {
+ zoom: 1.0;
+ width: extend-to-zoom;
+}
+@-ms-viewport {
+ width: extend-to-zoom;
+ zoom: 1.0;
+}
+/* general and mobile first */
+html {
+}
+body {
+ max-width: 90%;
+ margin: 1.5em auto;
+ color: #222;
+ background-color: #fff;
+ font-size: 14px;
+ font-family: 'Noto Sans', Arial, Helvetica, sans-serif;
+ line-height: 1.6;
+ scroll-behavior: smooth;
+}
+.ears {
+ display: none;
+}
+
+/* headings */
+#title, h1, h2, h3, h4, h5, h6 {
+ margin: 1em 0 0.5em;
+ font-weight: bold;
+ line-height: 1.3;
+}
+#title {
+ clear: both;
+ border-bottom: 1px solid #ddd;
+ margin: 0 0 0.5em 0;
+ padding: 1em 0 0.5em;
+}
+.author {
+ padding-bottom: 4px;
+}
+h1 {
+ font-size: 26px;
+ margin: 1em 0;
+}
+h2 {
+ font-size: 22px;
+ margin-top: -20px; /* provide offset for in-page anchors */
+ padding-top: 33px;
+}
+h3 {
+ font-size: 18px;
+ margin-top: -36px; /* provide offset for in-page anchors */
+ padding-top: 42px;
+}
+h4 {
+ font-size: 16px;
+ margin-top: -36px; /* provide offset for in-page anchors */
+ padding-top: 42px;
+}
+h5, h6 {
+ font-size: 14px;
+}
+#n-copyright-notice {
+ border-bottom: 1px solid #ddd;
+ padding-bottom: 1em;
+ margin-bottom: 1em;
+}
+/* general structure */
+p {
+ padding: 0;
+ margin: 0 0 1em 0;
+ text-align: left;
+}
+div, span {
+ position: relative;
+}
+div {
+ margin: 0;
+}
+.alignRight.art-text {
+ background-color: #f9f9f9;
+ border: 1px solid #eee;
+ border-radius: 3px;
+ padding: 1em 1em 0;
+ margin-bottom: 1.5em;
+}
+.alignRight.art-text pre {
+ padding: 0;
+}
+.alignRight {
+ margin: 1em 0;
+}
+.alignRight > *:first-child {
+ border: none;
+ margin: 0;
+ float: right;
+ clear: both;
+}
+.alignRight > *:nth-child(2) {
+ clear: both;
+ display: block;
+ border: none;
+}
+svg {
+ display: block;
+}
+.alignCenter.art-text {
+ background-color: #f9f9f9;
+ border: 1px solid #eee;
+ border-radius: 3px;
+ padding: 1em 1em 0;
+ margin-bottom: 1.5em;
+}
+.alignCenter.art-text pre {
+ padding: 0;
+}
+.alignCenter {
+ margin: 1em 0;
+}
+.alignCenter > *:first-child {
+ border: none;
+ /* this isn't optimal, but it's an existence proof. PrinceXML doesn't
+ support flexbox yet.
+ */
+ display: table;
+ margin: 0 auto;
+}
+
+/* lists */
+ol, ul {
+ padding: 0;
+ margin: 0 0 1em 2em;
+}
+ol ol, ul ul, ol ul, ul ol {
+ margin-left: 1em;
+}
+li {
+ margin: 0 0 0.25em 0;
+}
+.ulCompact li {
+ margin: 0;
+}
+ul.empty, .ulEmpty {
+ list-style-type: none;
+}
+ul.empty li, .ulEmpty li {
+ margin-top: 0.5em;
+}
+ul.compact, .ulCompact,
+ol.compact, .olCompact {
+ line-height: 100%;
+ margin: 0 0 0 2em;
+}
+
+/* definition lists */
+dl {
+}
+dl > dt {
+ float: left;
+ margin-right: 1em;
+}
+/*
+dl.nohang > dt {
+ float: none;
+}
+*/
+dl > dd {
+ margin-bottom: .8em;
+ min-height: 1.3em;
+}
+dl.compact > dd, .dlCompact > dd {
+ margin-bottom: 0em;
+}
+dl > dd > dl {
+ margin-top: 0.5em;
+ margin-bottom: 0em;
+}
+
+/* links */
+a {
+ text-decoration: none;
+}
+a[href] {
+ color: #22e; /* Arlen: WCAG 2019 */
+}
+a[href]:hover {
+ background-color: #f2f2f2;
+}
+figcaption a[href],
+a[href].selfRef {
+ color: #222;
+}
+/* XXX probably not this:
+a.selfRef:hover {
+ background-color: transparent;
+ cursor: default;
+} */
+
+/* Figures */
+tt, code, pre, code {
+ background-color: #f9f9f9;
+ font-family: 'Roboto Mono', monospace;
+}
+pre {
+ border: 1px solid #eee;
+ margin: 0;
+ padding: 1em;
+}
+img {
+ max-width: 100%;
+}
+figure {
+ margin: 0;
+}
+figure blockquote {
+ margin: 0.8em 0.4em 0.4em;
+}
+figcaption {
+ font-style: italic;
+ margin: 0 0 1em 0;
+}
+@media screen {
+ pre {
+ overflow-x: auto;
+ max-width: 100%;
+ max-width: calc(100% - 22px);
+ }
+}
+
+/* aside, blockquote */
+aside, blockquote {
+ margin-left: 0;
+ padding: 1.2em 2em;
+}
+blockquote {
+ background-color: #f9f9f9;
+ color: #111; /* Arlen: WCAG 2019 */
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ margin: 1em 0;
+}
+cite {
+ display: block;
+ text-align: right;
+ font-style: italic;
+}
+
+/* tables */
+table {
+ width: 100%;
+ margin: 0 0 1em;
+ border-collapse: collapse;
+ border: 1px solid #eee;
+}
+th, td {
+ text-align: left;
+ vertical-align: top;
+ padding: 0.5em 0.75em;
+}
+th {
+ text-align: left;
+ background-color: #e9e9e9;
+}
+tr:nth-child(2n+1) > td {
+ background-color: #f5f5f5;
+}
+table caption {
+ font-style: italic;
+ margin: 0;
+ padding: 0;
+ text-align: left;
+}
+table p {
+ /* XXX to avoid bottom margin on table row signifiers. If paragraphs should
+ be allowed within tables more generally, it would be far better to select
on a class. */
+ margin: 0;
+}
+
+/* pilcrow */
+a.pilcrow {
+ color: #666; /* Arlen: AHDJ 2019 */
+ text-decoration: none;
+ visibility: hidden;
+ user-select: none;
+ -ms-user-select: none;
+ -o-user-select:none;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -webkit-touch-callout: none;
+}
+@media screen {
+ aside:hover > a.pilcrow,
+ p:hover > a.pilcrow,
+ blockquote:hover > a.pilcrow,
+ div:hover > a.pilcrow,
+ li:hover > a.pilcrow,
+ pre:hover > a.pilcrow {
+ visibility: visible;
+ }
+ a.pilcrow:hover {
+ background-color: transparent;
+ }
+}
+
+/* misc */
+hr {
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.bcp14 {
+ font-variant: small-caps;
+}
+
+.role {
+ font-variant: all-small-caps;
+}
+
+/* info block */
+#identifiers {
+ margin: 0;
+ font-size: 0.9em;
+}
+#identifiers dt {
+ width: 3em;
+ clear: left;
+}
+#identifiers dd {
+ float: left;
+ margin-bottom: 0;
+}
+#identifiers .authors .author {
+ display: inline-block;
+ margin-right: 1.5em;
+}
+#identifiers .authors .org {
+ font-style: italic;
+}
+
+/* The prepared/rendered info at the very bottom of the page */
+.docInfo {
+ color: #666; /* Arlen: WCAG 2019 */
+ font-size: 0.9em;
+ font-style: italic;
+ margin-top: 2em;
+}
+.docInfo .prepared {
+ float: left;
+}
+.docInfo .prepared {
+ float: right;
+}
+
+/* table of contents */
+#toc {
+ padding: 0.75em 0 2em 0;
+ margin-bottom: 1em;
+}
+nav.toc ul {
+ margin: 0 0.5em 0 0;
+ padding: 0;
+ list-style: none;
+}
+nav.toc li {
+ line-height: 1.3em;
+ margin: 0.75em 0;
+ padding-left: 1.2em;
+ text-indent: -1.2em;
+}
+/* references */
+.references dt {
+ text-align: right;
+ font-weight: bold;
+ min-width: 7em;
+}
+.references dd {
+ margin-left: 8em;
+ overflow: auto;
+}
+
+.refInstance {
+ margin-bottom: 1.25em;
+}
+
+.references .ascii {
+ margin-bottom: 0.25em;
+}
+
+/* index */
+.index ul {
+ margin: 0 0 0 1em;
+ padding: 0;
+ list-style: none;
+}
+.index ul ul {
+ margin: 0;
+}
+.index li {
+ margin: 0;
+ text-indent: -2em;
+ padding-left: 2em;
+ padding-bottom: 5px;
+}
+.indexIndex {
+ margin: 0.5em 0 1em;
+}
+.index a {
+ font-weight: 700;
+}
+/* make the index two-column on all but the smallest screens */
+@media (min-width: 600px) {
+ .index ul {
+ -moz-column-count: 2;
+ -moz-column-gap: 20px;
+ }
+ .index ul ul {
+ -moz-column-count: 1;
+ -moz-column-gap: 0;
+ }
+}
+
+/* authors */
+address.vcard {
+ font-style: normal;
+ margin: 1em 0;
+}
+
+address.vcard .nameRole {
+ font-weight: 700;
+ margin-left: 0;
+}
+address.vcard .label {
+ font-family: "Noto Sans",Arial,Helvetica,sans-serif;
+ margin: 0.5em 0;
+}
+address.vcard .type {
+ display: none;
+}
+.alternative-contact {
+ margin: 1.5em 0 1em;
+}
+hr.addr {
+ border-top: 1px dashed;
+ margin: 0;
+ color: #ddd;
+ max-width: calc(100% - 16px);
+}
+
+/* temporary notes */
+.rfcEditorRemove::before {
+ position: absolute;
+ top: 0.2em;
+ right: 0.2em;
+ padding: 0.2em;
+ content: "The RFC Editor will remove this note";
+ color: #9e2a00; /* Arlen: WCAG 2019 */
+ background-color: #ffd; /* Arlen: WCAG 2019 */
+}
+.rfcEditorRemove {
+ position: relative;
+ padding-top: 1.8em;
+ background-color: #ffd; /* Arlen: WCAG 2019 */
+ border-radius: 3px;
+}
+.cref {
+ background-color: #ffd; /* Arlen: WCAG 2019 */
+ padding: 2px 4px;
+}
+.crefSource {
+ font-style: italic;
+}
+/* alternative layout for smaller screens */
+@media screen and (max-width: 1023px) {
+ body {
+ padding-top: 2em;
+ }
+ #title {
+ padding: 1em 0;
+ }
+ h1 {
+ font-size: 24px;
+ }
+ h2 {
+ font-size: 20px;
+ margin-top: -18px; /* provide offset for in-page anchors */
+ padding-top: 38px;
+ }
+ #identifiers dd {
+ max-width: 60%;
+ }
+ #toc {
+ position: fixed;
+ z-index: 2;
+ top: 0;
+ right: 0;
+ padding: 0;
+ margin: 0;
+ background-color: inherit;
+ border-bottom: 1px solid #ccc;
+ }
+ #toc h2 {
+ margin: -1px 0 0 0;
+ padding: 4px 0 4px 6px;
+ padding-right: 1em;
+ min-width: 190px;
+ font-size: 1.1em;
+ text-align: right;
+ background-color: #444;
+ color: white;
+ cursor: pointer;
+ }
+ #toc h2::before { /* css hamburger */
+ float: right;
+ position: relative;
+ width: 1em;
+ height: 1px;
+ left: -164px;
+ margin: 6px 0 0 0;
+ background: white none repeat scroll 0 0;
+ box-shadow: 0 4px 0 0 white, 0 8px 0 0 white;
+ content: "";
+ }
+ #toc nav {
+ display: none;
+ padding: 0.5em 1em 1em;
+ overflow: auto;
+ height: calc(100vh - 48px);
+ border-left: 1px solid #ddd;
+ }
+}
+
+/* alternative layout for wide screens */
+@media screen and (min-width: 1024px) {
+ body {
+ max-width: 724px;
+ margin: 42px auto;
+ padding-left: 1.5em;
+ padding-right: 29em;
+ }
+ #toc {
+ position: fixed;
+ top: 42px;
+ right: 42px;
+ width: 25%;
+ margin: 0;
+ padding: 0 1em;
+ z-index: 1;
+ }
+ #toc h2 {
+ border-top: none;
+ border-bottom: 1px solid #ddd;
+ font-size: 1em;
+ font-weight: normal;
+ margin: 0;
+ padding: 0.25em 1em 1em 0;
+ }
+ #toc nav {
+ display: block;
+ height: calc(90vh - 84px);
+ bottom: 0;
+ padding: 0.5em 0 0;
+ overflow: auto;
+ }
+ img { /* future proofing */
+ max-width: 100%;
+ height: auto;
+ }
+}
+
+/* pagination */
+@media print {
+ body {
+
+ width: 100%;
+ }
+ p {
+ orphans: 3;
+ widows: 3;
+ }
+ #n-copyright-notice {
+ border-bottom: none;
+ }
+ #toc, #n-introduction {
+ page-break-before: always;
+ }
+ #toc {
+ border-top: none;
+ padding-top: 0;
+ }
+ figure, pre {
+ page-break-inside: avoid;
+ }
+ figure {
+ overflow: scroll;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ page-break-after: avoid;
+ }
+ h2+*, h3+*, h4+*, h5+*, h6+* {
+ page-break-before: avoid;
+ }
+ pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ font-size: 10pt;
+ }
+ table {
+ border: 1px solid #ddd;
+ }
+ td {
+ border-top: 1px solid #ddd;
+ }
+}
+
+/* This is commented out here, as the string-set: doesn't
+ pass W3C validation currently */
+/*
+.ears thead .left {
+ string-set: ears-top-left content();
+}
+
+.ears thead .center {
+ string-set: ears-top-center content();
+}
+
+.ears thead .right {
+ string-set: ears-top-right content();
+}
+
+.ears tfoot .left {
+ string-set: ears-bottom-left content();
+}
+
+.ears tfoot .center {
+ string-set: ears-bottom-center content();
+}
+
+.ears tfoot .right {
+ string-set: ears-bottom-right content();
+}
+*/
+
+@page :first {
+ padding-top: 0;
+ @top-left {
+ content: normal;
+ border: none;
+ }
+ @top-center {
+ content: normal;
+ border: none;
+ }
+ @top-right {
+ content: normal;
+ border: none;
+ }
+}
+
+@page {
+ size: A4;
+ margin-bottom: 45mm;
+ padding-top: 20px;
+ /* The follwing is commented out here, but set appropriately by in code, as
+ the content depends on the document */
+ /*
+ @top-left {
+ content: 'Internet-Draft';
+ vertical-align: bottom;
+ border-bottom: solid 1px #ccc;
+ }
+ @top-left {
+ content: string(ears-top-left);
+ vertical-align: bottom;
+ border-bottom: solid 1px #ccc;
+ }
+ @top-center {
+ content: string(ears-top-center);
+ vertical-align: bottom;
+ border-bottom: solid 1px #ccc;
+ }
+ @top-right {
+ content: string(ears-top-right);
+ vertical-align: bottom;
+ border-bottom: solid 1px #ccc;
+ }
+ @bottom-left {
+ content: string(ears-bottom-left);
+ vertical-align: top;
+ border-top: solid 1px #ccc;
+ }
+ @bottom-center {
+ content: string(ears-bottom-center);
+ vertical-align: top;
+ border-top: solid 1px #ccc;
+ }
+ @bottom-right {
+ content: '[Page ' counter(page) ']';
+ vertical-align: top;
+ border-top: solid 1px #ccc;
+ }
+ */
+
+}
+
+/* Changes introduced to fix issues found during implementation */
+/* Make sure links are clickable even if overlapped by following H* */
+a {
+ z-index: 2;
+}
+/* Separate body from document info even without intervening H1 */
+section {
+ clear: both;
+}
+
+
+/* Top align author divs, to avoid names without organization dropping level
with org names */
+.author {
+ vertical-align: top;
+}
+
+/* Leave room in document info to show Internet-Draft on one line */
+#identifiers dt {
+ width: 8em;
+}
+
+/* Don't waste quite as much whitespace between label and value in doc info */
+#identifiers dd {
+ margin-left: 1em;
+}
+
+/* Give floating toc a background color (needed when it's a div inside section
*/
+#toc {
+ background-color: white;
+}
+
+/* Make the collapsed ToC header render white on gray also when it's a link */
+@media screen and (max-width: 1023px) {
+ #toc h2 a,
+ #toc h2 a:link,
+ #toc h2 a:focus,
+ #toc h2 a:hover,
+ #toc a.toplink,
+ #toc a.toplink:hover {
+ color: white;
+ background-color: #444;
+ text-decoration: none;
+ }
+}
+
+/* Give the bottom of the ToC some whitespace */
+@media screen and (min-width: 1024px) {
+ #toc {
+ padding: 0 0 1em 1em;
+ }
+}
+
+/* Style section numbers with more space between number and title */
+.section-number {
+ padding-right: 0.5em;
+}
+
+/* prevent monospace from becoming overly large */
+tt, code, pre, code {
+ font-size: 95%;
+}
+
+/* Fix the height/width aspect for ascii art*/
+pre.sourcecode,
+.art-text pre {
+ line-height: 1.12;
+}
+
+
+/* Add styling for a link in the ToC that points to the top of the document */
+a.toplink {
+ float: right;
+ margin-right: 0.5em;
+}
+
+/* Fix the dl styling to match the RFC 7992 attributes */
+dl > dt,
+dl.dlParallel > dt {
+ float: left;
+ margin-right: 1em;
+}
+dl.dlNewline > dt {
+ float: none;
+}
+
+/* Provide styling for table cell text alignment */
+table td.text-left,
+table th.text-left {
+ text-align: left;
+}
+table td.text-center,
+table th.text-center {
+ text-align: center;
+}
+table td.text-right,
+table th.text-right {
+ text-align: right;
+}
+
+/* Make the alternative author contact informatio look less like just another
+ author, and group it closer with the primary author contact information */
+.alternative-contact {
+ margin: 0.5em 0 0.25em 0;
+}
+address .non-ascii {
+ margin: 0 0 0 2em;
+}
+
+/* With it being possible to set tables with alignment
+ left, center, and right, { width: 100%; } does not make sense */
+table {
+ width: auto;
+}
+
+/* Avoid reference text that sits in a block with very wide left margin,
+ because of a long floating dt label.*/
+.references dd {
+ overflow: visible;
+}
+
+/* Control caption placement */
+caption {
+ caption-side: bottom;
+}
+
+/* Limit the width of the author address vcard, so names in right-to-left
+ script don't end up on the other side of the page. */
+
+address.vcard {
+ max-width: 30em;
+ margin-right: auto;
+}
+
+/* For address alignment dependent on LTR or RTL scripts */
+address div.left {
+ text-align: left;
+}
+address div.right {
+ text-align: right;
+}
+
+/* Provide table alignment support. We can't use the alignX classes above
+ since they do unwanted things with caption and other styling. */
+table.right {
+ margin-left: auto;
+ margin-right: 0;
+}
+table.center {
+ margin-left: auto;
+ margin-right: auto;
+}
+table.left {
+ margin-left: 0;
+ margin-right: auto;
+}
+
+/* Give the table caption label the same styling as the figcaption */
+caption a[href] {
+ color: #222;
+}
+
+@media print {
+ .toplink {
+ display: none;
+ }
+
+ /* avoid overwriting the top border line with the ToC header */
+ #toc {
+ padding-top: 1px;
+ }
+
+ /* Avoid page breaks inside dl and author address entries */
+ dd {
+ page-break-before: avoid;
+ }
+ .vcard {
+ page-break-inside: avoid;
+ }
+
+}
+/* Avoid wrapping of URLs in references */
+.references a {
+ white-space: nowrap;
+}
+/* Tweak the bcp14 keyword presentation */
+.bcp14 {
+ font-variant: small-caps;
+ font-weight: bold;
+ font-size: 0.9em;
+}
+/* Tweak the invisible space above H* in order not to overlay links in text
above */
+ h2 {
+ margin-top: -18px; /* provide offset for in-page anchors */
+ padding-top: 31px;
+ }
+ h3 {
+ margin-top: -18px; /* provide offset for in-page anchors */
+ padding-top: 24px;
+ }
+ h4 {
+ margin-top: -18px; /* provide offset for in-page anchors */
+ padding-top: 24px;
+ }
+/* Float artwork pilcrow to the right */
+.artwork a.pilcrow {
+ display: block;
+ line-height: 0.7;
+ margin-top: 0.15em;
+}
+/* Make pilcrows on dd visible */
+@media screen {
+ dd:hover > a.pilcrow {
+ visibility: visible;
+ }
+}
+/* Make the placement of figcaption match that of a table's caption
+ by removing the figure's added bottom margin */
+.alignLeft.art-text,
+.alignCenter.art-text,
+.alignRight.art-text {
+ margin-bottom: 0;
+}
+.alignLeft,
+.alignCenter,
+.alignRight {
+ margin: 1em 0 0 0;
+}
+</style>
+<link href="rfc-local.css" type="text/css" rel="stylesheet">
+</head>
+<body>
+<script>
+async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(let
t=0;t<e.length;t++)if(/#identifiers/.exec(e[t].selectorText)){const
a=e[t].cssText.replace("#identifiers","#metadata");document.styleSheets[0].insertRule(a,document.styleSheets[0].cssRules.length)}}catch(e){console.log(e)}const
e=document.getElementById("metadata");if(e){e.style.background="#eee";try{var
t;t=document.URL.indexOf("html")>=0?document.URL.replace(/html$/,"json"):document.URL+".json";const
o=aw [...]
+<script src="metadata.min.js"></script>
+<table class="ears">
+<thead><tr>
+<td class="left">Internet-Draft</td>
+<td class="center">The GNU Name System</td>
+<td class="right">July 2019</td>
+</tr></thead>
+<tfoot><tr>
+<td class="left">Schanzenbach</td>
+<td class="center">Expires 24 January 2020</td>
+<td class="right">[Page]</td>
+</tr></tfoot>
+</table>
+<div class="document-information">
+<dl id="identifiers">
+<dt class="label-workgroup">Workgroup:</dt>
+<dd class="workgroup">Independent Stream</dd>
+<dt class="label-internet-draft">Internet-Draft:</dt>
+<dd class="internet-draft">draft-schanzen-gns-00</dd>
+<dt class="label-published">Published:</dt>
+<dd class="published">
+<time datetime="2019-07-23" class="published">23 July 2019</time>
+ </dd>
+<dt class="label-intended-status">Intended Status:</dt>
+<dd class="intended-status">Informational</dd>
+<dt class="label-expires">Expires:</dt>
+<dd class="expires"><time datetime="2020-01-24">24 January 2020</time></dd>
+<dt class="label-authors">Author:</dt>
+<dd class="authors">
+<div class="author">
+ <div class="author-name">M.S. Schanzenbach</div>
+<div class="org">GNUnet e.V.</div>
+</div>
+</dd>
+</dl>
+</div>
+<h1 id="title">
+ The GNU Name System Specification
+ </h1>
+<section id="section-abstract">
+ <h2 id="abstract"><a href="#abstract" class="selfRef">Abstract</a></h2>
+<p id="section-abstract-1">This document contains the GNU Name System (GNS)
technical specification.<a href="#section-abstract-1" class="pilcrow">¶</a></p>
+</section>
+<div id="status-of-memo">
+<section id="section-boilerplate.1">
+ <h2 id="name-status-of-this-memo">
+<a href="#name-status-of-this-memo" class="section-name selfRef">Status of
This Memo</a>
+ </h2>
+<p id="section-boilerplate.1-1">
+ This Internet-Draft is submitted in full conformance with the
+ provisions of BCP 78 and BCP 79.<a href="#section-boilerplate.1-1"
class="pilcrow">¶</a></p>
+<p id="section-boilerplate.1-2">
+ Internet-Drafts are working documents of the Internet Engineering Task
+ Force (IETF). Note that other groups may also distribute working
+ documents as Internet-Drafts. The list of current Internet-Drafts is
+ at <span><a
href="https://datatracker.ietf.org/drafts/current/">https://datatracker.ietf.org/drafts/current/</a></span>.<a
href="#section-boilerplate.1-2" class="pilcrow">¶</a></p>
+<p id="section-boilerplate.1-3">
+ Internet-Drafts are draft documents valid for a maximum of six months
+ and may be updated, replaced, or obsoleted by other documents at any
+ time. It is inappropriate to use Internet-Drafts as reference
+ material or to cite them other than as "work in progress."<a
href="#section-boilerplate.1-3" class="pilcrow">¶</a></p>
+<p id="section-boilerplate.1-4">
+ This Internet-Draft will expire on 24 January 2020.<a
href="#section-boilerplate.1-4" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="copyright">
+<section id="section-boilerplate.2">
+ <h2 id="name-copyright-notice">
+<a href="#name-copyright-notice" class="section-name selfRef">Copyright
Notice</a>
+ </h2>
+<p id="section-boilerplate.2-1">
+ Copyright (c) 2019 IETF Trust and the persons identified as the
+ document authors. All rights reserved.<a
href="#section-boilerplate.2-1" class="pilcrow">¶</a></p>
+<p id="section-boilerplate.2-2">
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (<span><a
href="https://trustee.ietf.org/license-info">https://trustee.ietf.org/license-info</a></span>)
in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with
+ respect to this document. Code Components extracted from this
+ document must include Simplified BSD License text as described in
+ Section 4.e of the Trust Legal Provisions and are provided without
+ warranty as described in the Simplified BSD License.<a
href="#section-boilerplate.2-2" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="toc">
+<section id="section-boilerplate.3">
+ <a href="#" onclick="scroll(0,0)" class="toplink">▲</a><h2
id="name-table-of-contents">
+<a href="#name-table-of-contents" class="section-name selfRef">Table of
Contents</a>
+ </h2>
+<nav class="toc"><ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-boilerplate.3-1.1">
+ <p id="section-boilerplate.3-1.1.1"><a href="#section-1"
class="xref">1</a>. <a href="#name-introduction"
class="xref">Introduction</a><a href="#section-boilerplate.3-1.1.1"
class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.2">
+ <p id="section-boilerplate.3-1.2.1"><a href="#section-2"
class="xref">2</a>. <a href="#name-zones" class="xref">Zones</a><a
href="#section-boilerplate.3-1.2.1" class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.3">
+ <p id="section-boilerplate.3-1.3.1"><a href="#section-3"
class="xref">3</a>. <a href="#name-resource-records" class="xref">Resource
records</a><a href="#section-boilerplate.3-1.3.1" class="pilcrow">¶</a></p>
+<ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-boilerplate.3-1.3.2.1">
+ <p id="section-boilerplate.3-1.3.2.1.1"><a href="#section-3.1"
class="xref">3.1</a>. <a href="#name-flags" class="xref">Flags</a><a
href="#section-boilerplate.3-1.3.2.1.1" class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.3.2.2">
+ <p id="section-boilerplate.3-1.3.2.2.1"><a href="#section-3.2"
class="xref">3.2</a>. <a href="#name-gns-resource-record-types"
class="xref">GNS resource record types</a><a
href="#section-boilerplate.3-1.3.2.2.1" class="pilcrow">¶</a></p>
+</li>
+ </ul>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.4">
+ <p id="section-boilerplate.3-1.4.1"><a href="#section-4"
class="xref">4</a>. <a href="#name-publishing-records" class="xref">Publishing
records</a><a href="#section-boilerplate.3-1.4.1" class="pilcrow">¶</a></p>
+<ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-boilerplate.3-1.4.2.1">
+ <p id="section-boilerplate.3-1.4.2.1.1"><a href="#section-4.1"
class="xref">4.1</a>. <a href="#name-resource-records-block"
class="xref">Resource records block</a><a
href="#section-boilerplate.3-1.4.2.1.1" class="pilcrow">¶</a></p>
+<ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-boilerplate.3-1.4.2.1.2.1">
+ <p id="section-boilerplate.3-1.4.2.1.2.1.1"><a
href="#section-4.1.1" class="xref">4.1.1</a>. <a
href="#name-block-data-encryption" class="xref">Block data encryption</a><a
href="#section-boilerplate.3-1.4.2.1.2.1.1" class="pilcrow">¶</a></p>
+</li>
+ </ul>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.4.2.2">
+ <p id="section-boilerplate.3-1.4.2.2.1"><a href="#section-4.2"
class="xref">4.2</a>. <a href="#name-internationalization-and-ch"
class="xref">Internationalization and Character Encoding</a><a
href="#section-boilerplate.3-1.4.2.2.1" class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.4.2.3">
+ <p id="section-boilerplate.3-1.4.2.3.1"><a href="#section-4.3"
class="xref">4.3</a>. <a href="#name-security-considerations"
class="xref">Security Considerations</a><a
href="#section-boilerplate.3-1.4.2.3.1" class="pilcrow">¶</a></p>
+</li>
+ </ul>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.5">
+ <p id="section-boilerplate.3-1.5.1"><a href="#section-5"
class="xref">5</a>. <a href="#name-record-resolution" class="xref">Record
Resolution</a><a href="#section-boilerplate.3-1.5.1" class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.6">
+ <p id="section-boilerplate.3-1.6.1"><a href="#section-6"
class="xref">6</a>. <a href="#name-namespace-revocation"
class="xref">Namespace Revocation</a><a href="#section-boilerplate.3-1.6.1"
class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.7">
+ <p id="section-boilerplate.3-1.7.1"><a href="#section-7"
class="xref">7</a>. <a href="#name-iana-considerations" class="xref">IANA
Considerations</a><a href="#section-boilerplate.3-1.7.1"
class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.8">
+ <p id="section-boilerplate.3-1.8.1"><a href="#section-8"
class="xref">8</a>. <a href="#name-normative-references"
class="xref">Normative References</a><a href="#section-boilerplate.3-1.8.1"
class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.9">
+ <p id="section-boilerplate.3-1.9.1"><a href="#section-appendix.a"
class="xref"></a> <a href="#name-authors-address" class="xref">Author's
Address</a><a href="#section-boilerplate.3-1.9.1" class="pilcrow">¶</a></p>
+</li>
+ </ul>
+</nav>
+</section>
+</div>
+<div id="introduction">
+<section id="section-1">
+ <h2 id="name-introduction">
+<a href="#section-1" class="section-number selfRef">1. </a><a
href="#name-introduction" class="section-name selfRef">Introduction</a>
+ </h2>
+<p id="section-1-1">
+ This document contains the GNU Name System (GNS) technical
specification
+ for secure, censorship-resistant and decentralised name resolution.<a
href="#section-1-1" class="pilcrow">¶</a></p>
+<p id="section-1-2">
+ This document defines the normative wire format of resource records,
resolution processes,
+ cryptographic routines and security considerations for use by
implementors.<a href="#section-1-2" class="pilcrow">¶</a></p>
+<p id="section-1-3"><a href="#section-1-3" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="zones">
+<section id="section-2">
+ <h2 id="name-zones">
+<a href="#section-2" class="section-number selfRef">2. </a><a
href="#name-zones" class="section-name selfRef">Zones</a>
+ </h2>
+<p id="section-2-1">
+ A zone in GNS is defined by a public/private ECC key pair (x,y), where
x
+ is the private key and y the public key.
+ The keys are constructed using the Curve25519 ECC scheme as defined in
+ <span>[<a href="#RFC7748" class="xref">RFC7748</a>]</span>.
+ The schemes defines that "y := x*P" where "P" is the generator of the
+ respective elliptic curve.
+ The public key "y" is used to uniquely identify and refer to the zone.
+ Records published in the zone are signed using a private key derived
+ from the private key "d" as described in <a href="#publish"
class="xref">Section 4</a>.<a href="#section-2-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="rrecords">
+<section id="section-3">
+ <h2 id="name-resource-records">
+<a href="#section-3" class="section-number selfRef">3. </a><a
href="#name-resource-records" class="section-name selfRef">Resource records</a>
+ </h2>
+<p id="section-3-1">
+ A GNS resource record holds the data of a specific record in a zone.
+ The resource record wire format is defined as follows:<a
href="#section-3-1" class="pilcrow">¶</a></p>
+<div id="figure_gnsrecord">
+<figure id="figure-1">
+ <div class="artwork art-text alignLeft" id="section-3-2.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | EXPIRATION |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | DATA SIZE | TYPE |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | FLAGS | DATA |
+ +-----+-----+-----+-----+ |
+ / /
+ / /
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-1" class="selfRef">Figure
1</a></figcaption></figure>
+</div>
+<p id="section-3-3">where:<a href="#section-3-3" class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-3-4">
+ <dt id="section-3-4.1">EXPIRATION</dt>
+ <dd id="section-3-4.2">
+ Denotes the absolute expiration date of the record.
+ In microseconds since midnight (0 hour), January 1, 1970 in network
+ byte order.<a href="#section-3-4.2" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-3-4.3">DATA SIZE</dt>
+ <dd id="section-3-4.4">
+ The resource record data length in bytes and network byte order.<a
href="#section-3-4.4" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-3-4.5">TYPE</dt>
+ <dd id="section-3-4.6">
+ The resource record type. This type can be one of the GNS resource
+ records as defined in <a href="#gnsrecords" class="xref">Section
3.2</a> or a DNS record
+ type as defined in <span>[<a href="#RFC1035"
class="xref">RFC1035</a>]</span> or any of the
+ complementary standardized DNS resource record types.<a
href="#section-3-4.6" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-3-4.7">FLAGS</dt>
+ <dd id="section-3-4.8">
+ Resource record flags. Flags are defined in <a href="#flags"
class="xref">Section 3.1</a>.<a href="#section-3-4.8" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-3-4.9">DATA</dt>
+ <dd id="section-3-4.10">
+ The resource record data payload. The contents are defined by the
+ respective type of the resource record.<a href="#section-3-4.10"
class="pilcrow">¶</a>
+</dd>
+ </dl>
+<div id="flags">
+<section id="section-3.1">
+ <h3 id="name-flags">
+<a href="#section-3.1" class="section-number selfRef">3.1. </a><a
href="#name-flags" class="section-name selfRef">Flags</a>
+ </h3>
+<p id="section-3.1-1">TODO flags<a href="#section-3.1-1"
class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="gnsrecords">
+<section id="section-3.2">
+ <h3 id="name-gns-resource-record-types">
+<a href="#section-3.2" class="section-number selfRef">3.2. </a><a
href="#name-gns-resource-record-types" class="section-name selfRef">GNS
resource record types</a>
+ </h3>
+<p id="section-3.2-1">The a PKEY DATA entry has the following format:<a
href="#section-3.2-1" class="pilcrow">¶</a></p>
+<div id="figure_pkeyrecord">
+<figure id="figure-2">
+ <div class="artwork art-text alignLeft" id="section-3.2-2.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | PUBLIC KEY |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-2" class="selfRef">Figure
2</a></figcaption></figure>
+</div>
+</section>
+</div>
+</section>
+</div>
+<div id="publish">
+<section id="section-4">
+ <h2 id="name-publishing-records">
+<a href="#section-4" class="section-number selfRef">4. </a><a
href="#name-publishing-records" class="section-name selfRef">Publishing
records</a>
+ </h2>
+<p id="section-4-1">
+ GNS resource records are published in a distributed hash table (DHT).
+ Resource records are grouped by their respective labels and published
+ together in a single block in the DHT.
+ A resource records block is published under a key which is derived from
+ the respective label of the contained records.
+ Given a label "l", the DHT key "q" is derived as follows:<a
href="#section-4-1" class="pilcrow">¶</a></p>
+<div class="artwork art-text alignLeft" id="section-4-2">
+<pre>
+ h := sha512 (l,y)
+ d := h*x mod p
+ q := sha512 (d*P)
+ </pre><a href="#section-4-2" class="pilcrow">¶</a>
+</div>
+<p id="section-4-3">
+ where:<a href="#section-4-3" class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-4-4">
+ <dt id="section-4-4.1">h</dt>
+ <dd id="section-4-4.2">
+ is a SHA512 hash over the label "l" and public key "y".<a
href="#section-4-4.2" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4-4.3">d</dt>
+ <dd id="section-4-4.4">
+ is a private key derived from the zone key x using the hash "h".<a
href="#section-4-4.4" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4-4.5">q</dt>
+ <dd id="section-4-4.6">
+ Is the DHT key under which the resource records block is published.
+ It is the SHA512 hash over the public key "d*P" corresponding to the
+ derived private key "d".<a href="#section-4-4.6"
class="pilcrow">¶</a>
+</dd>
+ </dl>
+<div id="wire">
+<section id="section-4.1">
+ <h3 id="name-resource-records-block">
+<a href="#section-4.1" class="section-number selfRef">4.1. </a><a
href="#name-resource-records-block" class="section-name selfRef">Resource
records block</a>
+ </h3>
+<p id="section-4.1-1">
+ GNS records are grouped by their labels are published as a single
+ block in the DHT.
+ The contained resource records are encrypted using a symmetric
+ encryption scheme.
+ A GNS resource records block has the following format:<a
href="#section-4.1-1" class="pilcrow">¶</a></p>
+<div id="figure_record_block">
+<figure id="figure-3">
+ <div class="artwork art-text alignLeft" id="section-4.1-2.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | SIGNATURE |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | PUBLIC KEY |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | BDATA SIZE | PURPOSE |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | EXPIRATION |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ / BDATA /
+ / /
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-3" class="selfRef">Figure
3</a></figcaption></figure>
+</div>
+<p id="section-4.1-3">where:<a href="#section-4.1-3" class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-4.1-4">
+ <dt id="section-4.1-4.1">SIGNATURE</dt>
+ <dd id="section-4.1-4.2">
+ A 512-bit ECDSA signature. This field contains a 512-bit ECDSA
+ signature over the data following the PUBLIC KEY field.
+ The signature is create using the derived private key "d".<a
href="#section-4.1-4.2" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1-4.3">PUBLIC KEY</dt>
+ <dd id="section-4.1-4.4">
+ The 256-bit ECC public key "d*P" to be used to verify SIGNATURE.<a
href="#section-4.1-4.4" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1-4.5">BDATA SIZE</dt>
+ <dd id="section-4.1-4.6">
+ A 32-bit value containing the length of the following data
(PURPOSE,
+ EXPIRATION, BDATA) in network byte order.<a
href="#section-4.1-4.6" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1-4.7">PURPOSE</dt>
+ <dd id="section-4.1-4.8">
+ A 32-bit signature purpose flag. This field MUST be 15 (in network
+ byte order).<a href="#section-4.1-4.8" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1-4.9">EXPIRATION</dt>
+ <dd id="section-4.1-4.10">
+ The resource records block expiration time. This is the expiration
+ time of the resource record contained within this block with the
+ smallest expiration time.
+ This is a 64-bit absolute date in microseconds since midnight
+ (0 hour), January 1, 1970 in network byte order.<a
href="#section-4.1-4.10" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1-4.11">BDATA</dt>
+ <dd id="section-4.1-4.12">
+ The encrypted resource records with a total size of "BDATA
SIZE".<a href="#section-4.1-4.12" class="pilcrow">¶</a>
+</dd>
+ </dl>
+<section id="section-4.1.1">
+ <h4 id="name-block-data-encryption">
+<a href="#section-4.1.1" class="section-number selfRef">4.1.1. </a><a
href="#name-block-data-encryption" class="section-name selfRef">Block data
encryption</a>
+ </h4>
+<p id="section-4.1.1-1">
+ Given a GNS record block a symmetric encryption scheme is used to
+ en-/decrypt "BDATA". The keys are derived from the record label "l"
+ and a public key "d*P", where "d" is an ECDSA private key and "P"
+ is the EC generator. "d" and "dG" are derived from the
+ public/private key pair "x,y" of a GNS zone.
+ Both "l" and "P" are implicity known by the GNS resolver.
+ The key material "K" and initialization vector "IV"
+ are derived as follows:<a href="#section-4.1.1-1"
class="pilcrow">¶</a></p>
+<div class="artwork art-text alignLeft" id="section-4.1.1-2">
+<pre>
+ h := HKDF ("key-derivation", l|y|"gns")
+ d := h*x mod p
+ K := HKDF (d*P, l|"gns-aes-ctx-key")
+ IV := HKDF (d*P, l|"gns-aes-ctx-iv")
+ </pre><a href="#section-4.1.1-2" class="pilcrow">¶</a>
+</div>
+<p id="section-4.1.1-3">
+ "HKDF" is a hash-based key derivation function as defined in
+ <span>[<a href="#RFC5869" class="xref">RFC5869</a>]</span>. We use
HMAC-SHA512 for the extraction
+ phase and HMAC-SHA256 for the expansion phase as proposed in
+ (paper). The first argument for HKDF is the salt and the second
+ argument is the concatenated, serialized source key material.
+ We divide the resulting 512-bit "K" into a 256-bit AES key "Kaes"
+ and a 256-bit TWOFISH key "Ktwo":<a href="#section-4.1.1-3"
class="pilcrow">¶</a></p>
+<div id="figure_hkdf_keys">
+<figure id="figure-4">
+ <div class="artwork art-text alignLeft" id="section-4.1.1-4.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | AES KEY (Kaes) |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | TWOFISH KEY (Ktwo) |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-4" class="selfRef">Figure
4</a></figcaption></figure>
+</div>
+<p id="section-4.1.1-5">
+ Similarly, we divide "IV" into a 128-bit initialization vector
IVaes
+ and a 128-bit initialization vector IVtwo:<a
href="#section-4.1.1-5" class="pilcrow">¶</a></p>
+<div id="figure_hkdf_ivs">
+<figure id="figure-5">
+ <div class="artwork art-text alignLeft" id="section-4.1.1-6.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | AES IV (IVaes) |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | TWOFISH IV (IVtwo) |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-5" class="selfRef">Figure
5</a></figcaption></figure>
+</div>
+<p id="section-4.1.1-7">
+ The symmetric keys and IVs are used for a AES+TWOFISH combined
+ cipher. Both ciphers are used in CFB (ref) mode.<a
href="#section-4.1.1-7" class="pilcrow">¶</a></p>
+<div class="artwork art-text alignLeft" id="section-4.1.1-8">
+<pre>
+ RDATA := AES(Kaes, IVaes, TWOFISH(Ktwo, IVtwo, BDATA))
+ BDATA := TWOFISH(Ktwo, IVtwo, AES(Kaes, IVaes, RDATA))
+ </pre><a href="#section-4.1.1-8" class="pilcrow">¶</a>
+</div>
+<p id="section-4.1.1-9">
+ The decrypted RDATA has the following format:<a
href="#section-4.1.1-9" class="pilcrow">¶</a></p>
+<div id="figure_rdata">
+<figure id="figure-6">
+ <div class="artwork art-text alignLeft" id="section-4.1.1-10.1">
+<pre>
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | RR COUNT | RRs |
+ +-----+-----+-----+-----+ /
+ / /
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ </pre>
+</div>
+<figcaption><a href="#figure-6" class="selfRef">Figure
6</a></figcaption></figure>
+</div>
+<p id="section-4.1.1-11">where:<a href="#section-4.1.1-11"
class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-4.1.1-12">
+ <dt id="section-4.1.1-12.1">RR COUNT</dt>
+ <dd id="section-4.1.1-12.2">
+ A 32-bit value containing the number of resource records which are
+ following.<a href="#section-4.1.1-12.2" class="pilcrow">¶</a>
+</dd>
+ <dt id="section-4.1.1-12.3">RR</dt>
+ <dd id="section-4.1.1-12.4">
+ A set of resoure records as defined in <a href="#rrecords"
class="xref">Section 3</a>.<a href="#section-4.1.1-12.4" class="pilcrow">¶</a>
+</dd>
+ </dl>
+</section>
+</section>
+</div>
+<div id="encoding">
+<section id="section-4.2">
+ <h3 id="name-internationalization-and-ch">
+<a href="#section-4.2" class="section-number selfRef">4.2. </a><a
href="#name-internationalization-and-ch" class="section-name
selfRef">Internationalization and Character Encoding</a>
+ </h3>
+<p id="section-4.2-1">
+ TODO<a href="#section-4.2-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="security">
+<section id="section-4.3">
+ <h3 id="name-security-considerations">
+<a href="#section-4.3" class="section-number selfRef">4.3. </a><a
href="#name-security-considerations" class="section-name selfRef">Security
Considerations</a>
+ </h3>
+<p id="section-4.3-1">
+ TODO<a href="#section-4.3-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+</section>
+</div>
+<div id="resolution">
+<section id="section-5">
+ <h2 id="name-record-resolution">
+<a href="#section-5" class="section-number selfRef">5. </a><a
href="#name-record-resolution" class="section-name selfRef">Record
Resolution</a>
+ </h2>
+<p id="section-5-1">
+ TODO<a href="#section-5-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="revocation">
+<section id="section-6">
+ <h2 id="name-namespace-revocation">
+<a href="#section-6" class="section-number selfRef">6. </a><a
href="#name-namespace-revocation" class="section-name selfRef">Namespace
Revocation</a>
+ </h2>
+<p id="section-6-1">
+ TODO<a href="#section-6-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="iana">
+<section id="section-7">
+ <h2 id="name-iana-considerations">
+<a href="#section-7" class="section-number selfRef">7. </a><a
href="#name-iana-considerations" class="section-name selfRef">IANA
Considerations</a>
+ </h2>
+<p id="section-7-1">
+ This will be fun<a href="#section-7-1" class="pilcrow">¶</a></p>
+</section>
+</div>
+<section id="section-8">
+ <h2 id="name-normative-references">
+<a href="#section-8" class="section-number selfRef">8. </a><a
href="#name-normative-references" class="section-name selfRef">Normative
References</a>
+ </h2>
+<dl class="references">
+<dt id="RFC1035">[RFC1035]</dt>
+ <dd>
+<span class="refAuthor">Mockapetris, P.</span>, <span class="refTitle">"Domain
names - implementation and specification"</span>, <span class="seriesInfo">STD
13</span>, <span class="seriesInfo">RFC 1035</span>, <span
class="seriesInfo">DOI 10.17487/RFC1035</span>, <time
datetime="1987-11">November 1987</time>, <span><<a
href="https://www.rfc-editor.org/info/rfc1035">https://www.rfc-editor.org/info/rfc1035</a>></span>.
</dd>
+<dt id="RFC5869">[RFC5869]</dt>
+ <dd>
+<span class="refAuthor">Krawczyk, H.</span><span class="refAuthor"> and P.
Eronen</span>, <span class="refTitle">"
+ HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
+ "</span>, <span class="seriesInfo">RFC 5869</span>, <span
class="seriesInfo">DOI 10.17487/RFC5869</span>, <time datetime="2010-05">May
2010</time>, <span><<a
href="https://www.rfc-editor.org/info/rfc5869">https://www.rfc-editor.org/info/rfc5869</a>></span>.
</dd>
+<dt id="RFC7748">[RFC7748]</dt>
+ <dd>
+<span class="refAuthor">Langley, A.</span><span class="refAuthor">, Hamburg,
M.</span><span class="refAuthor">, and S. Turner</span>, <span
class="refTitle">"Elliptic Curves for Security"</span>, <span
class="seriesInfo">RFC 7748</span>, <span class="seriesInfo">DOI
10.17487/RFC7748</span>, <time datetime="2016-01">January 2016</time>,
<span><<a
href="https://www.rfc-editor.org/info/rfc7748">https://www.rfc-editor.org/info/rfc7748</a>></span>.
</dd>
+</dl>
+</section>
+<div id="authors-addresses">
+<section id="section-appendix.a">
+ <h2 id="name-authors-address">
+<a href="#name-authors-address" class="section-name selfRef">Author's
Address</a>
+ </h2>
+<address class="vcard">
+ <div dir="auto" class="left"><span class="fn nameRole">Martin
Schanzenbach</span></div>
+<div dir="auto" class="left"><span class="org">GNUnet e.V.</span></div>
+<div dir="auto" class="left"><span class="street-address">Boltzmannstrasse
3</span></div>
+<div dir="auto" class="left">
+<span class="postal-code">85748</span> <span class="locality">Garching</span>
+</div>
+<div dir="auto" class="left"><span class="country-name">Germany</span></div>
+<div class="email">
+<span>Email:</span>
+<a href="mailto:address@hidden" class="email">address@hidden</a>
+</div>
+</address>
+</section>
+</div>
+<script>var toc = document.getElementById("toc");
+var tocToggle = toc.querySelector("h2");
+var tocNav = toc.querySelector("nav");
+
+// mobile menu toggle
+tocToggle.onclick = function(event) {
+ if (window.innerWidth < 1024) {
+ var tocNavDisplay = tocNav.currentStyle ? tocNav.currentStyle.display :
getComputedStyle(tocNav, null).display;
+ if (tocNavDisplay == "none") {
+ tocNav.style.display = "block";
+ } else {
+ tocNav.style.display = "none";
+ }
+ }
+}
+
+// toc anchor scroll to anchor
+tocNav.addEventListener("click", function (event) {
+ event.preventDefault();
+ if (event.target.nodeName == 'A') {
+ if (window.innerWidth < 1024) {
+ tocNav.style.display = "none";
+ }
+ var href = event.target.getAttribute("href");
+ var anchorId = href.substr(1);
+ var anchor = document.getElementById(anchorId);
+ anchor.scrollIntoView(true);
+ window.history.pushState("","",href);
+ }
+});
+
+// switch toc mode when window resized
+window.onresize = function () {
+ if (window.innerWidth < 1024) {
+ tocNav.style.display = "none";
+ } else {
+ tocNav.style.display = "block";
+ }
+}
+</script>
+</body>
+</html>
diff --git a/draft-schanzen-gns.txt b/draft-schanzen-gns.txt
index baa1f7d..dd3d682 100644
--- a/draft-schanzen-gns.txt
+++ b/draft-schanzen-gns.txt
@@ -92,9 +92,10 @@ Table of Contents
A zone in GNS is defined by a public/private ECC key pair (x,y),
where x is the private key and y the public key. The keys are
constructed using the Curve25519 ECC scheme as defined in [RFC7748].
- The schemes defines that "y := x*P". The public key is used to
- uniquely identify and refer to the zone. Records published in the
- zone are signed using a private key derived from the private key as
+ The schemes defines that "y := x*P" where "P" is the generator of the
+ respective elliptic curve. The public key "y" is used to uniquely
+ identify and refer to the zone. Records published in the zone are
+ signed using a private key derived from the private key "d" as
described in Section 4.
3. Resource records
@@ -108,7 +109,6 @@ Table of Contents
-
Schanzenbach Expires 24 January 2020 [Page 2]
Internet-Draft The GNU Name System July 2019
@@ -140,7 +140,8 @@ Internet-Draft The GNU Name System
July 2019
TYPE The resource record type. This type can be one of the GNS
resource records as defined in Section 3.2 or a DNS record type as
- defined in [RFC1035].
+ defined in [RFC1035] or any of the complementary standardized DNS
+ resource record types.
FLAGS Resource record flags. Flags are defined in Section 3.1.
@@ -155,13 +156,12 @@ Internet-Draft The GNU Name System
July 2019
The a PKEY DATA entry has the following format:
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | PUBLIC KEY |
- | |
- | |
- | |
- +-----+-----+-----+-----+-----+-----+-----+-----+
+
+
+
+
+
+
@@ -170,6 +170,14 @@ Schanzenbach Expires 24 January 2020
[Page 3]
Internet-Draft The GNU Name System July 2019
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | PUBLIC KEY |
+ | |
+ | |
+ | |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+
Figure 2
4. Publishing records
@@ -213,14 +221,6 @@ Internet-Draft The GNU Name System
July 2019
-
-
-
-
-
-
-
-
Schanzenbach Expires 24 January 2020 [Page 4]
Internet-Draft The GNU Name System July 2019
@@ -289,21 +289,24 @@ Internet-Draft The GNU Name System
July 2019
Given a GNS record block a symmetric encryption scheme is used to
en-/decrypt "BDATA". The keys are derived from the record label "l"
- and a public key "dG", where "d" is an ECDSA private key and "G" is a
- EC generator. "d" and "dG" are derived from the public/private key
- pair "x,P" of a GNS zone. Both "l" and "P" are implicity known by
- the GNS resolver. The key material "K" and initialization vector
+ and a public key "d*P", where "d" is an ECDSA private key and "P" is
+ the EC generator. "d" and "dG" are derived from the public/private
+ key pair "x,y" of a GNS zone. Both "l" and "P" are implicity known
+ by the GNS resolver. The key material "K" and initialization vector
"IV" are derived as follows:
- h := sha512 (l,y)
- d := h*x mod n
- K := HKDF (dG,l,"gns-aes-ctx-key")
- IV := HKDF (dG,l,"gns-aes-ctx-iv")
+ h := HKDF ("key-derivation", l|y|"gns")
+ d := h*x mod p
+ K := HKDF (d*P, l|"gns-aes-ctx-key")
+ IV := HKDF (d*P, l|"gns-aes-ctx-iv")
"HKDF" is a hash-based key derivation function as defined in
- [RFC5869]. For the XTR, we use HMAC-SHA512 and HMAC-SHA256 in PRF as
- proposed in (paper). We divide "K" into a 256-bit AES key "Kaes" and
- a 256-bit TWOFISH key "Ktwo".
+ [RFC5869]. We use HMAC-SHA512 for the extraction phase and HMAC-
+ SHA256 for the expansion phase as proposed in (paper). The first
+ argument for HKDF is the salt and the second argument is the
+ concatenated, serialized source key material. We divide the
+ resulting 512-bit "K" into a 256-bit AES key "Kaes" and a 256-bit
+ TWOFISH key "Ktwo":
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
@@ -330,9 +333,6 @@ Internet-Draft The GNU Name System
July 2019
-
-
-
Schanzenbach Expires 24 January 2020 [Page 6]
Internet-Draft The GNU Name System July 2019
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
index 5cf45af..1d935fb 100644
--- a/draft-schanzen-gns.xml
+++ b/draft-schanzen-gns.xml
@@ -60,10 +60,11 @@
is the private key and y the public key.
The keys are constructed using the Curve25519 ECC scheme as defined in
<xref target="RFC7748" />.
- The schemes defines that "y := x*P".
- The public key is used to uniquely identify and refer to the zone.
+ The schemes defines that "y := x*P" where "P" is the generator of the
+ respective elliptic curve.
+ The public key "y" is used to uniquely identify and refer to the zone.
Records published in the zone are signed using a private key derived
- from the private key as described in <xref target="publish" />.
+ from the private key "d" as described in <xref target="publish" />.
</t>
</section>
<section anchor="rrecords" numbered="true" toc="default">
@@ -105,7 +106,8 @@
<dd>
The resource record type. This type can be one of the GNS resource
records as defined in <xref target="gnsrecords" /> or a DNS record
- type as defined in <xref target="RFC1035" />.
+ type as defined in <xref target="RFC1035" /> or any of the
+ complementary standardized DNS resource record types.
</dd>
<dt>FLAGS</dt>
<dd>
@@ -251,24 +253,27 @@
<t>
Given a GNS record block a symmetric encryption scheme is used to
en-/decrypt "BDATA". The keys are derived from the record label "l"
- and a public key "dG", where "d" is an ECDSA private key and "G"
- is a EC generator. "d" and "dG" are derived from the public/private
- key pair "x,P" of a GNS zone.
+ and a public key "d*P", where "d" is an ECDSA private key and "P"
+ is the EC generator. "d" and "dG" are derived from the
+ public/private key pair "x,y" of a GNS zone.
Both "l" and "P" are implicity known by the GNS resolver.
The key material "K" and initialization vector "IV"
are derived as follows:
</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
- h := sha512 (l,y)
- d := h*x mod n
- K := HKDF (dG,l,"gns-aes-ctx-key")
- IV := HKDF (dG,l,"gns-aes-ctx-iv")
+ h := HKDF ("key-derivation", l|y|"gns")
+ d := h*x mod p
+ K := HKDF (d*P, l|"gns-aes-ctx-key")
+ IV := HKDF (d*P, l|"gns-aes-ctx-iv")
]]></artwork>
<t>
"HKDF" is a hash-based key derivation function as defined in
- <xref target="RFC5869" />. For the XTR, we use HMAC-SHA512 and
- HMAC-SHA256 in PRF as proposed in (paper). We divide "K" into a
- 256-bit AES key "Kaes" and a 256-bit TWOFISH key "Ktwo".
+ <xref target="RFC5869" />. We use HMAC-SHA512 for the extraction
+ phase and HMAC-SHA256 for the expansion phase as proposed in
+ (paper). The first argument for HKDF is the salt and the second
+ argument is the concatenated, serialized source key material.
+ We divide the resulting 512-bit "K" into a 256-bit AES key "Kaes"
+ and a 256-bit TWOFISH key "Ktwo":
</t>
<figure anchor="figure_hkdf_keys">
<artwork name="" type="" align="left" alt=""><![CDATA[
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [lsd0001] branch master updated: more hashing,
gnunet <=