I don't necessarily disagree with you, but what you suggest requires major design, buy in, and implementation, none of which are remotely possible in the available time.

Encryption is all about key management which is not simple and if isn't correctly designed and implemented, is useless. It also requires encrypted links to pass keys, which is another issue.

Given the amount of discussion required to decide that Carlos has a problem worth addressing, the idea of an encryption infrastructure could be resolved in a few days is hopeless given that even after a decade or two, even SSL is riddled with problems.


On 9/4/2014 11:17 AM, Dalton Calford wrote:
Hi Jim,

If the on disk database is encrypted, and the end user is only provided enough credential keys to see what the application developer wants them to see, then, the information remains secure.

The assumption on my part is that some elements of the database such as the DDL descriptions, source and other elements are NOT for end user consumption. There is no reason for a end user to have the keys to decrypt that information.

BUT, from a developers standpoint, once they say that that information is to be encrypted and invisible to the end user, they do not have to continuously worry about deleting source code or their comments. They don't have to alter their deployment scripts and if they are not sure what version the end user has, they can use a custom embedded engine tool to connect directly to the database to review the actual database comments and source to confirm that the appropriate patches have been applied.

What it does mean, is that if someone tries to connect to a database that is fully encrypted and their client does not securely pass the decryption key to the server, the server will just come back with an error about the database being corrupt or some other agreed upon error message.




On 4 September 2014 11:04, Jim Starkey <j...@jimstarkey.net <mailto:j...@jimstarkey.net>> wrote:

    Dalton, it's theoretically impossible to hide something with
    system privileges and without encryption on an open source
    product.  All that's necessary is for someone to compile a version
    without checks.  Now, it is true that we're only trying to protect
    the "source" from people too ignorant or lazy to decompile the
    BLR, but these people probably aren't too ignorant or lazy to
    download a security crippled version of the product.

    We are, in short, between a marshmallow and a soft place.


    On 9/4/2014 10:49 AM, Dalton Calford wrote:
    I still argue that we should take the opportunity to not only fix
    this issue, but to improve the FB product functionality.

    The core requirement is to stop non-authorized users from viewing
    source code.   The current process is to delete the source code
    from the database.

    There is also the common work around of inserting SYSDBA into the
roles table to prevent sysdba from connecting to the database. This functionality is also being removed by locking off the
    system tables.

    FB 3 is already working on stronger user authentication methods
     - sysdba in newer versions of firebird does not necessarily mean
    the same as it did in earlier releases.

    On disk and over the wire encryption are also being worked on if
    not implemented.

    So, a database can theoretically have some items that are
    encrypted on the database owners security authorization that even
    SYSDBA can not see, nor can they decrypt since the on disk
    records are encrypted using the database owners encryption key vs
    the regular users encryption key.

    So, DDL statements such as GRANT VIEW which is used by MS SQL for
    metadata security could be applied to FB.

    This would not only answer the current problems of hiding the
    source code,  it would still allow authorized developers to check
    the source for version comparisons.

    It would also provide functionality which is provided by other
    database engines and which would simplify the DBA's job.

     *

        GRANT VIEW DEFINITION TO public [WITH DECRYPTION KEY privatekey];
        REVOKE VIEW DEFINITION TO public [WITH ENCRYPTION KEY
        privatekey];

        This statement will override metadata-visibility limitations
        at the database level. All metadata in the database will be
        visible/invisible to *public (or whoever you define)*.

     *

        GRANT VIEW DEFINITION ON OBJECT :: <object_name> TO public
        [WITH DECRYPTION KEY privatekey];
        REVOKE VIEW DEFINITION ON OBJECT :: <object_name> TO public
        [WITH ENCRYPTION KEY privatekey];

        This statement will override metadata-visibility limitations
        at the object level. All metadata for the object will be
        visible/invisible to *public*. If the object is a table, all
        the columns, indexes, statistics, and constraints of the
        table will be visible to the *public*. This behaviour also
        applies to GRANT VIEW DEFINITION ON ASSEMBLY and other
        similar GRANT statements.

    Obviously the encryption/decryption part would wait for later
    versions of FB so as to not hold up on the release, but, for now,
    the behaviour could be implemented.   I believe such
    functionality for hiding columns/tables is available in the
    redsoft version of firebird.

    The extension to the parser could be provided now, while the
    hiding of an objects source would delete the source until the
    encryption process is properly thought through.




    On 3 September 2014 07:44, Carlos H. Cantu
    <lis...@warmboot.com.br <mailto:lis...@warmboot.com.br>> wrote:

        I think we already reached a point where core developers can
        hit the
        hammer in what will be the chosen "solution" of this problem
        in FB 3.
        I would be satisfied with either relaxing rules in
        rdb$triggers/procedures, or with new syntax, or with last Jim's
        proposal of SET statement. I'll leave this to you (core
        developers)
        decide what one is more adequate for the time being.

        Another option (maybe not so simple) could be a flag in the
        database
        header that would tell Firebird if the source should be kept
        or not.
        The flag could be set with gfix, as we already do with forced
        writes,
        etc.

        About the other proposals, they can be discussed again for future
        releases, after FB 3 is finally out.

        []s
        Carlos
        http://www.firebirdnews.org
        FireBase - http://www.FireBase.com.br


        
------------------------------------------------------------------------------
        Slashdot TV.
        Video for Nerds.  Stuff that matters.
        http://tv.slashdot.org/
        Firebird-Devel mailing list, web interface at
        https://lists.sourceforge.net/lists/listinfo/firebird-devel




    
------------------------------------------------------------------------------
    Slashdot TV.
    Video for Nerds.  Stuff that matters.
    http://tv.slashdot.org/


    Firebird-Devel mailing list, web interface 
athttps://lists.sourceforge.net/lists/listinfo/firebird-devel


    
------------------------------------------------------------------------------
    Slashdot TV.
    Video for Nerds.  Stuff that matters.
    http://tv.slashdot.org/
    Firebird-Devel mailing list, web interface at
    https://lists.sourceforge.net/lists/listinfo/firebird-devel




------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/


Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to