Jak zaszyfrować bazę danych w SQLite

0

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ć

2

Baza SQLite to zwyczajny plik. Przed otwarciem/po zamknięciu połączenia możesz z nim zrobić co zechcesz, np. zaszyfrować ;)

1

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

Jest jeszcze parę innych źródeł

0
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.html

Inne możliwości

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ę :)

2

@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

1

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.

1

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ć.

1

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

3

@Xezolpl: dobra teraz rozumiem. Jak to się robi po ludzku:

  1. user ma swoje hasło i wpisuje przy logowaniu do programu
  2. z tego hasła generujemy jakimś PBKDF klucz szyfrujący
  3. tymże kluczem odszyfrowujemy dane (np. jakimś AESem, jak tak lubisz xora to moze być AES-CTR)
  4. Profit!
0
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.html

Inne możliwości

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

1

@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.

1

@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.