snow: virtual network with public keys as addresses

snow

This is a public key hash:

aaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key

Snow lets you use it like an address:

$ ping baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key  
PING baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2) 56(84) bytes of data.  
64 bytes from baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2): icmp_req=1 ttl=64 time=0.611 ms  
64 bytes from baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2): icmp_req=2 ttl=64 time=0.588 ms  
^C

Packets sent to the key name go to the machine with that key. Key names are independent of the underlying network. Think automatic NAT traversal. End-to-end encryption with no configuration. IPv4-only applications on IPv6-only networks. In general it allows network problems to be solved in one place for everyone with an interface that most applications are already using.

But clearly nobody wants to type anything that looks like a public key hash. Fortunately name resolution is a solved problem.

# echo CNAME example.com aaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key >> /etc/sdns/local.names

$ ping example.com  
PING baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2) 56(84) bytes of data.  
64 bytes from baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2): icmp_req=1 ttl=64 time=0.602 ms  
64 bytes from baaaac6rxjmmenb7m5txgpe3nmmrrh4z4ohcr7sxqkrvbk4csbrrorpw7.key (172.16.0.2): icmp_req=2 ttl=64 time=0.594 ms  
^C  
$ wget -nv http://example.com/lolcatz.png  
2014-08-15 12:11:22 URL:http://example.com/lolcatz.png [191177/191177] -> "lolcatz.png" [1]  
$ scp c.avi example.com:  
c.avi 100% 867KB 867.4KB/s 00:00  
$ dig +short @example.com trustiosity.com  
54.186.28.113

Much better.

[snow] [How it works] [How to use it] [How to install it] [Advanced Configuration] [App Development] [Read the FAQ]