Kryptografia i open source

0

Witam.
Jest taka oto sytuacja:
Program w javie (windows) odczytuje parametry pewnego urządzenia podłączonego do sieci Lan.
Odczytane parametry zapisywane są do pliku tekstowego tworzącego historię pomiarów. Dane te zabezpieczę jakimś algorytmem szyfrującym.
Wizualizacja tych danych odbywa się w aplikacji webowej z wykorzystaniem serwera apache, AJAX, XML i javascript. Aby odczytać zaszyfrowane dane
po stronie aplikacji webowej również muszę w javascript zaimplementować ten algorytm szyfrujący.
Tak przygotowany system wdrażam przemysłowo i wtedy klientowi przekazuję kody źródłowe całego oprogramowania. "Skompilowany" program w javie (jar) można łatwo zdekompilować i javascript, wiadomo, jawny tekst. Nie mam również możliwości konfiguracji serwera bądź innej infrastruktury informatycznej. W tej sytuacji bardzo łatwo jest odczytać sposób i algorytm szyfrujący a tym samym zmienić zapisy historyczne?.

Co proponujecie Państwo w takiej sytuacji? W zasadzie to problem dotyczy oprogramowania open source. Jak wtedy zrobić, dostarczając źródła programu, aby klient nie mógł modyfikować zapisanych danych?

Pozdrawiam

0

Fakt otwartości algorytmu nie ma znaczenia, liczy się tajność klucza szyfrującego. Czy masz możliwość zapewnienia aby aplikacja wizualizująca (która jak rozumiem odbiera, odczytuje dane) miała jako jedyna dostęp do pliku z kluczem prywatnym, przechowywanym np. na serwerze, tak, aby nie udostępniać go użytkownikowi w żaden sposób? Czy może działa totalnie po stronie klienta?

Chodzi o to, aby nie móc zmodyfikować zapisów historycznych? Więc może szyfrowanie w takim wypadku w ogóle nie ma sensu, a warto zainteresować się podpisem cyfrowym, który właśnie do zapewnienia integralności i niezmienności zapisu może służyć. Podpis cyfrowy ma prawie identyczne działanie jak typowa kryptografia asymetryczna, ale również wymagana jest tajność klucza prywatnego, o co w Javie trudno.

0
Ktos napisał(a):

Fakt otwartości algorytmu nie ma znaczenia, liczy się tajność klucza szyfrującego. Czy masz możliwość zapewnienia aby aplikacja wizualizująca (która jak rozumiem odbiera, odczytuje dane) miała jako jedyna dostęp do pliku z kluczem prywatnym, przechowywanym np. na serwerze, tak, aby nie udostępniać go użytkownikowi w żaden sposób? Czy może działa totalnie po stronie klienta?

Zakładam, że klient ma pełny dostęp do wszystkich zasobów i plików a na dodatek aplikacje nie mają dostępu do internetu. Wszystko działa w wydzielonej sieci.

Ktos napisał(a):

Chodzi o to, aby nie móc zmodyfikować zapisów historycznych? Więc może szyfrowanie w takim wypadku w ogóle nie ma sensu, a warto zainteresować się podpisem cyfrowym, który właśnie do zapewnienia integralności i niezmienności zapisu może służyć. Podpis cyfrowy ma prawie identyczne działanie jak typowa kryptografia asymetryczna, ale również wymagana jest tajność klucza prywatnego, o co w Javie trudno.

Podpis cyfrowy - to przemyślę.

Może obfuskacja kodu jest jeszcze jakimś rozwiązaniem?

Pozdrawiam

0

Nie bardzo chyba rozumiem przed kim ty chcesz te dane chronić. Bo rozumiem że programy działają u klienta, więc czemu problemem jest jeśli klient coś sobie będzie tam zmieniał?
Odpowiadając na twoje pytanie: jawność algorytmu nie jest problemem, ale jawność klucza szyfrowania już tak. A skoro klient ma zarówno program szyfrujący jak i deszyfrujący to oznacza że ma wszystko potrzebne do łamania szyfru.

Jasne, mógłbyś trzymać sobie np. jakieś hashe sha-256 i potem sprawdzać czy dane nie uległy zmianie (jeśli hash jest niepoprawny to dane są zmienione), ale jesli klient ma dostęp do softu to może sobie po prostu te hashe zmienić w kodzie wedle uznania.

0
Shalom napisał(a):

Nie bardzo chyba rozumiem przed kim ty chcesz te dane chronić. Bo rozumiem że programy działają u klienta, więc czemu problemem jest jeśli klient coś sobie będzie tam zmieniał?

Na mnie ciąży odpowiedzialność (określona odpowiednimi przepisami), aby klient nie mógł manipulować zapisanymi danymi, które mogą być dowodem w sprawie.

0

No to możesz zrobić na przykład tak, że zapisujesz oprócz danych także jakieś sumy kontrolne / hashe dla tych danych. Następnie te hashe są szyfrowane za pomocą algorytmu asynchronicznego, np. RSA. Klucz prywatny dla tego RSA masz tylko ty. W efekcie w razie potrzeby możesz zdekodować hashe i sprawdzić czy dane nie zostały zmanipulowane, a jednocześnie klient nie jest w stanie nic zrobić, bo dysponuje tylko kluczem publicznym. Oczywiście to działa przy zalożeniu że szyfrujesz to jakimś długim kluczem oczywiście!

Ewentualnie mógłbyś dzielić dane na paczki i szyfrować za pomocą RSA całe zestawy danych, ale oprócz tego trzymać je też w postaci jawnej. Wizualiazcja korzysta z tej postaci jawnej, a postać zaszyfrowana jest "na wszelki wypadek" jeśli będzie trzeba sprawdzić czy ktoś nie zmienił danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0