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: [email protected]
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: <[email protected]>
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. :)
>
>
>