Czy pamiętasz, skąd wywodzi się nazwa „wirus”? Tak, mam na myśli biologiczne wirusy, od których specjaliści bezpieczeństwa IT pożyczyli nazwę dla programów komputerowych, które wprowadzają własny kod do innych obiektów w celu rozmnażania i propagowania się.
Bardzo prawdopodobne, że wkrótce ten termin w technologii informacyjnej powróci do swojego pierwotnego znaczenia — badacze z firmy Microsoft oraz Uniwersytetu Waszyngtońskiego oznaczyli nowy kamień milowy w przechowywaniu danych, zapisując około 200 MB danych w postaci syntetycznego kodu DNA.
Jak to się ma do biologicznych wirusów? Analogia jest dosyć prosta — wirusy umieszczają swój kod genetyczny w kodzie DNA zainfekowanych organizmów, wskutek czego kod DNA reprodukuje wirusy, zamiast syntetyzować odpowiednie białka, które są niezbędne do życia.
Najbardziej agresywne wirusy zakłócają normalne procesy fizjologiczne do takiego stopnia, że następuje obumieranie komórek, a ostatecznie niszczony jest cały organizm. Podobnie, najbardziej agresywne szkodliwe oprogramowanie może sprawić, że zainfekowany system informatyczny stanie się całkowicie bezużyteczny, czyli „martwy”.
Ponieważ jednak ludzie zaczęli zapisywać informacje w postaci kodu DNA, może warto zacząć martwić się o ochronę tych danych na „poziomie sprzętowym”. Lecz najpierw omówimy, jak działa ten „sprzęt”.
Wnętrze kodu DNA
Kod DNA, czyli kwas dezoksyrybonukleinowy, to największe cząsteczki w naszym organizmie, a także nośnik informacji genetycznej. Ich najbliższym odpowiednikiem w świecie IT jest obraz rozruchu, który umożliwia komputerowi uruchomienie się i załadowanie systemu operacyjnego. W większości przypadków (poza pewnymi wyjątkami, które w tym poście pominę) po załadowaniu się w pamięci systemu operacyjnego komputer uruchamia moduły wykonywalne, które są potrzebne do jego działania i wykonywania tego, do czego zostały zaprogramowane. W ten sam sposób żywe komórki używają zazwyczaj kodu DNA do produkowania swoich „wykonywalnych” — sekwencji RNA (kwasów rybonukleinowych), które są odpowiedzialne za syntezę białek w celu utrzymania organizmu przy życiu i wykonywania przez niego różnych funkcji.
W kodzie DNA są przechowywane wszystkie cechy organizmu, od oczu przez kolor włosów po zaburzenia dziedziczne. Są one zakodowane w sekwencji nukleotydów — bloków molekularnych zawierających (dla większości znanych organizmów) tylko cztery odmiany zasad azotowych: adeninę, guaninę, tyminę i cytozynę. Można je określić jako „bity biologiczne”. Jak widać, matka natura użyła czwórkowego systemu liczbowego do zakodowania informacji genetycznej, tymczasem stworzone przez człowieka komputery używają kodu binarnego.
Warto wspomnieć, że kod DNA posiada wbudowaną funkcję korekcji kodu — większość znanych DNA posiada dwie nici nukleotydów, owijające się wokół siebie jak przewód skrętka w podwójnej helisie.
Te dwie nici są do siebie przymocowane za pomocą wiązań wodorowych, które powstają tylko pomiędzy ściśle określonymi parami nukleotydów — gdy się wzajemnie uzupełniają. Dzięki temu informacja zakodowana w danej sekwencji nukleotydów w jednej nici koresponduje z podobną sekwencją komplementarnych nukleotydów w drugiej nici. Tak działa mechanizm korekty kodu — po zdekodowaniu lub skopiowaniu pierwsza nić DNA jest używana jako źródło danych, a druga jako sekwencja kontrolna. W ten sposób można wykryć, czy w sekwencji nukleotydów jednej z nici, kodujących jakieś cechy genetyczne, nastąpiło uszkodzenie.
Ponadto cechy genetyczne są zakodowane w sekwencjach nukleotydowych przy pomocy algorytmów kodowania nadmiarowego. W skrócie można to opisać tak: wyobraź sobie, że każdej cesze dziedzicznej, napisanej w postaci sekwencji nukleotydów, towarzyszy suma kontrolna.
Ta sekwencja nukleotydów kodująca cechy genetyczne, czyli geny, była szeroko badana przez 50 lat do chwili odkrycia kodu DNA. Dzisiaj można odczytać swój kod DNA w wielu laboratoriach, a nawet przez internet — na przykład w serwisie 23andme czy podobnych.
Jak naukowcy odczytują kod DNA?
Przez kilka stuleci naukowcy opracowywali metody określania struktury drobnych obiektów, takich jak analiza struktury promieni rentgenowskich, spektometrię mas czy rodzinę metod spektroskopowych. Całkiem dobrze sprawdzają się one w przypadku cząsteczek zawierających dwa, trzy lub cztery atomy, lecz znacznie trudniejsze jest zrozumienie wyników eksperymentalnych dla większych cząsteczek. Im więcej atomów znajduje się w cząsteczce, tym trudniej jest zrozumieć jej strukturę.
Należy przy tym pamiętać, że nie bez przyczyny kod DNA jest uważany za największą cząsteczkę: DNA z haploidalnych komórek ludzkich zawiera około 3 miliardów par zasad. Masa cząsteczkowa kodu DNA jest o kilka rzędów wielkości wyższa niż masa cząsteczkowa największego znanego białka.
Mówiąc w skrócie, to ogromna sterta atomów, więc odszyfrowanie eksperymentalnych danych uzyskanych przy pomocy klasycznych metod, nawet przy wykorzystaniu dzisiejszych superkomputerów, może zająć kilka miesięcy, a nawet lat.
Na szczęście naukowcy zaproponowali metodę sekwencjonowania, która znacznie przyspiesza ten proces. Chodzi o to, aby rozdzielić długie sekwencje zasad na wiele krótszych fragmentów, które można analizować równolegle.
W tym celi biolodzy użyli maszyn molekularnych: specjalnych białek (enzymów) o nazwie polimerazy. Zasadnicza funkcją tych białek jest kopiowanie kodu DNA poprzez przejście wzdłuż nici i zbudowanie kopii od podstaw.
Jednak nam nie jest potrzebna całkowita historia kodu DNA. Chcemy podzielić go na fragmenty i w tym celu dodajemy tzw. startery i markery — związki, które mówią polimerazie, gdzie zacząć, a gdzie i zatrzymać proces klonowania.
Startery zawierają określoną sekwencję nukleotydów, które potrafią przyłączyć się do nici DNA w miejscu, w którym odnajdzie odpowiednią sekwencję zasad komplementarności. Polimerazy znajdują startery i zaczynają klonowanie sekwencji, biorąc elementy składowe z roztworu (jak każdy życiowy proces, wszystko odbywa się w postaci płynnej). Polimerazy klonują sekwencję dotąd, aż napotkają marker: zmodyfikowany nukleotyd, który kończy proces budowania dalszej nici.
Jednak jest pewien problem. Polimerazy, nić DNA, startery, markery oraz materiał budulcowy są rozproszone w roztworze. Dlatego nie można określić dokładnego miejsca rozpoczęcia polimeraz. Można określić tylko początek i koniec fragmentu, który chcemy skopiować.
Wracając do analogii do świata IT, możemy ją zilustrować w następujący sposób. Wyobraź sobie, że nasz kod DNA jest kombinacją bitów: 1101100001010111010010111. Jeśli użyjemy 0000 jako startera oraz 11 jako markera, otrzymamy następujący zestaw fragmentów, wymienionych w kolejności prawdopodobieństwa malejącego:
0000101011,
00001010111,
0000101011101001011,
00001010111010010111.
Korzystając z różnych starterów i markerów, przejdziemy wszystkie możliwe najkrótsze sekwencje, a następnie wyznaczymy dłuższą sekwencję na podstawie informacji o tym, z czego ona się składa.
Może się to wydawać sprzeczne z intuicją i skomplikowane, lecz działa. Ponieważ mamy tu wiele procesów przebiegających równolegle, metoda ta jest stosunkowo szybka — zajmuje zaledwie kilka godzin, a nie miesiące czy lata — choć nie jest to imponujący czas z perspektywy IT.
DNA i przypadkowy losowy dostęp
Po nauczeniu się, jak odczytywać DNA, naukowcy sprawdzali, jak przeprowadzać syntezę sekwencji nukleotydów. Badacze z firmy Microsoft nie byli pierwszymi, którzy próbowali zapisać informacje w postaci sztucznego kodu DNA: kilka lat temu badacze z EMBL-EBI zakodowali 739 kilobajtów.
Praca Microsoftu przyniosła przełom z powodu dwóch wydarzeń. Po pierwsze, badacze znacząco zwiększyli objętość przechowywanych danych, do 200 MB. To już nie tak daleko do 750 MB danych, które znajdują się w każdej nici ludzkiego DNA.
Cała różnica polega na tym, że badacze zaproponowali sposób odczytywania części DNA, długich na około 100 zasad (bio-bitów), w każdym kolejnym działaniu.
Badacze osiągnęli to poprzez użycie par starterów i markerów, które umożliwiły im odczytanie określonych zestawów nukleotydów ze zdefiniowanym przesunięciem od początku nici. Nie jest to wprawdzie swobodny dostęp do pojedynczego bitu, lecz technologia jest już blisko — myślę tu o dostępie pamięci blokowej.
Według badaczy taka pamięć DNA mogłaby się sprawdzić w długoterminowych modułach pamięci o wysokiej gęstości. Zdecydowanie ma to sens: najbardziej znane próbki pamięci flash oferują gęstość na poziomie ~1016 bitów na cm kwadratowy, tymczasem szacowana gęstość dla pamięci DNA wynosi trzy rzędy wielkości więcej: ~1019 bitów na cm kwadratowy.
DNA to dosyć stabilna cząsteczka. Dzięki wbudowanym schematom kodowania nadmiarowego i korekcji błędów zapisane w niej dane pozostawałyby możliwe do odczytania nawet przez setki lat.
Powrót do wirusów
Lecz jaki to ma związek z bezpieczeństwem informatycznym? Oznacza to, że integralność przechowywanych w ten sposób informacji może być zagrożona przez organizmy wyspecjalizowane w uszkadzaniu danych od miliardów lat — wirusy.
Nie chcielibyśmy być świadkiem rozkwitu genetycznie zmodyfikowanych wirusów utworzonych w celu polowania na syntetycznie zakodowane DNA. Przez długi czas łatwiej będzie zmodyfikować dane i umieścić w nich szkodliwy kod, gdy będą one w postaci cyfrowej, czyli przed ich zapisaniem do DNA.
Pozostaje zatem otwarte pytanie, w jaki sposób można zabezpieczyć takie dane przed uszkodzeniem przez istniejące wirusy. Na przykład polimerazy z chęcią zreplikują dowolny kod DNA w roztworze: na przykład DNA popularnego wirusa grypy.
To wszystko może więc nie mieć sensu, jeśli każdy będzie kichał lub kaszlał, gdy Ty piszesz ważny plik…