mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Jörn Engel" <joern@wohnheim.fh-wedel.de>
To: "Guillaume Lacôte" <Guillaume@lacote.name>
Cc: linux-kernel@vger.kernel.org, Linux@glacote.com
Subject: Re: Using compression before encryption in device-mapper
Date: Tue, 13 Apr 2004 19:45:16 +0200	[thread overview]
Message-ID: <20040413174516.GB1084@wohnheim.fh-wedel.de> (raw)
In-Reply-To: <200404131744.40098.Guillaume@Lacote.name>

On Tue, 13 April 2004 17:44:40 +0200, Guillaume Lacôte wrote:
> 
> I hope this is the right place to post this message; I tried to keep it small.
> Basically I really would like to implement compression at the dm level, 
> despite all of the problems. The reason for this is that reducing redundancy 
> through compression tremendously reduces the possibilities of success for an 
> attacker. I had implemented this idea in a java archiver ( 
> http://jsam.sourceforge.net ).
> 
> Although I am not a good kernel hacker, I have spent some time reading 
> compressed-loop.c, loop-aes, dm-crypt.c, and various threads from lkml 
> including http://www.uwsg.iu.edu/hypermail/linux/kernel/0402.2/0035.html
> Thus I would appreciate if you could answer the following questions regarding 
> the implementation of a "dm-compress" dm personality. 
> 
> 0) Has this problem already been adressed, and if yes, where ?

Yes, on the filesystems level.  Jffs2 is usable, although not
well-suited for disks and similar, ext2compr appears to be unusable.
On the device level, I haven't heard of anything yet.

> 1) Using dm: I want to be able to use compression both above dm (to compress 
> before encrypting a volume) and below it (to do a RAID on compressed 
> volumes). I assume there is no other way than to make compression be a dm 
> personality. Is this correct (or shall I use something more similar to a 
> compressed loop device) ?

I'd go for a dm implementation.

> 2) Block I/O boundaries: compression does not preserve size. I plan to use a 
> mapping from real sectors to their compressed location (e.g. struct { 
> sector_t sector; size_t compressed_length }* mapping; ). I believe this 
> mapping can be stored on another dm target and bufferized dynamically. Is 
> this correct, or shall it remain in (non-swappable ?) memory ?
> 
> 3) Compressed sectors have varying sizes, while dm targets only deal with full 
> blocks. Thus every compressed request may need to be fragmented into several 
> block aligned requests. This might imply reading a full block before 
> partially filling it with new data. Is it an exceedingly difficult task ? 
> Will this kill performance ?
> 
> 4) Block allocation on writes: this is the most difficult problem I believe. 
> When rewriting a sector, its new compressed length might not be the same as 
> before. This would require a whole sector allocation mechanism: magaging 
> lists of free space, optimizing dynamic allocation to reduce fragmentation, 
> etc. Is there another solution than to adapt algorithms used in for e.g. ext2 
> ?

If you really want to deal with this, you end up with a device that
can grow and shrink depending on the data.  Unless you have a strange
fetish for pain, you shouldn't even think about it.

> 5) As a workaround to 2,3,4 I plan to systematically allocate 2 sectors per 
> real sector (space efficiency is _not_ my aim, growing entropy per bit is) 
> and to use a trivial dynamic huffman compression algorithm. Is this solution 
> (which means having half less space than physically available) acceptable ?

Makes sense.  One of the zlib developers actually calculated the
maximum expansion when zlib-compressing data, so you could even get
away with more than 50% net size, but that makes the code more
complicated.  Your call.

Performance should not be a big issue, as encryption is a performance
killer anyway.

Whether it is acceptable depends on the user.  Make it optional and
let the user decide.

> 6) Shall this whole idea of compression be ruled out of dm and only be 
> implemented at the file-system level (e.g. as a plugin for ReiserFS4) ?

Again, depends on the user.  But from experience, there are plenty of
users who want something like this.

Jörn

-- 
A victorious army first wins and then seeks battle.
-- Sun Tzu

  parent reply	other threads:[~2004-04-13 17:45 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-04-13 15:44 Guillaume Lacôte
2004-04-13 16:57 ` Timothy Miller
2004-04-14  6:48   ` Guillaume Lacôte
2004-04-13 17:45 ` Jörn Engel [this message]
2004-04-13 19:42   ` Ville Herva
2004-04-14  6:54   ` Guillaume Lacôte
2004-04-14  9:43     ` Jörn Engel
2004-04-14 10:02       ` Guillaume Lacôte
2004-04-14 11:25         ` Jörn Engel
2004-04-14 12:44         ` Paulo Marques
2004-04-14 13:34           ` Jörn Engel
2004-04-14 13:58           ` maccorin
2004-04-14 14:02           ` Guillaume Lacôte
2004-04-14 14:39             ` Grzegorz Kulewski
2004-04-14 15:07               ` Guillaume Lacôte
2004-04-14 16:14                 ` Grzegorz Kulewski
2004-04-14 15:23             ` Paulo Marques
2004-04-14 15:32               ` Guillaume Lacôte
2004-04-14 17:25           ` Bill Davidsen
2004-04-15  9:28 ` Jörn Engel
2004-04-22  7:59   ` Guillaume Lacôte
2004-04-22  9:18     ` Jörn Engel
2004-04-22 10:20       ` Guillaume Lacôte
2004-04-22 12:15         ` Jörn Engel
2004-04-22 13:06           ` Guillaume Lacôte
2004-04-22 16:00             ` Jörn Engel
2004-04-23 15:16               ` Guillaume Lacôte
2004-04-23 16:57                 ` Jörn Engel
     [not found] <1KykU-4VD-17@gated-at.bofh.it>
     [not found] ` <1KPvh-26S-7@gated-at.bofh.it>
     [not found]   ` <1KSMw-4P1-13@gated-at.bofh.it>
     [not found]     ` <1KTfJ-5gK-25@gated-at.bofh.it>
2004-04-14 15:02       ` Pascal Schmidt
2004-04-14 15:25         ` Guillaume Lacôte
2004-04-14 19:29           ` Pascal Schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040413174516.GB1084@wohnheim.fh-wedel.de \
    --to=joern@wohnheim.fh-wedel.de \
    --cc=Guillaume@lacote.name \
    --cc=Linux@glacote.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®