Subject: compressed vnd, cgd and encryption
To: None <tech-kern@netbsd.org>
From: Stephen Borrill <netbsd@precedence.co.uk>
List: tech-kern
Date: 06/23/2006 12:31:25
I've a need to have compressed vnds which aren't easily readable except by 
the target system. The target system will vary in spec, but could be as 
low as P100, 64MB RAM. I can think of a few scenarios:

1) makefs > vncompress > bdes encrypt. On target, bdes decrypt to mfs 
and run from there (currently using this)

Pros:	easy to generate
 	one-time decryption (so no per-access overhead)
 	No kernel size overhead
Cons:	Expensive on RAM

2) makefs (to get image size for cgd) > make cgd in vnd > copy data > 
vncompress. Run in-situ on target

Pros:	No RAM overhead
Cons: 	cgd data won't compress well
 	kernel overhead for cgd
 	Per-access overhead
 	Potentially computationally heavy on low-end machine

3) As 2), but attempt to reverse order of cgd and vncompress

Pros:	As 2), but should compress much better.
Cons:	As 2), plus is it even possible?

4) makefs, vncompress, some form of basic encryption. Extend vnd to be 
able to decrypt on fly before passing to uncompression.

Somewhere in compstrategy() in dev/vnd.c looks like the right place, just 
before the /* uncompress the buffer */ line (row 1663).

Encryption could be similar to bdes or perhaps something more simple (even 
EORing a repeated key).

Pros:	Could hardwire key at compile time in kernel
 	Lightweight encryption not a big computational overhead
 	Little kernel size overhead
 	Will compress well
 	No RAM overhead
Cons:	Requires kernel hacking
 	Does vnd's file access mechanisms allow this to be slotted in?

Option 4) seems best to me for my particular purposes. Thoughts?

(Please CC: me in on replies)

-- 
Stephen