2008-11-19 9 views
5

Chcę móc utworzyć plik, przekazać go użytkownikowi końcowemu, ale uniemożliwić mu modyfikację pliku.Tworzenie plików niemodyfikowalnych

Oczywiście, nie mogę powstrzymać nikogo od modyfikacji pliku - więc moim podejściem jest wykrywanie i odrzucanie pliku, jeśli jest zmodyfikowany.

Moim zamiarem jest wygenerowanie solonego skrótu z zawartością pliku i dołączenie go do pliku. Podczas czytania suma kontrolna jest weryfikowana przed odczytaniem reszty pliku. Wadą tego jest to, że muszę rozprowadzić ustaloną "sól" w pliku wykonywalnym, który odczytuje plik. Oczywiście mogę go w pewnym stopniu zaciemnić, ale to wciąż wydaje się słabym ogniwem.

Czy istnieją lepsze metody rozwiązania tego problemu?

Odpowiedz

13

Chcesz dołączyć digital signature do dokumentu. Jest to obszar, który został obszernie zbadany. Mówiąc krótko, możesz z dużą dozą pewności upewnić się, że plik nie został zmieniony, ale nie możesz uniemożliwić użytkownikowi ingerowania w niego przez .

(Porównanie z branży muzycznej nie jest w pełni aktualna, ponieważ chcą, aby ludzie z kopiowania plik, a także, co jest o wiele trudniejszy problem.)

1

Nie, jeśli chcesz uzyskać 100% rozwiązanie. Wystarczy spojrzeć na przemysł filmowy i muzyczny. Od wielu lat próbowali i zawiedli :)

Myślę, że twoje rozwiązanie jest wystarczająco dobre. Aby utrudnić modyfikowanie pliku, możesz go zaszyfrować, ale nie może go odczytać, więc zadziała tylko wtedy, gdy jest to ograniczenie ok.

+0

Nie próbuje powstrzymać ludzi przed kopiowaniem pliku tylko przed jego zmianą. –

+0

Wiem, ale jest równie bezużyteczny. –

0

W zależności od rodzaju pliku, który chcesz chronić, możesz użyć narzędzia do zarządzania dokumentami. Adobe PDF ma na to narzędzia. Ponadto, jeśli hostujesz swoją aplikację na serwerze aplikacji lub serwerze internetowym, użytkownicy nie mają dostępu do kodu ani go modyfikować. W ten sposób możesz mieć bazę danych skrótów po stronie serwera, plików, które chcesz chronić.

Oczywiście ochrona jest tak dobra, jak wiele czasu i wysiłku użytkownicy chcieliby (lub mogą) zainwestować w zerwanie ochrony.

4

Jeśli aplikacja działa na komputerach użytkownika, mogli zawsze załatać binarny więc nawet nie zrobić weryfikację, czyniąc całą swoją ciężką pracę bezużyteczną :-)

Nawet rozwiązanie po stronie serwera można ominąć przez węsząc ruch. Więc musisz je połączyć i użyć SSL. A potem po prostu załatali plik binarny, jak powyżej, i tak to się dzieje. Więc stosujesz różne środki, aby zaciemnić twój plik binarny, a twoi użytkownicy usuwają dezasembler taki jak IDA PRO.

Pytanie, które chciałbym zadać sobie sam, gdybym był na twoim stanowisku, brzmiałoby: "Czy gdybym wziął udział w wyścigu zbrojeń z użytkownikami, czy wygrałbym?". Jeśli odpowiedź brzmi "nie", nie stracę czasu.

0

To co hashe MD5 i CRC są dla, i dlatego sprawdzasz pobrane pliki z Internetu przed ich plikiem md5, aby upewnić się, że nie był on highjacked na trasie.

Anyways myślę Roddy używa C++, więc mogę polecić boost :: CRC jego bardzo szybki i niewielki narzut, także nie trzeba zaszyfrować plik tamtędy

+0

Masz rację, używam C++. Ale każdy może wygenerować nowy skrót MD5 ... Moim problemem jest uniemożliwienie edycji pliku, odtworzenie hasza i tym samym sprawienie, by plik wyglądał na autentyczny. Podejście do podpisu cyfrowego wydaje się być najlepszym rozwiązaniem. – Roddy

1

za troskę o dystrybucji hash .. .Dobrą praktyką jest utworzenie skrótu i ​​zaszyfrowanie go za pomocą pary kluczy prywatny-publiczny. I musisz tylko dystrybuować klucz publiczny. W ten sposób mogą je przeczytać, ale nie mogą modyfikować ani tworzyć nowych.

Proponuję użyć podpisu cyfrowego zgodnie z sugestią JesperE. Proces jest standardowy, znajdziesz wiele przykładów demonstrujących to.

3

Użyj podpisu cyfrowego. Podpis to hasz zaszyfrowany przy użyciu szyfrowania publicznego i prywatnego. Twoja aplikacja zawiera tylko klucz publiczny. Ten klucz służy do odszyfrowania skrótu, a następnie wartość skrótu jest zweryfikowana. Aby "poprawić" hasz po modyfikacji pliku, użytkownik musi obliczyć nowy skrót, zaszyfrować go za pomocą klucza prywatnego i zamienić stary na końcu pliku. Problem: Nie ma klucza prywatnego. Klucz prywatny nie znajduje się w Twojej aplikacji. Klucz prywatny nie jest wysyłany nigdzie z twoją aplikacją. Twoja aplikacja ma tylko tę publiczną. Jeśli go zaszyfruje za pomocą publicznego, nie odszyfruje go publicznie, więc jest to bezużyteczne. Klucz prywatny znajduje się na komputerze i nikt nie ma do niego dostępu.

1

Nawet jeśli użytkownicy załatają własne pliki binarne, aby upewnić się, że ich edytowana kopia pliku działa poprawnie, jego zmodyfikowana kopia nadal nie będzie działać na niezałatanych komputerach. Jaki jest cel zapobiegania tej edycji?

Na marginesie użytkownicy mają mniej problemów z edytowaniem plików binarnych niż zwykłe pliki tekstowe. Co więcej, użytkownicy są mniej podatni na irytację, jeśli przekażesz im plik binarny, niż wtedy, gdy przekażesz im plik tekstowy z sumą kontrolną, zakładając, że mają uzasadniony powód, by chcieć go edytować i może, patrząc na plik, powiedzieć to byłoby to łatwe, gdybyś nie dodał sumy kontrolnej lub czegoś podobnego.

0

Kim są użytkownicy i jak bardzo będą próbować zmienić plik. Jeśli Twoi użytkownicy są w stanie znaleźć sól dodawaną do twojego hasha, mogą prawdopodobnie znaleźć klucz publiczny w kodzie, zmienić go na klucz publiczny, który sami wygenerowali, i obliczyć podpis zmodyfikowanego pliku za pomocą swojego klucza prywatnego. Poszedłem na zaciemnianie soli.

Alternatywą jest jakiś system online, który dodaje ogromnego poziomu komplikacji i jest zwykle podatny.

Zobacz HMAC dla skodyfikowanej metody używania "soli", gdy myślisz (gdzie zamiast tego sól nazywa się kluczem).

Powiązane problemy