Point taken about viruses perhaps, but there are other reasons one might want 
to encrypt data - which by its very nature could be related to anything.  
 
For example, in a commercially competitive environment, it might be easy for a 
competitor to gain access to files, or even colleagues within the same 
organisation who do not have the privilege to see such data. A file that can be 
easily read, often will be - whereas an encrypted file, of any reasonable 
level, will often be enough to deter prying eyes.
 
If one needs to know whether a file is a database or not immediately after 
opening it, surely a user-written wrapper function around sqlite(3)_open which 
does a simple select on sqlite_master is the way to go?  Keeps everybody 
happy.... Personally I'd wrap the calls to sqlite anyway but C++ sort of 
suggests doing this regardless....
 
Steve

        -----Original Message----- 
        From: Edwin Knoppert [mailto:[EMAIL PROTECTED] 
        Sent: Mon 22/08/2005 23:20 
        To: sqlite-users@sqlite.org 
        Cc: 
        Subject: Re: [sqlite] Why can i open a textfile?
        
        

        At the other hand, this is database stuff, what on earth would you 
encrypt
        in real life business databases.
        No one cares, except for a few purposes.
        (Now i done it :) )
        Encrypting a header, like if any virus writer is busy with a tool like
        sqlite..
        pfffttt.
        
        
        ----- Original Message -----
        From: "Dennis Jenkins" <[EMAIL PROTECTED]>
        To: <sqlite-users@sqlite.org>
        Sent: Tuesday, August 23, 2005 12:07 AM
        Subject: Re: [sqlite] Why can i open a textfile?
        
        
        > Mike Shaver wrote:
        >
        >>On 8/22/05, Dennis Jenkins <[EMAIL PROTECTED]> wrote:
        >>
        >>>I very much disagree.  I want the entire file, header included, to be
        >>>encrypted.  Sometimes you don't want anyone to know what the file 
type
        >>>is.  Security through obscurity is not secure.  However, you don't 
want
        >>>to give the bad guys a road map either...
        >>>
        >>
        >>Finding out that it's a sqlite file is not a hard problem for an
        >>attacker who has any interesting access to your machine, since your
        >>programs must find that file somehow.  Once they find it, are you not
        >>concerned about lightening their cryptanalysis burden through
        >>known-plaintext attacks?
        >>
        >>Mike
        >>
        > No, not really.  The sqlite crypto engine consumes the first several
        > hundred bytes of the rc4 random number generator output.  It is my
        > understanding that this would significantly complicate the plain-text
        > attack.  But I'm not a crytologist.  I do find it facinating though.
        >
        > I do not understand how "finding the file" would give the attackers 
any
        > clue to what kind of file it is (unless I make the filename something 
like
        > "sqlite3.db3").  If the file were named "jimbob.dat", and the contents
        > looked like gibberish, then what do they know?  They must analyze the
        > program that accesses the file.
        >
        > I once thought that I could remove all text strings from the sqlite 
code
        > that would give the attacker any clues.  I then realized that the 
strings
        > are important to the proper functioning.  The ones that need to be 
left
        > behind are significant enough to be good clues that the program uses
        > sqlite technology.  So, I do agree with you, that it is not too 
difficult
        > to determine if a data file _might_ be an sqlite database, even if it 
in
        > encrypted.
        >
        > That being said, I still like having the header encrypted as it is.  
Maybe
        > it just makes me feel warm and fuzzy on the inside :)
        >
        > In the end, I feel that our software is much more vulnerable to 
someone
        > attacking it with a debugger than with crypto analytic attacks.  At 
some
        > point, you must call "sqlite3_key()" and pass it three things: the 
sqlite
        > handle, a void* to the key initializer and an "int" (# of bytes in the
        > key).  All the attacker has to do is locate that code and determine 
what
        > those last two arguments are.  Personally, I find this to be an easier
        > approach.  But then, I've been coding in assembly since I was 8 and C 
for
        > the last 10 years.  I'm not much of a mathematician or code breaker.
        >
        > I have often wondered how difficult it would be to derive the rc4
        > initialization key given a known plain text and a known cipher text
        > generated from the unknown key and known plain text.  I imagine it as 
a
        > breadth-first search of the key space.
        > Lets say that it is computationally feasible to do just that.  The 
sqlite
        > header string is.. um, heck, I don't know, let's say 20 bytes.  Then 
you
        > can derive the exact values for at most 20 values of the key state 
vector
        > (it might be less if a value gets muted more than once).  What do you 
know
        > about the remaining bytes of the first 256 bytes of the sqlite file?  
Some
        > of those bytes have "sane" values or other constraints.  I think that 
it
        > would be too difficult to fully derive the key b/c you don't know 
much of
        > the plain text.
        >
        > This is the extent of what I know about rc4.  If someone else knows 
more,
        > please enlighten me. :)
        >
        >
        >
        
        

Reply via email to