[erlang-questions] Miller's oversight

Mark S. Miller markm@REDACTED
Mon Mar 26 05:39:14 CEST 2007


ok wrote:
> This is sadly true.  However, I think it is useful to distinguish  
> between Erlang the language
> and the full Erlang/OTP system.  If you took the language described  
> in the old Erlang book and
> just removed list_to_pid/1 you would have something that was  
> recognisably Erlang and in which
> process IDs were NOT forgeable.  Virtually all Erlang techniques  
> would survive unchanged, and
> the vast majority of Erlang code would be unaffected.

Good. Is there also an easy way to keep normal Erlang code working, but to 
have it use the safe call-though-intermediate-tagging-process pattern 
everywhere it currently uses the unsafe pid-reusing RPC pattern?

In order for distributed Erlang to provide distributed cryptographic 
capability security between mutually suspicious machines, you'll need to 
change the network representation of a pid as well -- to provide 
unguessability and unspoofability, as explained in Chapter 7 of my thesis. 
Currently, does the distributed Erlang protocol use crypto? How does it manage 
keys?


> As a start towards this,
> (a) [...] (b) [...]
> (c) Long term, create a new 'unsafe' module and move all such unsafe  
> BIFs to it.
>      (Burroughs did something very like this in their NEWP language.)

We now have three good papers documenting the issues in deriving an 
object-capability language from an existing memory-safe almost-capability 
language:

"The Oz-E Project:
  Design Guidelines for a Secure Multiparadigm Programming Language"
by Fred Spiessens and Peter Van Roy
at <http://www.info.ucl.ac.be/people/PVR/oze.pdf>.

The Joe-E project, by Adrian Mettler and David Wagner,
at <http://www.cs.berkeley.edu/~daw/joe-e/>.

"How Emily Tamed the Caml"
by Marc Stiegler and myself
at <http://www.hpl.hp.com/techreports/2006/HPL-2006-116.html>.


Experience with all three supports your approach.


> Providing reflection facilities in a language for the sake of  
> debugging (or for any other
> reason) usually seems to result in a language whose encapsulation is  
> more apparent than
> real.  It is for this reason that in Quintus Prolog it is possible  
> (if you work at it) to
> call any predicate in any module.  It is for this reason that  
> Smalltalk, whose encapsulation
> of instance variables appears to be total does in fact let any object  
> change any instance
> variable in any other object (using #instanceVariableAt:put:).


Flat Concurrent Prolog provided virtual meta-interpretive debugging in a way 
that met the needs of security and debugging simultaneously. At 
<http://lists.squeakfoundation.org/pipermail/squeak-e/2003-February/000027.html> 
I speculate on how one might adapt these ideas to Smalltalk and similar 
languages. I call the approach "refraction". Would something like this work 
for Erlang?

-- 
Text by me above is hereby placed in the public domain

     Cheers,
     --MarkM



More information about the erlang-questions mailing list