Помните ли вы исходное значение слова «вирус»? Да-да, я имею в виду тот самый биологический объект, в честь которого получили свое название зловредные компьютерные программы, помещающие свой код внутрь других файлов с целью воспроизводства и распространения.
Вполне вероятно, что в обозримом будущем значение этого слова применительно к компьютерным данным получит свое оригинальное значение. Дело в том, что этим летом исследователям из Microsoft и Университета Вашингтона удалось сделать то, что не удавалось сделать до них никому, — записать 200 Мбайт данных в виде последовательности нуклеотидов, входящих в состав искусственно созданной ДНК.
Какое отношение к этому имеют вирусы? Да самое прямое! Вирусы внедряют свой генетический код в ДНК клеток пораженных организмов, заставляя их воспроизводить себя, а не полезные для организма белки (напомню, что жизнь, как учили нас классики, — это форма существования белковых тел).
Особенно агрессивные вирусы настолько мешают нормальной работе пораженного ими организма, что в итоге приводят к его смерти. Точно так же особенно неприятный вредоносный код может привести к невозможности использовать пораженную информационную систему.
Поэтому, раз уж человечество начинает активно записывать информацию в виде ДНК, пожалуй, стоит задуматься о защите информации на «аппаратном уровне». Для начала расскажем вам, как устроено «железо», с которым нам предстоит иметь дело.
Как устроена ДНК
ДНК, или дезоксирибонуклеиновая кислота, — это носитель генетической информации и по совместительству — самая большая молекула в нашем организме. Если использовать аналогии из сферы информационных технологий, это такой загрузочный образ операционной системы. На основании ДНК синтезируются РНК — рибонуклеиновые кислоты, играющие роль программ для синтеза белков («исполняемых модулей» в компьютерных терминах), из которых и состоят все живые организмы и которые отвечают за протекание физиологических процессов на молекулярном уровне.
Все признаки организма, начиная от цвета волос и глаз и заканчивая предрасположенностью к наследственным заболеваниям, записаны в ДНК. Записаны они в виде последовательности нуклеотидов — молекулярных блоков, содержащих в себе всего лишь четыре разновидности азотистых оснований: аденин, гуанин, тимин, цитозин. Это такие биологические биты.
Как видите, в отличие от человека, матушка-природа использовала не двоичную систему счисления, а четверичную. Кстати, природа хорошо позаботилась о защите от сбоев — у большинства живых существ ДНК представляет собой не одну, а две цепочки нуклеотидов, закрученные друг вокруг друга как витая пара в двойную спираль.
Держатся эти две цепочки друг за друга водородными связями, которые образуются только в том случае, если с каждой из сторон расположен строго определенный нуклеотид, — таким образом автоматически гарантируется взаимное соответствие информации в каждой из двух спиралей. На этом и основан первый механизм защиты от сбоев: при расшифровке или репликации ДНК используется одна из двух спиралей, а вторая играет роль контрольной — на тот случай, если вдруг какая-то последовательность нуклеотидов, кодирующих тот или иной генетический признак, оказалась в одной из спиралей повреждена.
Кроме взаимного соответствия двух цепочек нуклеотидов кодирование наследственных признаков дополнительно производится с применением избыточного алгоритма — можно сказать, что каждый наследственный признак, записанный в виде последовательности биологических битов — оснований, дополнительно снабжен контрольной суммой.
За те полвека, что прошли с момента открытия ДНК, эти последовательности довольно неплохо изучены, что позволяет любому желающему заказать расшифровку основных генетических признаков собственной ДНК онлайн, причем не только в ближайшей лаборатории, но и в Интернете — с помощью сервиса 23andme и аналогичных ему.
Как считывают ДНК
Теперь о том, как информацию ДНК считывают. Изначально в распоряжении ученых были такие методы, как рентгеновский структурный анализ, семейство спектроскопических методов и масс-спектрометрия. Все эти методы неплохо работают для небольших молекул, состоящих из двух, трех, четырех атомов, но все становится сильно сложнее, когда количество атомов действительно велико.
Однако ДНК не зря считают самой большой молекулой в нашем организме — в человеческой ДНК из гаплоидной клетки содержится порядка 3 млрд пар оснований. Ее молекулярная масса на несколько порядков больше молекулярной массы самого крупного из известных науке белков.
В общем, это неимоверно огромная куча атомов, поэтому на расшифровку данных при использовании классических методов считывания даже сегодня, с применением суперкомпьютеров, легко уходят месяцы, а то и годы.
Но ученым удалось придумать метод секвенирования, который сильно ускоряет процедуру. Основная его идея — разбиение одной длинной последовательности атомов на много коротких фрагментов, которые можно анализировать параллельно, тем самым кратно увеличивая скорость расшифровки.
Для секвенирования биологи используют «молекулярные машины» — специальные белки (энзимы) полимеразы. Основная функция этих белков — копирование ДНК. Делают они это, последовательно проходя вдоль спирали и собирая из нуклеотидов идентичную молекулу.
Но поскольку нам нужна не просто полная копия ДНК, а нарезка на короткие фрагменты, то дополнительно используют так называемые праймеры и маркеры — соединения, сообщающие полимеразе, где начать клонировать, а где закончить.
Праймеры представляют собой четко определенную последовательность нуклеотидов, которая присоединяется к цепочке лишь там, где встречает «ответную» комбинацию. Полимераза находит праймер, «садится» на цепочку нуклеотидов и начинает достраивать ее из компонент, которые помещены в раствор. И делает это до тех пор, пока не встретит маркер — модифицированный нуклеотид, на котором дальнейшая «достройка» цепочки обрывается.
Определенную проблему представляет тот факт, что в рамках этого метода невозможно указать точные «адреса» начала и конца клонирования, а указать можно лишь те последовательности «битов», с которых начинается и которыми заканчивается выделение фрагмента.
Создан язык программирования клеток с помощью молекул ДНК http://t.co/AgiFAcy5o8 #habr
— Хабр (@habr_com) October 1, 2013
Если говорить в компьютерных терминах, то происходит это следующим образом. Допустим, у нас есть комбинация бит 1101100001010111010010111. Предположим, что нашим праймером является комбинация 0000, а маркером — комбинация 11. В результате секвенирования мы получим следующий набор фрагментов, в порядке убывания их вероятности: 0000101011, 00001010111, 0000101011101001011, 00001010111010010111.
Варьируя праймер и маркер, мы в конечном итоге переберем все возможные комбинации бит, считаем их, а после считывания восстановим из отдельных фрагментов всю последовательность.
Выглядит немного сложно и неочевидно, но это действительно работает и обеспечивает неплохую скорость, поскольку в итоге все необходимые действия можно делать параллельно. Неплохая скорость по меркам биологов — это несколько часов. Существенно лучше вышеупомянутых месяцев или даже лет, но по меркам ИТ, скажем так, многовато.
ДНК и хранение произвольной информации
Научившись за полвека неплохо считывать информацию из ДНК, оставалось научиться синтезировать цепочки нуклеотидов. Тут надо уточнить, что исследователи Microsoft были не первыми, кто записал информацию в виде двойной спирали ДНК. Первыми были ученые из европейского института биоинформатики (EMBL-EBI), несколько лет назад записавшие 739 Кбайт.
«ДНК-накопитель»: https://t.co/p5hGLRuJDC. Microsoft удалось записать 200 МБ данных на нитях синтетической ДНК. pic.twitter.com/RZkMyMEBEC
— Хабр Научпоп (@habr_popsci) July 8, 2016
В чем же новизна достижений Microsoft? Во-первых, в существенном увеличении объема записи — до 200 Мбайт. Уже довольно близко к тем 750 Мбайт, которые содержатся в ДНК человека. Впрочем, главная инновация состоит в том, что исследователи предложили способ, позволяющий считывать не всю ДНК целиком, а ее отдельный участок — порядка 100 битов-оснований за одну операцию.
А добились они этого путем использования таких пар праймеров и маркеров, которые обеспечивают копирование полимеразой — и последующее считывание — блока данных строго определенного размера, расположенного по определенному адресу относительно начала «файла» — цепочки нуклеотидов. Это все еще не совсем полный аналог произвольного доступа к памяти, но довольно близкое к нему поблочное чтение.
Пока ученые считают, что основной нишей подобного использования ДНК могут стать модули памяти высокой плотности, предназначенные для длительного хранения информации. В этом есть смысл — плотность записи данных в лучших современных образцах флеш-памяти достигает десятков квадриллионов (~1016) бит на кубический сантиметр, в то время как плотность хранения данных в ДНК на три порядка выше: десятки квинтиллионов (~1019) бит на кубический сантиметр.
Дополнительное преимущество состоит в том, что молекулы ДНК достаточно стабильны и, с учетом алгоритмов коррекции ошибок, позволяют хранить информацию годами, а то и веками.
Microsoft закупила 10 млн нитей синтетической ДНК: https://t.co/d93pe8IWQn. Будут экспериментировать с долговременным хранением данных.
— Хабр Научпоп (@habr_popsci) April 28, 2016
Вернемся к вирусам
Что это означает с точки зрения информационной безопасности? А означает это, что целостности записанной в таком видео информации угрожают организмы, которые специализируются на порче данных уже миллиарды лет, — вирусы.
Конечно, ожидать появления специальных генно-модифицированных вирусов, заточенных «охотиться» именно на подобные ДНК, в которые записана какая-то информация, не стоит. Просто потому, что модифицировать данные, внедряя в них вредоносный код, проще, пока эти данные представлены в чисто цифровом виде — еще до записи в ДНК.
А вот надо ли будет думать о защите от обычных вирусов, работая с таким запоминающим устройством, — вопрос открытый. Ведь если в раствор с ДНК попадет, например, вирус насморка, полимераза, скорее всего, будет реплицировать и его тоже.
Поэтому как бы не пришлось, прочитав ДНК-чип лет через десять после его записи, вспоминать, не чихала ли лаборантка во время записи важного архивного документа.