String przez port czy lepiej bufor i szyfrowanie

String przez port czy lepiej bufor i szyfrowanie
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Dzień dobry,
Tworzę swój pierwszy serwer prostych szyfrowanych baz danych na własny użytek i moich programów(wiem że są gotowce, ale tak też się uczę, protokołów i funkcji sql).
Przesyłam przez port stringi z danymi , po połączeniu , warunkiem otrzymania odpowiedzi od serwera jest padanie hasła.
Moje pytanie jest takie, czy szyfrować dane przesyłane i przesyłać je jako bufor bajtów czy port przesyłający string jest na tyle bezpieczny,że nie trzeba tego szyfrować?
Generalnie program, dla jakiego piszę teraz serwer nie przechowuje żadnych danych wymagających ochrony, jednak skoro już serwer sobie napiszę to chciałbym aby do ew. przyszłych projektów mógł służyć również. Działa tylko w sieci lokalnej ale rozważam rozszerzenia o przekierowanie portu i dostęp z internetu, chociażby aby mógł wprowadzać automatyczne aktualizacje bez używania serwera ftp wszystkich klientów w sieci lokalnej.

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
3

Zależy od serwera bazodanowego - np. Postgres wspiera TCP/IP + SSL natywnie (https://www.postgresql.org/docs/9.1/ssl-tcp.html).

chociażby aby mógł wprowadzać automatyczne aktualizacje bez używania serwera ftp wszystkich klientów w sieci lokalnej

fwiw, dla bezpieczeństwa oraz wygody zasadniczo obecnie rzadko korzysta się z rozwiązań w których klient łączy się bezpośrednio do bazy - najczęściej po drodze jest jakieś HTTP API; w takiej sytuacji bazodanowy TLS ma trochę mniejszy sens, ponieważ klienci łączą się jedynie do API (np. po HTTPS) i nie widzą bezpośredniego ruchu między serwerem API a serwerem bazodanowym.


edytowany 2x, ostatnio: Patryk27
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Nie używam żadnego serwera baz danych poza pisanym właśnie przez siebie(wykonuje polecenia jakie prześlę stringiem i jakie sam zaprogramowałem). Dane są szyfrowane przeze mnie (programy) kluczem losowym zmiennej długości wmonotwanym w przesyłane dane i w każdą z baz danych. Zapewnić to może pełne zabezpieczenie danych przed rozszyfrowaniem. Jednak nie wiem jak bardzo jest to potrzebne w sieci lokalnej. Czy szyfrować czy używać stringów. Szyfrowanie nieco spowolni przesył, choć z drugiej strony ilość danych jest mała w zapytaniach, przynajmniej w tym projekcie. (Amatorskim)

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Skoro szyfrujesz dane i klucz wysyłasz razem z nimi, to dowolna osoba podsłuchująca ruch w sieci (i znająca Twój algorytm) może ten ruch rozszyfrować, c'nie -- a zatem na czym polega tutaj bezpieczeństwo? 👀

Chyba że masz sytuację w stylu, że szyfrujesz kluczem publicznym, a baza danych ma w sobie schowany klucz prywatny; wtedy najprawdopodobniej jesteś podatny na replay attack, ale jako-tako pewne bezpieczeństwo to gwarantuje.

Tak czy siak, zawsze najlepiej nie wynajdywać szyfrowania od zera - jeśli naprawdę zależy Ci na bezpieczeństwie, to wykorzystaj TLS albo tuneluj ruch po SSL; każde rozwiązanie w stylu "szyfruję stringi ręcznie emacsem przez sendmail" będzie miało jakieś ukryte wady, o których możesz się dowiedzieć za późno (chyba że jesteś specjalistą od kryptografii, oczywiście 😇).


edytowany 7x, ostatnio: Patryk27
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Druga opcja, czyli baza ma ukryty klucz w sobie i ja tylko wiem na jakiej zasadzie go szukać w danych ,jest losowy i długi też losowo ale dość długi. Tak więc każdy bajt w bazie i przesyłanych danych jest losowy(bo powiązany z kluczem tworzonym na nowo przy każdym zapisie do bazy, który jest losowy).

Oczywiście to wszystko jest tworzone na nowo, ale raczej jeśli nikomu nie zdradzę sposobu szyfrowania, jak znaleźć klucz to złamanie sposobu będzie niezmiernie trudne.

Może wyważanie otwartych drzwi jest trochę śmieszne- zamiast korzystać z gotowych sposobów ale zabawa z bajtami , chowanie klucza trochę ćwiczy głowę i bawi. Nie koniecznie spowalnia proces pisania programu - bo i tak wszystko jest amatorskie bardzo i hobbystyczne, na ile czasu wystarcza.

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
4

Pewnie, tak żeby poeksperymentować i zobaczyć jak szyfrowania działają, jest to dobra i wartościowa rzecz :-)

i ja tylko wiem na jakiej zasadzie go szukać w danych

fwiw, to się nazywa security by obscurity i nie stanowi żadnej bariery / nie daje żadnej gwarancji bezpieczeństwa; głównie dlatego, że skoro szyfrowanie danych następuje w kliencie, a klient działa na komputerach użytkowników (z tego co zrozumiałem), to nic nie stoi na przeszkodzie, aby ktoś sobie tego klienta odpalił pod debuggerem i zobaczył jak działa szyfrowanie (a z tego wywnioskował jak może działać odszyfrowywanie); jedyną ostoją bezpieczeństwa tutaj jest fakt, że baza danych operuje na klucz prywatnym, który tej bazy nigdy nie opuszcza (a i to jest bezpieczne jedynie pod warunkiem, że szyfrowanie jest skuteczne - tutaj, jak rozumiem, oparte o RSA).


edytowany 3x, ostatnio: Patryk27
cerrato
Z drugiej strony - to jest amatorska/niszowa aplikacja, więc szanse, że ktoś będzie się bawił w RE tego wynalazku są znikome.
Patryk27
Wiadomo - ale gdyby coś takiego miało opuścić warsztat, to lepiej wspomnieć :-)
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Zgadza się! Jeśli na komputerze gdzie jest klient debugowanie ktoś sobie włączy to tylko będzie znał sposób kodowania przesyłanych danych(choć debugować plik wykonywalny chyba nie jest łatwo?), a skoro ma klienta to i tak ma dostęp do danych przesyłanych na zapytanie. Natomiast nadal nie ma dostępu do bazy danych bo szyfrowanie tam jest inne- dużo większe porcje danych w plikach i fizycznego dostępu do bazy nie ma.

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
3

choć debugować plik wykonywalny chyba nie jest łatwo?

Nah, w XXI wieku, zwłaszcza z narzędziami w stylu https://rr-project.org/ czy IDA Pro, debuggowanie bez dostępu do kodu źródłowego to pestka.

Natomiast nadal nie ma dostępu do bazy danych

Tak, ale często to w ogóle nie jest potrzebne - zauważ, że jeśli Twoją obawą jest podsłuch ruchu, to dostęp do binarki klienta (a zatem możliwość ekstrakcji algorytmu szyfrowania oraz części klucza) w połączeniu z niebezpiecznym / źle zastosowanym algorytmem szyfrowania stanowi właśnie możliwy wektor ataku; może i nie umożliwi Ci on bezpośredniego dostępu do bazy, ale podsłuch odszyfrowanego ruchu sieciowego do bazy (np. z innych komputerów w firmie) to już wiele.

(przykładowy scenariusz umożliwiający wykorzystanie takiej luki: atakujący i komputery pracowników znajdujące się w tej samej sieci wifi.)

Oczywiście, nie zawsze i nie wszędzie coś takiego będzie stanowiło problem - ale jeśli rozmawiamy ogólnie o dobrych praktykach związanych z szyfrowaniem, no to replay attack i podglądanie odszyfrowanego strumienia to nie byle co :-)


edytowany 3x, ostatnio: Patryk27
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
0

@Windowbee:

Bez urazy, ale twój post to jedno wielkie pomieszanie wszystkiego.
A jest moim życiowym doświadczeniem (nie tylko w informatyce) , że jak ktoś nie umie "w punktach" czegoś zaplanować, to przepali dużo energii i nic wartościowego nie osiągnie.

A co do uczenia się, najczęściej nauczy się źle - jak zła gra na instrumencie, pływanie w złym stylu itd.

U jednego z klientów paprok-dostawca dał (za kasę) super-duper program-skrypt "zaszyfrowany". Skrypt się wyłożył po pewnym czasie, zostawił sobie plik czasowy.
Odszyfrowanie zajęło mi 15 min , zawdzowniłem im, co źle w skrypcie zrobili.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
1

Zaczęło się od tego nieszyfrowanego stringa na porcie. Temat zamknięty. Wiem że muszę szyfrować.

Poświęciłem jakieś 40 min może 1h żeby sklecić konkurs:

link

Pod linkiem jest program wykonywalny exe oraz baza danych szyfrowana wg mojego sposobu. Tak z czystej ciekawości : ile czasu zajmie wstawienie tutaj zrzutu ekranu z hasłem dostępowym do bazy, czy ktoś to zdebuguje i zrobi, albo złamie bazę bez debugowania?

Po wpisaniu odpowiedniego hasła(po złamaniu bazy lub programu) baza jest wyświetlana w tmemo. Jest tam opis sposobu jej szyfrowania. Dla ułatwienia nie jest szyfrowana od nowa co uruchomienie programu. Pozostaje cały czas tym samym plikiem nazwanym baza.dbx

Poza tym programuję bardzo kiepsko więc nie powinno to stanowić wielkiego problemu. Ale szczerze jestem niezmiernie ciekawy.

Środowisko lazarus, nie jest to wirus(ale na wszelki wypadek uruchamiajcie w odseparowanym środowisku, lazarusa pobierałem z oficjalnej strony) Plik wykonywalny dla Windowsa tylko, dla osx musiałbym więcej porobić. Przepraszam za nomenklaturę którą kaleczę.

edytowany 4x, ostatnio: Windowbee
cerrato
dla osx musiałbym - z założenia produkty Apple się olewa. Zresztą - nawet sztuczna inteligencja uważa, że nie są to wartościowe przedmioty: Poniedziałek rano - jeden z...
WI
No … nie radykalnym być w każdą stronę to się traci. Mam mac booka przez stulecia miałem windowsa gdyby nie to ,że można mieć łatwo 3 systemy na jednym sprzęcie w życiu bym się nie zdecydował. Ale szczerze jestem bardzo zadowolony. Działa jak lazarus chciał… niewielka modyfikacja kodu dla win i osx i wszystko działa identycznie prawie…
cerrato
No ogólnie Lazarus daje radę. Ja z kolei głównie siedzę na Linuksie, ale nie mam praktycznie żadnych problemów z tym, żeby ten sam projekt kompilować na Windows i Linux. Na Mac to też powinno działać szybko i wygodnie. Oczywiście - są czasem problemy że coś się rozjedzie - bo inna czcionka, inaczej dana kontrolka wygląda czy się zachowuje na innym systemie - ale nie są to jakieś wielkie i ciężkie sprawy.
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
1

Czy ktokolwiek się podejmie? Jedyną nagrodą jest pokazanie ,że faktycznie odszyfrowywanie takich plików i debugowanie programów deszyfrujących, jest mega proste i szybkie, wszystkim, którzy się uczą.

Zobacz pozostałe 3 komentarze
WY
Wypierdzistyy
Link zwraca przecież http 301 moved i raczej się nic nie pobiera :>
WI
U mnie i u rodziców się pobiera, To jest: https://www.windowbee.com/konkurs.zip
cerrato
u mnie też działa. Znaczy - chce zapisać na dysku jakiś plik .ZIP. Nie ściągam go, bo nie zamierzam brać udziału w konkursie, ale nie zmienia to faktu, że link jest OK. Może @Wypierdzistyy masz jakąś kontrolę rodzicielską, jakiś Family Link czy coś podobnego odpalone? :P
WI
Nowy wątek, tak byłoby ciekawie tylko nie chcę zaśmiecać całego forum tym tematem. Tam szybko pewnie się dowiem że łatwo to złamać 🥴😂
cerrato
No to sam oceń, na ile Ci zależy na odpowiedzi.

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.