Kern Sibbald wrote:
> Hello,
>
> I am now working on bug #807, where decrypting files gets signature digest 
> errors on each file restored.  As far as I can tell, these are *false* error 
> messages, most likely due to the fact that Microsoft BackupWrite() does not 
> restore exactly the same bits as BackupRead() gave.
>
> Anyway, in looking at the encryption code in detail, which I have not totally 
> finished, I come to realize that there are some important problems that need 
> fixing.
>
> 1. The code is rather inefficient from several stand points -- see items
>     below.
>
> 2. It does a number of malloc() and free()s for each file backed up
>     which is something that Bacula does not normally do.  Over time,
>     I will fix this.
>
> 3. In computing the signature digest, during a restore, it first writes the
>     file to disk, then re-reads the whole file computing the digest that it
>     compares to the original.  This is very inefficient, and I am planning
>     to change it in version 2.2.0 to compute the signature digest as it
>    reads the data from the SD, and thus to skip reading the file after it
>    is written.  
>
>    Upside -- *much* more efficient; the current signature errors
>    will be eliminated.
>
>    Downside -- it is probably better to compute the signature from the
>    actual file written in case something goes wrong in writing it.  However,
>    this doesn't work.
>
>   

I don't think there is a downside. If something goes wrong with writing 
the file, then the file is corrupt and it might as well get a digest 
error on restore as a checksum error, or worse, no error at all.

> 4. The current signature digest algorithm (as far as I can tell) is not saved
>    on the Volume. The signature digest algorithm is compiled into the code,
>    and it is a different algorithm depending on whether or not you have
>    only SHA1 or you have SHA2 algorithms available.  This is *very* bad.
>    It means that if you rebuild your Bacula FD, it may not be able to compute
>    a signature digest for a restore in the same way it did for the backup.
>
> 5. While computing the signature digest for a restore as noted above, the 
>     code is also computing a digest, which is used for the Bacula file hash
>     code -- i.e. the old MD5 or SHA1.  This means that two digests are
>     during the restore, which is unnecessary (as mentioned in the author's
>     comments in the files).
>
> 6. There are a good number of places where the error code returned is
>      simply ignored.
>
> 7. The code for the most part causes any OpenSSL errors to be lost.
>     This is now fixed in version 2.1.14
>
> I'm proposing the following:
>
> Item 2.  Eliminate the unnecessary malloc() calls over time (some gone in
>     version 2.1.14
>
> Item 3. Do the signature digest as the data is received from the SD
>    eliminating the need to re-read the file.  I hope to do this before version
>    2.2.0 is released.
>
> Items 4-5.  Compute only a single digest and use it for the signature record
>    as well as the hash code that goes into the catalog.  I doubt this can be
>    done for version 2.2.0 without delaying it another month, because this
>    is not so simple (new streams for the Volume) and unfortunately, not
>    100% upward transparent -- you will need to modify your Dir conf file to
>    have the same level of signature protection as today.
>
> Item 6. Fix over time.
>
> Item 7. Already fixed.
>
> If anyone has any comments or objections, particularly on item 3, now is the 
> time to speak up.
>
> Best regards,
>
> Kern
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Bacula-users mailing list
> Bacula-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bacula-users
>   

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to