watchdogpolska / feder

Obywatelskie fedrowanie danych
https://obywatelskie-fedrowanie-danych.readthedocs.io/
MIT License
18 stars 11 forks source link

Wykrywanie i usuwanie podpisów elektronicznych #1520

Open dzemeuksis opened 6 months ago

dzemeuksis commented 6 months ago

@PiotrIw , poukrywaliśmy oryginały załączników przed widokiem publicznym, zostawiając tylko zOCRowaną treść i dzięki temu można było podjąć decyzję o odsłonięciu monitoringów.

Jednak docelowo pewnie najlepiej byłoby wykrywać i usuwać podpisy elektroniczne z plików.

Zostawiam tu materiały od @ad-m , które mogą być pomocne przy analizie i realizacji tego pomysłu:

Istnieją trzy standardy podpisu elektronicznego uznawane w UE, z czego na dwóch musimy się skupić (https://pergam.in/blog/podpis-kwalifikowany-xades-pades-cades/ ):

  1. PaDES – dla plików PDF; usunięcie wymaga edycji pliku PDF
  2. XaDES
    • otoczony - dla plików XML; podpis zawarty w pliku XML wraz z oryginalnymi danymi; usunięcie wymaga ekstrakcji oryginalnego pliku z pliku XML
    • otaczający – dla dowolnych formatów plików; podpisany plik ma format XML i zawiera w sobie oryginalny plik bez podpisu; usunięcie podpisu wymag tylko wypakowania oryginalnego podpisu
    • zewnętrzny – dla dowolnych formatów plików; podpis jest w osobnym pliku do oryginalnego i zawiera tylko sumę kontrolną oryginalnego pliku; usunięcie podpisu wymaga tylko nie udostępniania pliku podpisu do pobrania

Operacje edycji XML (usunięcie podpisu z XaDES otoczony; wypakowanie z XaDES otaczający) są prostymi zmianami do przeprowadzenia przez każdego programistę.

W przypadku PDF to zrozumienie tego formatu jest mniej popularne, ale też myślę, że nie jest to coś strasznego. Na początek warto mieć świadomość, że PDF jest formatem tekstowym.

Tu jest przykład pliku PDF z komentarzami dla minimalnego dokumentu "Hello world": https://brendanzagaeski.appspot.com/0004.html

Tu jest zwięzłe wprowadzenie w założenia formatu: https://medium.com/aia-sg-techblog/basic-structure-of-portable-document-format-pdf-79db682579c9

Tu trochę bardziej praktycznie: https://blog.idrsolutions.com/?s=%22Make+your+own+PDF+file%22

Tu jest narzędzie, które może być pomocne w QA, że podpis został usunięty: https://pdfcrowd.com/inspect-pdf/

W zakresie implementacji to są biblioteki, które umożliwiają parsowanie PDF w Pythonie, więc zapewne tylko odszukać obiek typu "Sig" i go usunąć / zastąpić V stałą przed ponownym zapisem.

image https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf

Jeżeli dalsze informacje są potrzebne – służę uprzejmie. Mogę nawet napisać jakąś generyczną funkcję do tego, jeżeli trzeba.

To oczywiśćie nie gwarantuje ochrony danych, które zawarte są w dokumentach jako tekst lub grafika (nieskuteczna lub brak anonimizacji), a mówię tylko o danych, które są w podpisie elektronicznym.

ad-m-ss commented 6 months ago

@PiotrIw daj znać na którym odcinku potrzebujesz pomocy :)

dzemeuksis commented 5 months ago

Uzupełniając o ekspertyzy prawne:

Brak przeszkód w usuwaniu podpisów. Nie powinniśmy ingerować w samą treść informacji, ale usunięcie podpisu nie stanowi problemu - mamy zresztą ku temu uzasadnienie. Nie powinniśmy natomiast podpisywać dokumentów swoimi podpisami (to nie nasze oświadczenie wiedzy/woli).

Ale tak, dobrze by było oznaczyć jakoś takie pliki, żeby było wiadomo, że został z niego usunięty podpis.

PiotrIw commented 5 months ago

@ad-m-ss Adam, super by było jakbyś dopisał taka funkcję. Wg mnie najlepiej ją wywoływać w "feder/virus_scan/tasks.py" przed wykonaniem skanowania. @dzemeuksis - oznaczenie można dodać jako info po wywołaniu skanowania AV np: "Usunięto podpis i przeskanowano AV"