Results 1 to 20 of 24

Thread: Protecting SQLite Data

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    Works fine for me. You are using the Sqlcipher version of sqlite3, aren't you?

    Qt Code:
    1. // First, a freshly built sqlcipher
    2. chrisw@newton /tmp/sqlcipher $ ./sqlite3 plain.db
    3. SQLite version 3.7.2
    4. Enter ".help" for instructions
    5. Enter SQL statements terminated with a ";"
    6. sqlite> create table data(a integer);
    7. sqlite> insert into data values (1);
    8. sqlite> insert into data values (2);
    9. sqlite> insert into data values (3);
    10. sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'secret';
    11. sqlite> create table encrypted.data as select * from data;
    12. sqlite> select * from encrypted.data;
    13. 1
    14. 2
    15. 3
    16. sqlite> .q
    17.  
    18. // See that the encrypted file is not identified as Sqlite
    19. chrisw@newton /tmp/sqlcipher $ file plain.db encrypted.db
    20. plain.db: SQLite 3.x database
    21. encrypted.db: data
    22.  
    23. // And that the data is there
    24. chrisw@newton /tmp/sqlcipher $ ./sqlite3 encrypted.db
    25. SQLite version 3.7.2
    26. Enter ".help" for instructions
    27. Enter SQL statements terminated with a ";"
    28. sqlite> pragma key = "secret";
    29. sqlite> .tables
    30. data
    31. sqlite> select * from data;
    32. 1
    33. 2
    34. 3
    35. sqlite> .q
    36.  
    37. // Now with the system, non-encrypting sqlite3
    38. chrisw@newton /tmp/sqlcipher $ /usr/bin/sqlite3 encrypted.db
    39. SQLite version 3.7.2
    40. Enter ".help" for instructions
    41. Enter SQL statements terminated with a ";"
    42. sqlite> .tables
    43. Error: file is encrypted or is not a database
    44. sqlite> .q
    To copy to clipboard, switch view to plain text mode 

  2. The following user says thank you to ChrisW67 for this useful post:

    zim (24th February 2011)

  3. #2
    Join Date
    Dec 2010
    Posts
    13
    Thanks
    6
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Question Re: Protecting SQLite Data

    This is my code, and I am not getting any errors.

    Somehow the db is unencrypted.

    Qt Code:
    1. #include <QtSql/QSqlError>
    2. #include <QtSql/QSqlDatabase>
    3. #include <QtSql/QSqlQuery>
    4. #include <QtSql/QSqlRecord>
    5. #include <QVariant>
    6. #include <QDebug>
    7.  
    8. shonaDB::shonaDB()
    9. {
    10. db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLCIPHER","newDB"));
    11. dbCopy = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLCIPHER","oldDB"));
    12. dbCopy->setDatabaseName("shonaOld.db");
    13. db->setDatabaseName("shonaNew.db");
    14.  
    15. if(!db->open())
    16. {
    17. qDebug() << "db open fail";
    18. }
    19.  
    20. if(!dbCopy->open())
    21. {
    22. qDebug() << "dbCopy open fail";
    23. }
    24.  
    25.  
    26. QSqlQuery qry(QSqlDatabase::database("newDB"));
    27.  
    28. qry.prepare("PRAGMA key = 'xyz'");
    29.  
    30. if(!qry.exec())
    31. {
    32. qDebug() << "key fail";
    33. }
    34.  
    35. }
    36.  
    37.  
    38.  
    39.  
    40. void shonaDB::copyDatabase()
    41. {
    42.  
    43. QSqlQuery qry(QSqlDatabase::database("newDB"));
    44.  
    45. qry.prepare("ATTACH DATABASE 'newDB' AS encrypted KEY 'xyz' ");
    46.  
    47. if(!qry.exec())
    48. {
    49. qDebug() << dbCopy->lastError().text();
    50. }else{
    51. qDebug()<< "Success ATTACH";
    52. }
    53.  
    54. qry.prepare("CREATE TABLE encrypted.dictionary (txtVar text, txtVarTwo text, txtVarThree text);");
    55.  
    56. if(!qry.exec())
    57. {
    58. qDebug() << dbCopy->lastError().text();
    59. }else{
    60. qDebug()<< "Success ct";
    61. }
    62.  
    63.  
    64. qry.prepare("INSERT INTO encrypted.dictionary SELECT * FROM dictionary;");
    65.  
    66. if(!qry.exec())
    67. {
    68. qDebug() << dbCopy->lastError().text();
    69. }else{
    70. qDebug()<< "Success transfer";
    71. }
    72.  
    73.  
    74. }
    To copy to clipboard, switch view to plain text mode 

  4. #3
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    Your copyDatabase() method should open the unencrypted database (i.e. oldDB), attach the encrypted database, and then push the table contents into the attached database. You are currently opening the newDB and attaching a second copy of the newDB. I am surprised that the create table doesn't fail.

  5. #4
    Join Date
    Dec 2010
    Posts
    13
    Thanks
    6
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Protecting SQLite Data

    Hi

    do you need two database objects to attach the encrypted database.

  6. #5
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    If you are doing this in Qt code then you use a single db object and use a QSqlQuery to execute an ATTACH statement. The attachment is only good on that db instance in my experience. You need to open the unencrypted database and attach the encrypted database (your last code post doesn't do that).

    Once you have the encrypted database, do you need to allow the user to repeat this in your application? If not then why not just do the process from the command line as in my earlier example.
    Last edited by ChrisW67; 22nd March 2011 at 23:11.

  7. The following user says thank you to ChrisW67 for this useful post:

    zim (23rd March 2011)

  8. #6
    Join Date
    Apr 2010
    Posts
    769
    Thanks
    1
    Thanked 94 Times in 86 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11

    Default Re: Protecting SQLite Data

    It might be simpler to protect the website through any of a number of server controls that require a user to enter a password before access to a site is granted. These are simple to set up and most hosting services provide the services and tools required. Your unencrypted database then lives within the security provided by restricted access to the web page that interacts with it.

    This also makes it simple to grant a few priveleged users (or only yourself) access to administrator functions.

  9. #7
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    Website? This looks like a desktop application.

  10. #8
    Join Date
    Apr 2010
    Posts
    769
    Thanks
    1
    Thanked 94 Times in 86 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11

    Default Re: Protecting SQLite Data

    Quote Originally Posted by ChrisW67 View Post
    Website? This looks like a desktop application.
    It wasn't clear to me; Firefox was mentioned earlier, so I thought I'd mention the server-based approach as an alternative.

  11. #9
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,368
    Thanks
    3
    Thanked 5,018 Times in 4,794 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: Protecting SQLite Data

    I just read the thread and I'm still not convinced this whole approach is safe. At some point there will be a plaintext version of the password somewhere in the process memory and no executable mangling will prevent that. Dumping core at this moment will sooner or later reveal this password. To me only situations where you do not pass the plaintext password (like challenge and response solutions) are possible candidates for a good solution.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  12. #10
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    Quote Originally Posted by wysota View Post
    I just read the thread and I'm still not convinced this whole approach is safe. At some point there will be a plaintext version of the password somewhere in the process memory and no executable mangling will prevent that.
    This is the perpetual problem of any DRM scheme... you are giving the attacker both the encrypted data and the key. There's no way around it. All you can do is make it difficult to extract. For example, the Armadillo wrapper includes anti-dumping measures, anti-debugger measures, on-the-fly encryption of code segments, object file rearrangement and other things. Properly used the key is very hard to get at and you have to weigh the effort required to attack the protections against the value of the thing being protected.

  13. #11
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,368
    Thanks
    3
    Thanked 5,018 Times in 4,794 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: Protecting SQLite Data

    The key can can be embedded in hardware in such a way that it never leaves the sillicon. Of course you can still try to copy the chip.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  14. #12
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Protecting SQLite Data

    We might have to wait until Qt 6.0 for the addition of the QtSilicon module

  15. #13
    Join Date
    Sep 2009
    Location
    Wroclaw, Poland
    Posts
    1,394
    Thanked 342 Times in 324 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows Android

    Default Re: Protecting SQLite Data

    Somehow the db is unencrypted.
    Using windows xp, got the same issue, compiled sqlcipher and could open "encrypted" databases created with sqlcipher/sqlite3.exe with any sqlite browser.
    This is important how do you configure the sqlcipher, when I've followed the tutorial it wasn't working, but then I reconfigured using additional options:
    Qt Code:
    1. configure --disable-tcl --disable-amalgamation --prefix=/c/qt/src/plugins/sqldrivers/sqlcipher CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-LC:/OpenSSL-Win -leay32"
    To copy to clipboard, switch view to plain text mode 
    After make I get sqlite3.exe which I can use to create really encrypted databases ( as in ChrisW67 post ).

    ------------------------------
    edit:
    just tested the sqlcipher plugin for Qt, works ok too
    Last edited by stampede; 23rd March 2011 at 13:46.

Similar Threads

  1. Qt to Sqlite data insertion doubt.
    By rex in forum Qt Programming
    Replies: 15
    Last Post: 16th December 2010, 12:31
  2. Replies: 13
    Last Post: 6th December 2010, 04:41
  3. Sqlite and UTF8 data
    By kroenecker in forum Qt Programming
    Replies: 2
    Last Post: 19th April 2009, 14:49
  4. data not being retained in sqlite DB
    By sticcino in forum Qt Programming
    Replies: 2
    Last Post: 2nd July 2008, 10:42
  5. Write protecting cells
    By therealjag in forum Qt Programming
    Replies: 2
    Last Post: 12th February 2006, 09:47

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.