[e-lang] Side Channels (was: E-on-Common-Lisp now available)

Mark Miller markm at cs.jhu.edu
Tue May 24 16:36:22 EDT 2005


Jed at Webstart wrote:
> I've been following this thread with interest though not with complete 
> understanding - as part of checking on my general skepticism about 
> language enforcement of domain boundaries between shared memory objects 
> (methods).

Well, I suppose these issues should help reinforce your skepticism ;). Since 
authority is (by definition) only about overt causality, authority boundaries 
can be handled quite well at object granularity by safe language techniques. 
Side channels & covert channels are hard even for a principled OS running on 
bare metal. Eric's post about hyperthreading shows that it's becoming even 
harder, as the hardware itself gets cleverer at trading our secrets for speedups.

AFAIK, the one abstract security issue that a good OS can just get right, and 
that is much easier using OS techniques that language techniques, is denial of 
service. But one can design non-E-like languages in which the language itself 
provides protection from denial of service.


> The above sentence puzzles me a bit.  Isn't a "side channel" 
> a form of covert channel?  If so how could preventing side channels be 
> more difficult than preventing covert channels?

Both side channels and covert channels are forms of non-overt channels. The 
difference is the intent on the part of the code doing the signaling (banging 
the wall). The distinction can be fuzzy between maliciously signaling & 
accidentally signaling. But here's an example where the distinction is clear:

A piece of code that's maliciously signaling through a noisy non-overt channel 
might use an error correcting code to get its signal out through the noise 
more effectively. An accidental signaler may signal redundantly, and so enable 
the listener to use statistics to extract the signal despite the noise. But, 
beyond simple redundancy, I think we can safely assume that an accidental 
signaler will not accidentally encode the signal using an error correcting code.

Noise *may* therefore be much more effective at limiting the bandwidth of side 
channels than of covert channels. I don't actually know.


> Are you assuming zeroing or otherwise patterning of memory in garbage 
> collection as a way to minimize side channels through garbage 
> collection?  Sorry if I missed a mention of that.

No, nothing like that. But your question does suggest another gc-based side 
channel possibility:

Conservative garbage collectors collect a variable amount of storage depending 
(among other things) on which words on the stack, if they were to be 
interpreted as pointers, would be pointing at existing objects. Lacking type 
information for stack frames, such a GC errs conservatively by assuming that 
any such word may be an actual pointer, and retaining the object that 
possible-pointer seems to be pointing at. If a called listener can cause 
objects to be allocated at the locations such words may seem to point at, and 
then cause a garbage collection; and if he can observe which of these objects 
get collected, he may be able to obtain information about the values of int 
variables of his caller that are otherwise hidden from him.

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

     Cheers,
     --MarkM



More information about the e-lang mailing list