Wątek przeniesiony 2020-11-13 15:33 z C# i .NET przez cerrato.

W jaki sposób odzyskać zmodyfikowany obraz?

0

Cześć!

Zastanawiam się czy istnieje metoda, dzięki której można przywrócić zmodyfikowany obraz do pierwotnego stanu? Moje pytanie związane jest z programem stenograficznym, który aktualnie szyfruje i deszyfruje dane z wybranego obrazu, lecz nurtuje mnie pewna kwestia jak zabezpieczyć się przed modyfikacją obrazu który posiada zaszyfrowane dane, tak żeby nie utracić zaszyfrowanych danych. Przykładowo, otrzymuję zaszyfrowany obraz, wysyłam go komuś, on na nim coś narysuje w paincie, i w tym momencie obraz traci dane. Czy jest jakiś algorytm który przed deszyfracją by sprawdzał obraz pod względem modyfikacji i je cofał? Albo może zrobić zabezpieczenie tylko w postaci sprawdzania sumy kontrolnej przed deszyfrowaniem, dowiadując się w ten sposób czy obraz nie jest uszkodzony? Za wszelkie pomysły będę bardzo wdzięczny. Aplikacja pisana jest z wykorzystaniem technologii C# i WPF.

5

Nie sądzę. Dałoby się to zrobić, ale musiałby takie działania wspierać sam edytor grafik/program graficzny.
Ciężko oczekiwać od zwykłego programu do grezbania w grafice (jakiś Paint, GIMP czy Photoshop), żeby podczas otwierania sprawdzał, czy ten plik nie zawiera jakichś zaszyfrowanych danych. Zwłaszcza, że sposobów zapisania ukrytych treści w obrazie może być praktycznie nieskończona ilość.

O ile plik z grafiką nie jest w jakiś sposób uszkodzony, to program graficzny go zaczyta, potem pozwoli dokonać modyfikacji i jeśli zmienione obszary obrazka będą się pokrywać z tymi, w których jest zakodowana wiadomość, to zostaną nadpisane. Ponadto jest szansa, że nawet jeśli tamtych rejonów nie tkniesz, to i tak podczas zapisu obrazka zostanie przeprowadzona kompresja całości, przez co utracisz swój szyfr.

Dla bezpieczeństwa przyjmij, że jakiekolwiek tajne wiadomości osadzone w pliku graficznym, po jego edycji i/lub zapisie z poziomu programu graficznego zostaną utracone.

0

Dziękuję za szybką odpowiedź. Czyli raczej marne szanse na znalezienie algorytmu w c# który by korygował jakkolwiek wprowadzone zmiany w obrazie? Szczerze mówiąc właśnie to mnie nurtowało, ponieważ tak się zastanawiałem czy można jakkolwiek zabezpieczyć się przed utratą danych z tego obrazu, ewentualnie jakby doszło do tej utraty, czy można jakoś je przywrócić, ale widzę szanse marne.
A myśląc w inną stronę, jakbym nie chciał odzyskiwać zmodyfikowanego obrazu do postaci pierwotnej, może istnieje możliwość, żeby tworzony obraz, był tylko do odczytu, usunąć mu możliwość modyfikacji, a także dodać w jakiś sposób do metadanych sumę kontrolną, którą by program sprawdzał przed rozpoczęciem deszyfrowania? Bo jeżeli dobrze myślę suma kontrolna mienia się zawsze z każdą modyfikacją?
Chyba ze istnieje jakiś inny sposób, sprawdzenia poprawności pliku, czy był modyfikowany bądź nie, z wykorzystaniem c#, chętnie je poznam.

4

znalezienie algorytmu w c#

Język czy technologia nie ma tutaj żadnego znaczenia.

korygował jakkolwiek wprowadzone zmiany w obrazie

Jak pisałem - kiepsko to widzę. Takie zmiany w obrazie mogą powstać przynajmniej w 2 sytuacjach:

  • zmiany podczas zapisu, wynikające z kompresji stratnej. Zauważ, że większość formatów graficznych (np. JPG) to jest kompresja stratna. W zamian za utratę części jakości i informacji zawartych w pliku, zyskujesz o wiele mniejszy rozmiar. Możesz zrobić eksperyment - zrób jakiś plik BMP, potem zapisz go jako PNG, a następnie przekonwertuj ponownie na BMP. Obrazy pierwsze i ostatnie będą się od siebie różnić. Tutaj jeszcze można by było spróbować odzyskać zaszyfrowane treści, ale kiepsko to widzę
  • ktoś coś narysował w miejscu, w którym była zaszyfrowana wiadomość. Pierwotna treść zostaje nadpisana, nie ma szans na odzyskanie.

żeby tworzony obraz, był tylko do odczytu

Nie kojarzę plików graficznych, które posiadają taką opcję. Zwłaszcza ta uwaga dotyczy tych bardziej popularnych - typu JPG. Można takie zabezpieczenia dawać np. do PDF, ale to już nie jest plik graficzny.

3

Jedyne rozwiązanie jakie widzę, to kodowanie danych w obrazie w sposób redundantny, tak, żeby ewentualne modyfikacje zniszczyły tylko jedną z kopii danych.

0

@cerrato: dziękuję bardzo za odpowiedź, w takim wypadku nie zostaje mi nic, jak zabezpieczyć się przed ewentualną utratą danych w postaci jakiegoś komunikatu, bo plików pewnie raczej nie dam rady modyfikować i odzyskiwać. Z kwestii technicznych, to plikiem wynikowym zaszyfrowanym, zawsze jest plik PNG, aczkolwiek pewnie to wiele nie zmienia odnośnie odzyskiwania danych.

@Freja Draco ciekawa propozycja, a tak z ciekawości jakbym mógł użyć takiej metody w algorytmie LSB, zapisać każdy bit wiadomości podwójnie obok siebie, czy raczej zapisać wszystkie informacje wiadomości, a później zapisać je ponownie? Bo jeżeli dobrze rozumiem redundancja to nadmiarowość, czyli bym musiał powielić informacje podczas szyfrowania.

Jeszcze mam takie jedno pytanie, może znacie na nie odpowiedź, jest możliwość utworzenia z pliku BMP, lub PNG, pliku PDF, z którego później bym mógł otrzymać nieskompresowany plik graficzny?

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