gkweb
December 2nd, 2003, 10:18 AM
I will try to draw what i understood from the help :
Key generation :
----------------------
user passphrase (UPP)
|
|
SHA256, MD5 and HAVAL256
(over 260 000 rounds operations)
(random bit taken from UPP flipped every 5000)
/ \
/ \
1 RinjDael secret key 1 Twofish secret key
(256 bits) (256 bits)
=> Each time you encrypt a file with your _same_ passphrase, ciphers keys used to encrypt data are always different or always the same ?
I think it's always the same if we want to be able to decrypt data, but since the IV's are always different it's like having different secret key each time ?
CSE archive format :
--------------------------
FILE BEGINING
------------------------------------------ offset = 0
| *Clear Header* |
| IV (RinjDael) IV (Twofish) |
| |
-------------------------------------------
| *Encrypted Main Header* |
| "file offset table" information |
| 2 IV to decrypt "file offset table"|
| number of archive's files |
| random data |
| |
-------------------------------------------
| *Encrypted files data* |
|compressed & encrypted Chunks |
| |
-------------------------------------------
| *File offset table* |
| ALL files informations |
|files offset in [Encrypted files data]|
| |
---------------------------------------------
END OF FILE
Encryption Process ([Encrypted files data] CSE archive area) :
-------------------------------------------------------------------------------
Data (files)
|
|
|
Archive
([Encrypted files data])
|
|
CHUNK (1MB)
-----------------------------------------------------
| [File Block Header IV for rijndael] |
-----------------------------------------------------
| [File Block Header IV for twofish] |
-----------------------------------------------------
| [File Data IV for rijndael] |
-----------------------------------------------------
| [File Data IV for twofish] |
-----------------------------------------------------
| [Encrypted File Block] |
| original plaindata chunk information: |
| - checksum (SHA256) |
| - original size |
| - compressed size |
------------------------------------------------------
| [Encrypted File Data] |
------------------------------------------------------
|
CHUNK (1MB)
|
CHUNK (1MB)
|
[...]
so a quick overview could be :
-------------------------------------- offset = 0
| *Clear Header* |
---------------------------------------
| *Encrypted Main Header* |
---------------------------------------
| *Encrypted files data* |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
-----------------------------------
| *File offset table* |
----------------------------------
Archives encryption strenght seems _very_ high.
Even if i'm not a cryptographic expert, i can see that with _one_ password (provided by the user), two key are generated and used with random seed each.
Combined, this lead that the same keys encrypting same data twice will not render the same encrypted form.
So an attacker collecting a lot of encrypted data to help him to guess the secret key won't help him.
Moreover, into the same archive, a same kind of data of a particular file will never be encrypted in the same manner in the next chunk, since random characters are used.
So, at worst, if an attacker knows the protocol (like the CS software itself) he will still be blocked by the well know strong encryption algorithm RinjDael and Twofish, and the randomness of the chunk's encryption dramatically prevents
easy cryptanalyses methods, so the brute force is the last "chance" for the attacker, let say him all together good luck for calculating 2^256 (+/x ?) 2^256 combination !
Please correct me i made mistakes !
i'm sure to have made some ;)
Key generation :
----------------------
user passphrase (UPP)
|
|
SHA256, MD5 and HAVAL256
(over 260 000 rounds operations)
(random bit taken from UPP flipped every 5000)
/ \
/ \
1 RinjDael secret key 1 Twofish secret key
(256 bits) (256 bits)
=> Each time you encrypt a file with your _same_ passphrase, ciphers keys used to encrypt data are always different or always the same ?
I think it's always the same if we want to be able to decrypt data, but since the IV's are always different it's like having different secret key each time ?
CSE archive format :
--------------------------
FILE BEGINING
------------------------------------------ offset = 0
| *Clear Header* |
| IV (RinjDael) IV (Twofish) |
| |
-------------------------------------------
| *Encrypted Main Header* |
| "file offset table" information |
| 2 IV to decrypt "file offset table"|
| number of archive's files |
| random data |
| |
-------------------------------------------
| *Encrypted files data* |
|compressed & encrypted Chunks |
| |
-------------------------------------------
| *File offset table* |
| ALL files informations |
|files offset in [Encrypted files data]|
| |
---------------------------------------------
END OF FILE
Encryption Process ([Encrypted files data] CSE archive area) :
-------------------------------------------------------------------------------
Data (files)
|
|
|
Archive
([Encrypted files data])
|
|
CHUNK (1MB)
-----------------------------------------------------
| [File Block Header IV for rijndael] |
-----------------------------------------------------
| [File Block Header IV for twofish] |
-----------------------------------------------------
| [File Data IV for rijndael] |
-----------------------------------------------------
| [File Data IV for twofish] |
-----------------------------------------------------
| [Encrypted File Block] |
| original plaindata chunk information: |
| - checksum (SHA256) |
| - original size |
| - compressed size |
------------------------------------------------------
| [Encrypted File Data] |
------------------------------------------------------
|
CHUNK (1MB)
|
CHUNK (1MB)
|
[...]
so a quick overview could be :
-------------------------------------- offset = 0
| *Clear Header* |
---------------------------------------
| *Encrypted Main Header* |
---------------------------------------
| *Encrypted files data* |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
| Chunks |
-----------------------------------
| *File offset table* |
----------------------------------
Archives encryption strenght seems _very_ high.
Even if i'm not a cryptographic expert, i can see that with _one_ password (provided by the user), two key are generated and used with random seed each.
Combined, this lead that the same keys encrypting same data twice will not render the same encrypted form.
So an attacker collecting a lot of encrypted data to help him to guess the secret key won't help him.
Moreover, into the same archive, a same kind of data of a particular file will never be encrypted in the same manner in the next chunk, since random characters are used.
So, at worst, if an attacker knows the protocol (like the CS software itself) he will still be blocked by the well know strong encryption algorithm RinjDael and Twofish, and the randomness of the chunk's encryption dramatically prevents
easy cryptanalyses methods, so the brute force is the last "chance" for the attacker, let say him all together good luck for calculating 2^256 (+/x ?) 2^256 combination !
Please correct me i made mistakes !
i'm sure to have made some ;)