[e-lang] Module naming and identification

zooko zooko at zooko.com
Sun Apr 12 23:48:09 EDT 2009


> It would be better if there was a standardized URI-which-designates- 
> the-data-with-this-hash


There have been some stabs at using cryptographically strong  
identifiers for software packaging.  A notable one is Microsoft's  
"Strong Names" scheme [1].

This is a full-on decentralized, secure namespace using public keys  
so that authors can dynamically issue new versions of modules. The  
public keys themselves are included in the "strong names", so there  
is no added layer of indirection "from names to public keys" to screw  
things up.

That is: instead of denoting only a fixed, immutable version of the  
data by using its secure hash, you can also denote "data signed by  
the following public key", which allows new versions of the modules  
to be accepted.

Unfortunately I don't know a lot about the use of these "strong  
names" in practice.  My vague impression is that the tradition in  
deploying Microsoft applications is just to bundle a copy of every  
library you need with your app and configure the app to use only the  
bundled versions that it brought itself. If it is true that this is  
the only way people do things in Microsoft world, then this implies  
that the innovative and powerful "strong names" packaging system is  
simply not used.

Perhaps part of the situation is that people have the typical  
misunderstandings from their identity-oriented paradigm. The  
wikipedia page [2] contains almost no information other than this  
delightful quote: "A common misconception is that Strong keys add  
security.".

Other examples of this pattern include various p2p schemes such as  
"Magnet URIs" [3], Freenet [4], and my own project, Tahoe-LAFS [4].  
Another is the Python "setuptools" tool, which accepts an optional  
md5sum in the fragment of a package URL, and if that fragment is  
present then setuptools rejects the package downloaded from that URL  
if its doesn't match the md5sum.

And then there is the wildcard: git.  Perhaps in the not-too-distant  
future hackers who have been using git's Cryptographic-Hash-Function- 
Directed-Acyclic-Graph structure to manage their source code will  
start using it also to manage their object code, and a full linux  
distribution will spring up overnight with tens of thousands of  
packages which identify each other by their SHA-1 hash. Unfortunately  
git doesn't currently have "public keys as identifiers" the way that  
Microsoft Strong Names, Freenet, and Tahoe do.

Regards,

Zooko

[1] http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx
[2] http://en.wikipedia.org/w/index.php?title=Strong_name
[3] http://en.wikipedia.org/wiki/Magnet_link
[4]http://freenetproject.org
[5] http://allmydata.org/trac/tahoe/browser/docs/specifications/file- 
encoding.txt


More information about the e-lang mailing list