2016-07-01 2 views
3

Urbits werden durch numerische Adressen identifiziert, sie werden jedoch selten in numerischer Form bezeichnet. Sie sind normalerweise in einer vom Menschen aussprechbaren Form, wobei jedes Byte in eine aus drei Buchstaben bestehende Silbe umgewandelt wird. So nehmen Sie ein Beispiel aus der Dokumentation:Wie werden phonetische Urbit-Namen codiert?

8 bits galaxy ~syd 
16 bits star ~delsym 
32 bits planet ~mighex-forfem 
64 bits moon ~dabnev-nisseb-nomlec-sormug 
128 bits comet ~satnet-rinsyr-silsec-navhut--bacnec-todmeb-harwen-fabtev 

ich zunächst davon ausgegangen, dass jedes Byte eine einzige einfache Textdarstellung in allen Fällen hatte, bevor zu sehen, wie Planeten Namen nicht die ihre Sterne umfassten. Natürlich gibt es hier eine andere Kodierungsstufe, aber ich bezweifle, dass sie zu kompliziert ist (wahrscheinlich nicht kryptografisch), da sie leicht entschlüsselt werden kann.

Wie funktioniert das Uribt-Namenscodierungssystem?

Antwort

8

Um einen Namen in Hoon zu kodieren:

:dojo> `@ux`~dabnev-nisseb-nomlec-sormug 
0xade8.2037.f18f.abc3 

zu entschlüsseln:

:dojo> `@po`0xade8.2037.f18f.abc3 
~dabnev-nisseb-nomlec-sormug 

Wir können das aktuelle Verhalten um hoon.hoonsection 2cE: phonetic base und teilweise beschrieben in this Reddit comment from /u/ray_juped, a core developer (Formatierung von mir) implementiert finden:

Urbit phonetische Namen sind Basis-65536-Nummern. Wir haben zwei Sätze mit jeweils 256 Silben, einen "linken" Satz und einen "rechten" Satz, die als Ziffern mit den Werten 0-255 dienen. Alle Silben sind Konsonant-Vokal-Konsonant Kombinationen. Die Vokale sind a beschränkt, i, o für „links“ Silben und e, u, y für die „richtigen“ Silben (mit Ausnahme von zod, Null, was eine unregelmäßig o als Vokal).

Von 0-255 oder ~zod-~fes wird ein einsames rechte Silbe verwendet, aber ansonsten nur ein Wort von einer links und einer rechts Silbe gemacht gültig ist. Wörter sind getrennt durch einen einzelnen Bindestrich (-), und gruppiert in Gruppen von vier Wörter, die selbst durch einen doppelten Bindestrich getrennt sind (--). Ein Beispiel einer gültigen Nummer, um Ihnen eine Idee zu geben, ist ~novful-dilsut--widdeg-mitdyr-dorsud-miplex. Führende Nullen sind ein Fehler - das bedeutet keine führende dozzod s, oder, wenn Ihre Nummer nur ein Wort lang ist, keine führende 'doz'. (Ja, das ist ~doznec ein Syntaxfehler in das richtige System.)

So ist es nur eine normale Zahlensystem, aber es gibt einen Haken: die Scrambler. Bevor ich darauf eingehe, werde ich die Ticketing-Hierarchie so erklären, als ob sie nicht existierte.

Identities 0x0 durch 0xff, ~zod zu ~fes sind Galaxien. Sie sind die obersten in der Hierarchie, und ihre öffentlichen Schlüssel sind von uns in den Kernel fest codiert. 0x100 bis 0xffff, ~marzod bis ~fipfes sind Sterne. Sterne werden ausgegeben durch eine Elterngalaxie, die ihren Schlüssel unterzeichnet.Diese Elterngalaxie ist , angezeigt durch das niedrigstwertige Byte. Zum Beispiel ~zod (0x0) kann Ausgabe ~marzod (0x100) bis ~fipzod (0xff00). Ein gewöhnlicher Urbit Netzwerkbenutzer hat einen Planeten, 0x1.0000 bis 0xffff.ffff. In einer ähnlichen Weise ist ihr ausgebender Stern durch die niedrigstwertigen zwei Bytes gegeben. So ~marzod (0x100) kann Ausgabe ~doznec-marzod (0x1.0100) durch ~fipfes-marzod (0xffff.0100). Der abgebende "Stern" kann tatsächlich auch eine Galaxie sein - zum Beispiel ~zod (0x0) direkt Ausgaben ~doznec-dozzod (0x1.0000), ohne Zwischenstern. Die Hierarchie erstreckt sich auch auf Monde, 0x1.0000.0000 bis 0xffff.ffff.ffff.ffff. Dies sind Ihre Geräte und andere Bürger der zweiten Klasse. Moons haben keine eigene Reputation, weil sie nur Teil ihrer Eltern sind - es ist wie IPv6 mit einer /64 die Grundzuteilung Einheit. Ihr Elternteil wird durch die niedrigstwertigen vier Bytes angezeigt.

Das Problem hier ist, dass ein Planet von einem Ticketing-Star, ausgestellt werden könnte, aber ein voller, freier Bürger von Urbit ist. Also wollen wir nicht wirklich, dass den Namen des Emittenten in seinem eigenen Namen trägt. Sein Herausgeber ist kein Geheimnis, es muss nur nicht dort im sichtbaren Namen sein, also Sie können nicht unbewusste Vereinigungen herstellen, die auf Abstammung basieren.

Um dies zu erreichen, ist der Planetenraum pseudozufällig verschlüsselt. (Es gibt eine gute Arbeit von John Black und Philip Rogaway über die Generierung von Pseudozufalls-Permutationen auf Domains, die keine einfachen Zweierpotenzen sind. Es hat eine großartige Pseudo-Feistel-Konstruktion, die extrem gut funktioniert auf unserer Domain-Größe von 232-216 .)

Der Mondraum hat auch seine Namen angepasst, um diese Pseudozufallsverwürfelung zu entsprechen. So ist zum Beispiel 0x1.0100 nicht ~doznec-marzod, aber ~dardev-ristuc (Verschlüsselung kann nicht endgültig sein), die keine Verbindung zu ~marzod verrät. Sein Wert als Nummer ist immer noch 0x1.0100, die Verschlüsselung ist nur ein Teil der phonetischen Basis.

Oberhalb von 0xffff.ffff.ffff.ffff ist die Hierarchie zu Ende und die phonetische Basis wird wieder zu einer einfachen Basis.

Verwandte Themen