[Freedombox-discuss] DNS solution that doesn't require paying money or using a central server.

Fellow Traveler fellowtraveler at rayservers.net
Mon Jul 4 09:33:59 UTC 2011


As you know, I've written a digital cash and financial crypto library
called Open-Transactions.

Once my library is built into a Firefox/Chrome plugin, then it will be
possible to use it as a replacement for the DNS system.  (WITHOUT having
to have some central DNS registry.)

I'll explain everything...

-----------------------------------



First, WHAT PROBLEMS WOULD THIS SOLVE?

1) People could use whatever "DNS name" they want for their website. It
will never be "already taken".

2) No need for any DNS servers. They're replaced by a DHT, some p2p
searches, and optional search engines that cannot falsify results.

3) Name conflicts are rare, and easily handled. They are "part of the
system" and no big deal.

4) Supports ALL PROTOCOLS. (Whichever addresses you put in your
contracts... tor, i2p, ip, dns, freenet, etc.)

5) Eliminates the need for certificate authorities. (A FAILED SECURITY
MODEL, YES?)

6) No more domain squatting. No more monopoly control over specific
names. No more having to PAY for any name! No yearly registration fees,
no ICANN fees, and no Namecoin purchase necessary.

7) Yet, paradoxically, you can still build up value in a specific name,
and you can still sell that name and website later.


-----------------------------------


Here is how it would work, for example:


-- Let's say I type a URL into my web-browser, such as this:
ottp://freedombox.otc/

-- The OT plugin would intercept this (due to the "ottp" or the "otc")
and would then try to lookup the "freedombox.otc" domain from a local
signed list.

-- It finds it in the list! (In this example so far...) The name
resolves to a base62-encoded hash value from that list, so it now looks
more like this:
ottp://lkjsdf908q345kj.otc/

-- That hash value is the actually the *ID* for a Ricardian contract.
(And the ID is a hash of the contract itself.)

-- The plugin loads up the contract using the ID as the filename (or
local db key.)

-- The contract is self-verifying. How? Because if you hash the contract
yourself, you should get the same ID that you started with. (An attacker
can't change the contract without also changing the ID.)

-- Additionally, the public key for the signer of the contract appears
IN the contract itself...

-- ...And the contract is SIGNED with that key. So you can verify the
signature as well. (The plugin does all this automatically when it loads
up the contract.)


THERE MIGHT BE A DOZEN DIFFERENT TRANSPORT PROTOCOLS IN THE CONTRACT...

-- Once the plugin loads up the contract, there are multiple ways to
actually connect to the signer's website. Let me show you what I mean.
Notice in the sample contract below, there is an IP address, a DNS, an
i2p, a Tor address, and a Freesite.


-----BEGIN SIGNED CONTRACT-----
Hash: SAMY

<?xml version="1.0"?>
<DomainNameContract version="1.0">

<entity shortname="freedombox.otc"
longname="The Freedombox Website"
email="webadmin at freedombox.org"/>

<issue company="The Freedombox Foundation"
email="donate at freedombox.org"/>

<!-- CONNECTION TYPES -->

<connection type="dns"
 address="freedombox.org" />

<connection type="ip"
 address="189.432.12.56" />

<connection type="i2p"
 address="jsdf98345hj.i2p" />

<connection type="tor"
 address="8546jkhds9f8.onion" />

<connection type="freenet"
 address="SSK at GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w,c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs,AQABAAE" />

<!-- KEYS -->

<key name="owner">
- -----BEGIN CERTIFICATE-----
MIICZjCCAc+gAwIBAgIJAJWeuXi8XjVjMA0GCSqGSIb3DQEBBQUAMFcxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTEQMA4GA1UEBxMHRmFpcmZheDERMA8G
A1UEChMIWm9yay5vcmcxEDAOBgNVBAMTB1Jvb3QgQ0EwHhcNMTAwNzIyMjAxMTIx
WhcNMTAwODIxMjAxMTIxWjBeMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2lu
aWExEDAOBgNVBAcTB0ZhaXJmYXgxETAPBgNVBAoTCFpvcmsub3JnMRcwFQYDVQQD
Ew5zaGVsbC56b3JrLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtiu6
jU/R2Zm3AAo1jA4z/IVHyAnIFzp4kUNkLjEQ6bKG31PRaTcZTLPBkXsnQIFPx1Ky
u9q8T9gjiKPAEurtPyoDdT99aWP1NREcg4/RJ2naWOEAXGh21PP22x31bvy6lOrv
KqOSBfNTL43PEj0dKMIl0MNywzsVZGDqKXTStG0CAwEAAaMzMDEwCQYDVR0TBAIw
ADAkBgNVHREEHTAbgg5zaGVsbC56b3JrLm9yZ4IJbG9jYWxob3N0MA0GCSqGSIb3
DQEBBQUAA4GBAEhRt14Ys7jhUg0mDKMMgZLLs8cbDNFqwoJynLVNgJUdlvwo/nzZ
Mk0wWVw8ucaDdpSBufUx4G3h6KkTTKOAbkvncRGdCiqywvOjKIbUczWMDdJ9uE5m
5zGVZZ8C7EqaIIrv0OpW8WSryOCXvCFhLfKuZteELGmCCX2tQE9TqIsr
- -----END CERTIFICATE-----
</key>

<key name="certification">
- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP Desktop 10.0.1 - not licensed for commercial use: www.pgp.com

mQGiBDn6yYURBADM3qphMoDpvpp3Lk2KW0bpA+i1ne6Hwm24lW9w1dIJrw8CEc+S
vAEhoGOAJNTO209NFYxcM+sA8XHp5aJpFHSbI536sfzbSVe3/MwdJ8JZXtbzcbHv
ToBs1wScGTet2SGL6I9S3p7XUfprCYezBPRMCPOTxqR8pptotYOGXZoPZQCg/y0q
CZjPJclqDY8Hf0X+DWnOMAkEAI4GnOpSq838/oElDAuZcLOvpTqTZ922pG1EJQmj
Vh4P6br3ocrWnJSonkqFPLjihsVwGumO/hkyptrgqRV/vR9BmK1LKz901VaXbXPZ
Lcns+XAg5sXxZcz87Dl4AduTF59ahHkc2bR7HqrvzRkXoQ/Q4ViLOifFISXXPKx8
3OazA/9Ip4W+gr8e/oub7MQFJZcyOfcN1KDFIjnObVIabpIlKPcTeEHGvd/WUHOJ
PQQr1+WGZY1W9UjLo171ssL2/x2bXaqJ4Ukgf4aQpRb5lUqekCKgine6eUA1XjTw
J+a/J3xP54/iEuqdDZYGuX5j0/EJCqbY7gggPNkDNH82XdfQ+7QzUmFjaGVsIFdp
bGxtZXIgW2NlcnRpZmljYXRpb25dIDxyYWNoZWxAd2lsbG1lci5vcmc+iE4EEBEC
AA4FAjn6yYUECwMCAQIZAQAKCRC30ABpXpgYMFTFAJ0WqZwUXbD0H7YCGR7rI8jB
Rh8E2wCePBrQBC1+shZrXCY0proYCkYfWdA=
=UObU
- -----END PGP PUBLIC KEY BLOCK-----
</key>

<key name="serverCertification">
- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP Desktop 10.0.1 - not licensed for commercial use: www.pgp.com

mQGiBDmhGRERBAC9F7VF7ZNcwhffdFS2Sg0AcsF9gdhEEggZmBT1ezM5BYEO4lvN
EJjezFilNxMLE3mP9E95mtRUEEtIx4ViyAGjVPwRBVQA2BNf+rbvCReBhhlJTFkN
GOSHd65k4mDCflJAn7EX2OpST9tEAhpBs82w4OxlHIxmnav8iyD0O07sHwCgzYJI
Xv3TEqERh0eDPEQ80MqGYEkD/Aj12tRhZYhYlVtEmJ4MrET9Ezuyhn8kQv89iBNK
u2mN//LK4cqfJos1SJ3qXT16AHQQvfI0AUsI1ZQ+piq9pZ+sUMwpRnoQHM5SKux5
UYcIM9aklW0zYAt+WjyrQBhN0eW0uzF40NVZHIH592dz/1RbNKf0hSDKBeCERTxk
/zRDA/9rgvwyclIq4VTgA9AgwHC+JrKwbtJsawb4eYZPSbDe/pl2bQT9haTuLBKs
Olz57Er5Vto6DWb1hs8gzb107u7CGYholr/tyjiPRhDvOcVQpZudkCE/1UXpawT/
P4tPUvrBIVNK5SmHVRz6nsJxMxYm6Pr14+t8mgS1jrr/TxFTW7Q+U3lzdGVtaWNz
IE9wZW5QR1AgU09YIFtvcGVyYXRvcl0gKGRzczEpIDxzZXJ2ZXJAc3lzdGVtaWNz
LmNvbT6IVgQTEQIAFgUCOaEZEQQLCgQDAxUDAgMWAgECF4AACgkQKfOLUygtdArw
3QCeJ8bEfVFS2etPkFus6esJfZ0+2OUAoK4AIIjFB+9CsoEkCn4dJBRTUKen
=L806
- -----END PGP PUBLIC KEY BLOCK-----
</key>

</digitalAssetContract>
-----BEGIN SIGNATURE-----
fm7l4FyMW7p0ayZcBwq2JHGnSzRIwS75tvkNxpEnrvcahwv68RKFmxDr7Hz8000u
d9oOznZpjga17gwSlTS1AsiX3GAix5CLCZLenAV6dUUsgEBOK2kCnB/6gc8c5FVP
QH0mF0ICfxDPSY2Y0/lXVww8URis0mmHz3F+NX9S9B4=
-----END SIGNATURE-----



Notice also that the keys are in the contract, so there's no need for
any "certificate authorities" anymore. They are all spy agencies anyway.


-------------------------------------------------------------




WHAT IF I DON'T ALREADY HAVE THE CONTRACT? HOW DOES THE PLUGIN FIND IT?


SHORT FORM:
In most cases it already has the ID (in the URL), so it just downloads
the contract based on that ID, via P2P or from a Distributed Hash Table.
Then it verifies the contract based on the ID and the signature, and
then it actually connects to the website and displays it, using one of
the addresses inside the contract (whether via i2p, tor, freenet, ip,
dns, etc. The contract supports as many as you wish.)



-------------------------------------------------------------


WHAT IF IT NEEDS TO RESOLVE THE NAME FIRST, TO GET THAT ID?


LONG FORM:
In this example we actually have to resolve the name "freedombox.otc"
and find the right contract.

1) The plugin can make a request via P2P. (Coming soon to
Open-Transactions out of necessity for the digital cash, due to the
nature of the minting files.) The plugin thus asks my peers to lookup
the contract ID in their own local lists, and so I can find the contract
via a "web of trust".

2) Optionally, alternately, or additionally, my plugin may contact
certain specialized "search engines for contracts", which I predict will
arise on darknets. This is only a matter of time.
Thus, instead of searching Google for "freedombox" and getting a list of
sites, there would be various darknet-based aggregator sites where I
could type "freedombox" and get a list of contracts.

3) Whether the plugin uses p2p or search engine, or both, EITHER WAY,
MULTIPLE CONTRACTS might come up for the SAME NAME!

This is okay!!!!!! People automatically assume this is some big problem
to be solved, but you can instead realize that IT'S NOT A PROBLEM AT
ALL. The sun will still come up in the morning. The sky is not falling.

4) If such a name conflict happens, that's okay: just check the
fingerprint and approve the correct one. You'll see the list of IDs, and
you can click and view each contract. You probably got the site ID off
of a business card, anyway. THIS IS JUST LIKE VERIFYING A FINGERPRINT
FROM A BUSINESS CARD, OR VERIFYING A FINGERPRINT DURING OTR CHAT. (And
you only do it once, in the rare event of a conflict.)

5) In most cases, THIS STEP ISN'T NECESSARY, since in most cases you
will be clicking on a link, not typing the name by hand, and the link
itself will ALREADY have the ID, (no need to resolve it from the name.)

Instead, the plugin IMMEDIATELY loads (or downloads) the appropriate
contract based on its ID, then verifies its signature, and then connects
to the website.

6) Also, remember once you enter the ID the FIRST TIME, then the name
will work EVERY time after that. (Since the plugin can just look it up
locally.)

7) You can even choose to import contracts that both claim the same
name. (This will rarely or never happen.) When the plugin encounters
such an ambiguity, it'll just pop up the list and ask you to choose one.
No big deal!

8) The contracts themselves can be globally available in a DISTRIBUTED
HASH TABLE. This way the owner can continually update the contract,
everyone can see it, and it's censorship-resistant.

9) It's easy to update contracts in the DHT as necessary. Perhaps the
"main ID" is just a DHT address where the "current version ID" can be
found. This way you can change versions without changing your main ID.
The DHT address can be a hashed public key, where the owner is the
holder of the private key.

-------------------------------------------------------------


WHAT IF I AM EDITING AN HTML PAGE AND I WANT TO SEE THE ACTUAL NAMES IN
THOSE LINKS, NOT THE UGLY BASE62-ENCODED HASHED IDs?


-- You can probably just USE the names, and "The HTML Editor of the
Future" will do the hard work of substituting the IDs when you save the
file later. (Computers can do this for us!)

-- In fact it will probably just add the IDs together WITH the names,
for whichever tags where they don't already appear.

-- Until such an editor exists, a very simple script would do this.


-------------------------------------------------------------



WHAT PROBLEMS DOES THIS SOLVE?

1) People can use any "DNS name" they want for their website. It will
never be "already taken".

2) There is no central "DNS server". No central authority.

3) Name conflicts are rare, and easily handled. Conflicts also naturally
cause the user to choose the right one based on the FINGERPRINT. Isn't
this a good direction?

4) Supports ALL PROTOCOLS. (Whichever addresses you put in your
contracts... tor, i2p, ip, dns, freenet, etc.)

5) Eliminates the need for certificate authorities. (A FAILED SECURITY
MODEL, YES?) You already have the site's public key from their contract,
so your browser can just use that to encrypt a session key.

6) No more domain squatting. No more monopoly control over specific
names. No more having to PAY for any name! No yearly registration fees,
no ICANN fees, and no Namecoin purchase necessary. Your website also
can't EXPIRE -- unless you put it in the contract that way, or unless we
make it a feature of the system.

7) Yet, paradoxically, you can still build up value in a specific name,
and you can still sell that name and website later.



Just thinking out loud,

-Fellow Traveler















More information about the Freedombox-discuss mailing list