Witam, muszę zakodować bazę danych (zwykła z roszerzeniem .db) z SQLite żeby była readable tylko przez program. Czy jest to wykonalne - jeśli tak to mógłby mnie ktoś nakierować
Baza SQLite to zwyczajny plik. Przed otwarciem/po zamknięciu połączenia możesz z nim zrobić co zechcesz, np. zaszyfrować ;)
Rozwiązanie od tajny_agent jest słabe.
SQLite ma jakieś hooks, do których można się podłączyć i dodać szyfrowanie.
Znalazłem coś takiego: http://www.hwaci.com/sw/sqlite/see.html
Inne możliwości
- wxSQLite - C++ wrapper w stylu wxWidgets
- SQLCipher - implementacja z openSSL libcrypto
- SQLiteCrypto - AES-256 and SHA-256
Jest jeszcze parę innych źródeł
MarekR22 napisał(a):
Rozwiązanie od tajny_agent jest słabe.
SQLite ma jakieś hooks, do których można się podłączyć i dodać szyfrowanie.
Znalazłem coś takiego: http://www.hwaci.com/sw/sqlite/see.htmlInne możliwości
- wxSQLite - C++ wrapper w stylu wxWidgets
- SQLCipher - implementacja z openSSL libcrypto
- SQLiteCrypto - AES-256 and SHA-256
Jest jeszcze parę innych źródeł
Napisałem klasę szyfrującą bazę danych i różne pliki programu metodą XOR na dłuuugi klucz który user wprowadza w pierwszym zalogowaniu a klucz ten zapisywany jest w pliku .txt i kodowany hasłem user'a. Tylko teraz więcej z tym problemów niż profitów bo jak zetniesz program tak że destruktor się nie zdąży wykonać to DB pozostaje rozkodowane i łatwo dostępne. Chyba 2 dni zmarnowane i będę musiał wybrać coś z wymienionych przez cb mozliwości. Dziękuję :)
@Xezolpl ale po co dokładnie chcesz to zrobic? Przecież ktoś kto ma ten program i tak może sobie to zreversować i zobaczyć jak "odszyfrowujesz dane" albo zapiąć debugger po odszyfrowaniu bazy i zdumpować sobie wszystkie dane. Przed kim chcesz się bronić?
@hauleth ta, dla klucza o tej długości co plaintext :P
Po zaszyfrowaniu bazy, zostaje ci jeszcze klucz, który odszyfrowuje go, a jak napisał @Shalom, nie możesz go umieścić w binarce kodu, bo to tez bez problemu można się do tego klucza dobrać - prawdopodobnie obfuscator kodu jest potrzebny by zaciemnić ten problem, oraz klucz powinien byc tworzony na podstawie kilku zmiennych, xorowany, by utrudnić jego odczytanie.
prawdopodobnie obfuscator kodu jest potrzebny by zaciemnić ten problem, oraz klucz powinien byc tworzony na podstawie kilku zmiennych, xorowany, by utrudnić jego odczytanie.
Nie ma sensu. Kupisz sobie tym dodatkowe 5 minut pracy reversera. Taki @msm by ci to zreversował hexedytorem bez odpalania IDY nawet ;) Patrz np. https://www.cert.pl/news/single/nymaim-atakuje-ponownie/ ;)
@Xezolpl no dobra ale ktoś kto ma twój program i tak może to odczytać, więc gdzie tu jakiś sens? Bottom line jest taki, ze jeśli twój program może odcztać dane z tej bazy, to każdy kto ma program i bazę też może to zrobić.
zamiast bawic sie w szyfrowanie bazy danych to moze po prostu zrob baze danych na jakims hostingu? Azure / Amazon / Google / Cokolwiek.
Wtedy nikt fizycznie nie bedzie mial bazy danych. Nadal to nie rozwiazuje problemu, bo jezeli ktos ma Twoj program to moze wydostac uzytkownika i haslo
A moze po prostu wszystko zrobisz w chmurze a Frontend zrobisz lokalnie? Wtedy wystawisz API do backendu ktory czyta baze danych i masz ograniczenie ze strony API
@Xezolpl: dobra teraz rozumiem. Jak to się robi po ludzku:
- user ma swoje hasło i wpisuje przy logowaniu do programu
- z tego hasła generujemy jakimś PBKDF klucz szyfrujący
- tymże kluczem odszyfrowujemy dane (np. jakimś AESem, jak tak lubisz xora to moze być AES-CTR)
- Profit!
MarekR22 napisał(a):
Rozwiązanie od tajny_agent jest słabe.
SQLite ma jakieś hooks, do których można się podłączyć i dodać szyfrowanie.
Znalazłem coś takiego: http://www.hwaci.com/sw/sqlite/see.htmlInne możliwości
- wxSQLite - C++ wrapper w stylu wxWidgets
- SQLCipher - implementacja z openSSL libcrypto
- SQLiteCrypto - AES-256 and SHA-256
Jest jeszcze parę innych źródeł
Ymmm wszystko super, tylko nie wiem zbytnio jak użyć takiej biblioteki, czy co to jest, właściwie nigdy nie korzystałem z takich (bibliotek?) z githuba. Jakby mógł ktoś wytłumaczyć to by było super
@Shalom: pewnie kolega chce się bronić przed userami, którzy chcą oszukiwać swojego pracodawcę i "z palca" zmieniają wartości. Nie da się obronić przed wszystkimi, ale cześć sobie odpuścić bo to "za dużo zachodu". W mojej starej pracy mieliśmy ten sam problem. Rozwiązaliśmy to za pomocą zablokowania offline'owego działania programu i trzeba było być ciągle do sieci podłączonym by się synchronizowały dane.
@Xezolpl: ja bym się tym tak nie martwił w przypadku, który opisujesz. Bo z tym co piszesz, to nie ma znaczenia czy to zaszyfrujesz czy nie. Już ważniejsze będzie szyfrowanie całego dysku niż pojedynczego pliku IMHO. A jak już chcesz się w coś takiego bawić to przynajmniej użyj porządnego szyfrowania, a nie XORa zrobionego na kolanie.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.