mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
119 lines
6.0 KiB
Plaintext
119 lines
6.0 KiB
Plaintext
Prototype enduser documentation
|
|
|
|
If you open a file which was encrypted by this program, you'll be prompted
|
|
to supply a passphrase. This passphrase becomes the default to be used
|
|
when saving files. The passphrase is not the actual encryption key, but
|
|
is used to generate a 256 bit encryption key called the file key.
|
|
|
|
Master Keys
|
|
|
|
An Encrypted file can optionally contain a copy of its own file key, encrypted
|
|
with a master key, derived from a master passphrase. This allows anyone who knows
|
|
the master passphrase to decode any file encrypted with any file key which uses this
|
|
master key structure. As long as the file passphrase is not changed, the master key
|
|
can be propogated to new versions of the file without typing the master phrase
|
|
again.
|
|
|
|
Why use a master key?
|
|
|
|
#1) Data recovery. It is not generally a good idea to use the same
|
|
passphrase for all files, or to continue using the same passphrase forever.
|
|
The principle hazard is that if even one key is revealed, every encrypted file
|
|
you have ever created can also be read. Consequently, different keys should be used
|
|
for different files, and over time, those keys should change. Since the
|
|
keys change, they are subject to being lost or forgotton, resulting in
|
|
lost data - it's still there, but no one can decode it. If you use a master key,
|
|
and you have misplaced the file key, you can still recover your data. Since master
|
|
key is not routinely used to decrypt the file, and never needs to be shared with anyone,
|
|
is is much less likely to be compromised, so it is reasonable for a good master
|
|
key to be used for a very long time in a lot of different files.
|
|
|
|
Recommendation: Use a master passphrase that will be very hard for anyone to guess
|
|
and very hard for you to forget. For example:
|
|
"My Favorite movie is Gone with the Wind"
|
|
"When it rains in New York, even Chicago is a better place to be"
|
|
Never tell anyone what it is or write it down. It's an EMERGENCY measure to prevent
|
|
catastrophic data loss, so treat it that way. Never use it to read or open any encrypted
|
|
file except for testing, or if you have really lost the file passphrase.
|
|
|
|
|
|
#2) Trapdoor access. Sometimes it is desirable to allow a second party
|
|
to decode the file without knowing the encryption passphrase - a good example
|
|
is where an automated program is intended to read an encrypted file that is
|
|
prepared by a human. The program has to have the passphrase or the key embedded
|
|
in it somewhere. It's possible for a dedicated attacker to find it, but it's
|
|
much more likely that the source of compromise will be clumsy humans. Allowing
|
|
the program to use the master key and humans to use the ordinary file keys will
|
|
allow the routine-use keys to be changed as often as necesary, while still
|
|
letting the program read the files without being told the new key.
|
|
|
|
Technical Details:
|
|
|
|
Passphrase Management:
|
|
256 bit encryption keys are geneated from ascii passphrases by
|
|
passing the passphrase through a SHA256 hash. Passphrases are never
|
|
Stored anywhere except in the dynamic memory of the encrypting program.
|
|
|
|
Key management over file generations: If the file is opened
|
|
using a file passphrase, the passphrase is retained and used
|
|
as the default for the passphrase dialog.
|
|
|
|
If the file is opened using a master passphrase, the recovered
|
|
file key is used as the default encryption for new files. This
|
|
allows an editor who does not know the file passphrase to propogate
|
|
a file key he could not create.
|
|
|
|
If the file contains a master key, and neither the file or master
|
|
passphrase is changed, then the retained, master-encrypted file
|
|
key is copied into the next file generation. (It is still valid).
|
|
This allows an editor who knows only the file passphrase to propogate
|
|
a master key he could not create.
|
|
|
|
Encrypted files start with an 8 byte preable, the first 4 bytes are
|
|
a "magic number" to identify the file type (currently 0x04030201)
|
|
and a 4 byte subfile type, (currently either 0x00000001 or 0x00000002)
|
|
|
|
The next 16 bytes are the initialization vector for the AES engine,
|
|
to be used with the file key. Each file gets a unique 16 bytes of
|
|
pseudorandom noise.
|
|
|
|
Next, for master keyed files, is a 16 byte IV for the master key,
|
|
followed by a 32 byte block containing the file key, encrypted
|
|
with the master key, using the master key IV and CBC block chaining.
|
|
|
|
Next, is the actual file data, encrypted using the file key and the IV,
|
|
and CBC block chaining.
|
|
|
|
Finally, are 1-16 bytes of padding to round out the AES block. Note that
|
|
there are never 0 bytes of padding.
|
|
|
|
|
|
|
|
A Word about pass phrases and overall security.
|
|
|
|
While this encryption scheme uses high quality AES encryption and quite long 256 bit keys,
|
|
that is almost irrelevant to the overall security of the system. It's like having a very
|
|
expensive lock on your front door. Thieves won't go to great lengths to pick your lock; they
|
|
will simply break a window instead. The weak link in this encryption scheme is YOU and your
|
|
selection of pass phrases. If your encrypted files are compromised, the most likely, by far,
|
|
method is the simplest; (1) they ask, you tell. or (2) they find the scrap of paper where you
|
|
wrote the passphrase or (3) some key logger watches you type the passphrase. The only
|
|
other likely method is a dictionary-type attack using a program to try lots of possible
|
|
passphrases. Any short, word-like passphrase CAN be compromised using a few days of computer
|
|
time.
|
|
|
|
Finally, consider the suitablility of this encryption scheme for your purpose.
|
|
|
|
If your goal is to prevent your wife from reading your girlfriend's phone number
|
|
in your address book: definitely.
|
|
|
|
If your goal is to prevent disclosure of sensitive data if your laptop is stolen:
|
|
most likely.
|
|
|
|
If your goal is to prevent fishing by the IRS, should they ever become curious about you:
|
|
don't count on it. They'll throw you in jail until you tell them the password, or install a
|
|
key logger and wait for you to tell them voluntarily.
|
|
|
|
If your goal is to keep secrets people who are definitely out to get you, and are willing
|
|
to shove bamboo splints under you fingernails until you talk: don't even think about it.
|
|
|