Kryptografia w budownictwie


Jednym z haseł, które zostało umieszczone w Manifeście DCNavigator, jest chęć zaszczepiania w ludziach (a w szczególności inżynierach) ciekawości i chęci do samorozwoju. Nie poruszam jednak wątku kryptografii wyłącznie, aby zachęcić do samorozwoju, lecz aby pokazać jej praktyczne zastosowanie w budownictwie. Na naszym blogu zachęcamy do poprawy wydajności procesów inwestycyjnych, w szczególności poprzez cyfryzację. Jednocześnie staramy się uwrażliwiać naszych czytelników na zagrożenia związane z jej nieprzemyślanym wdrożeniem.

Nas – inżynierów, dotkliwie uwiera powielanie tej samej pracy, dlatego dane, które są zebrane cyfrowo, chętnie wykorzystalibyśmy wielokrotnie. Myślę, że wielu inżynierów, którzy zaczęli pracować na danych cyfrowych, chciałoby się raz na zawsze pozbyć papierowych dokumentów.

Rodzi to jednak pewne zagrożenia natury dowodowej w przypadku sporu. Spotkałem się ostatnio z sytuacją, w której wykonawca postanowił zdigitalizować pewien proces u siebie w przedsiębiorstwie. Zakładam, że wszystko działało bez zarzutu, aż do momentu, kiedy ten wykonawca chciał wykazać stan faktyczny na podstawie zgromadzonych dokumentów. Wnikliwa analiza wykazała, że zamówił system, który nie tylko pozwalał na dowolną manipulację zgromadzonymi danymi, lecz dodatkowo nie przechowywał informacji o tym kto, kiedy, dlaczego i w jaki sposób zmienił wprowadzone do systemu dane. Co więcej, w toku sprawy wypłynęły dokumenty, które przeczyły wiarygodności zebranych danych. Okazało się, że dane pieczołowicie gromadzone od kilku lat, są zupełnie nieprzydatne.

Jak można było zapobiec tej sytuacji? Przede wszystkim warto byłoby zadbać o rejestrację wprowadzanych zmian, a jeśli było to zbyt skomplikowane, to prostszym do wdrożenia rozwiązaniem, a spełniającym cechy wiarygodności, byłoby przechowywanie informacji o ostatniej edycji, tj. kiedy i przez kogo był edytowany. Dla bezpieczeństwa można było przechowywać w osobnej tabeli dane kryptograficzne. Kryptografia, dla osoby, która nigdy nie miała z nią styczności, wydaje się skomplikowanym zagadnieniem. Nie jest jednak trudna w implementacji. Prawdopodobnie każdy język programowania posiada funkcję kryptograficzną np. algorytm hash. Algorytm hash ustala ciąg znaków, który w bezpieczny sposób pozwala na weryfikację, że dane przechowywane w pliku nie zostały zmodyfikowane. Drugim zastosowaniem algorytmu hash jest porównanie czy dwa pliki (zestawy danych) są identyczne. Jeśli algorytm hash daje dokładnie taki sam zestaw znaków to oznacza, że pliki są identyczne / nie zostały zmodyfikowane. Jednocześnie algorytm hash pozwala na zmianę nazwy pliku i rozszerzenia bez wpływu na generowany ciąg znaków zabezpieczających. Algorytm hash w rozwiązaniach komercyjnych wykorzystują się np. podpisy cyfrowe.

Przejdźmy do przykładu. Posłużę się językiem PowerShell. Algorytmy hash, jak wcześniej wspomniałem, tworzą ciąg znaków w celu zabezpieczenia dowolnego zestawu danych przed manipulacją. Można nimi zabezpieczać nie tylko pliki, lecz również tekst. Korzystając z instrukcji pozyskałem ciąg znaków „7A4C591922EEC29664BBB2B99A5C64FC5F66CFD6D8AD3DBA316BE4095900CB0E” zabezpieczających tekst „DCNavigator”. Już sama zamiana jednej litery wielkiej na małą sprawia, że wygenerowany ciąg znaków zmienia się na „3AB7AA52C2C25A358BED4A7B389123BCF0F80E8229874C6E1E7FDEBFF31AF80D”. Wygenerowane ciągi znaków odbiegają tak dalece od siebie, że takie zabezpieczenie uznaje się za niemożliwe do złamania.

Czy ten problem był trudny do rozwiązania w trakcie projektowania systemu? Pewnie nie. Problemem jest ustalenie do czego będą potrzebne dane w przyszłości. Planując proces cyfryzacji należy przemyśleć wszelkie możliwe scenariusze wykorzystania danych i odpowiednio zaprojektować proces zabezpieczania danych, które mogą okazać się w przyszłości szczególnie istotne.

Michał Siejda

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *