[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Security in Self
Interesting, but since the granularity is objects instead of methods or
statements,
it may be that this exact proposal is a better match for preventing one
user from corrupting
another's data that for the maintenance of invarients.
Thanks for the thoughts!
-- Dave
At 10:14 PM 4/12/94 +0100, I.R.Woollard@bnr.co.uk wrote:
>>Do you mean saying
>>a) "I am X and I may access A, B, ...
>> (regardless of what A, B, ... specifies)"
>>instead of
>>b) "I am A and I grant access to X, Y, ..."?
>
>I think that a) is true! But that X needs proof!
>
>
>For security, Self lacks:
>
>1 - privacy of slots to access by "self" only.
>
>2 - knowledge of what object called this one ("sender")
>
>3.- some way to call the object that was found to contain the method
>that is now running ("receiver"). (This prevents inheritance doing
>horrible things, see later... )
>
>
>Half baked example, given these changes are done:
>
>"classPoint" here is an object representing the class of objects that
>can do assignment to points. It is publically accessible via a global
>variable.
>
>point =
>(| parent* = traits certificated.
> x = (myX).
> y = (myY).
> x: anX y: aY cert: aCert = ( classPoint checkCert: aCert From: sender
> ifTrue: [myX: anX myY: anY]).
> _ myX <- 0.
> _ myY <- 0.
> certificate <- nil.
>|)
>
>Certificates slots are - the object being certified
> - the class that it is certifying the object is a
>member of
> - a private secret shared between certificate and class
> membership, of the calling object to the group that
>the
> certificate says the object belongs.
>
>certificate point =
>(| _ owner = point.
> _ memberOf = class.
> _ secret = (someobject).
> getSecret = ((sender = receiver memberOf) ifTrue: [secret] False: [nil].
>|)
>
>Point is then modified by the UI, which we assume is in the class that
>is allowed to make new certificates of point...
>
>point certificate: (pointCertificate copy: point)
>
>
>Example of classPoint implementation:
>
>class = (| _ secret = (someobject).
> checkCert: aCertificate From: anObject =
> ( (anObject = aCert owner)
> && (secret = aCert getSecret) )
>
>The point is that nothing except a certificate or the class itself can
>ever get ahold of the secret, and only the class gives out
>certificates about itself. Anybody may get a pointer to a certificate,
>but because it doesn't refer to them, it doesn't help.
>
>Generating cerificates left as an exercise to the reader...
>
>-Ian
>
>p.s. I have a paper that discusses the distributed case, its pretty similar,
>but
>uses public key encryption instead of secrets.
>
>p.p.s. after all this the image had better be written out in rwx......
>with root permissions!