русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Математическая модель стегосистемы


Дата добавления: 2013-12-23; просмотров: 1349; Нарушение авторских прав


Стегосистема может быть рассмотрена как система связи [8].

Алгоритм встраивания ЦВЗ состоит из трех основных этапов: 1) генерации ЦВЗ, 2) встраивания ЦВЗ в кодере и 3) обнаружения ЦВЗ в детекторе.

1) Пусть есть множества возможных ЦВЗ, ключей, контейнеров и скрываемых сообщений, соответственно. Тогда генерация ЦВЗ может быть представлена в виде

 

, , (1.2)

 

где - представители соответствующих множеств. Вообще говоря, функция может быть произвольной, но на практике требования робастности ЦВЗ накладывают на нее определенные ограничения. Так, в большинстве случаев, , то есть незначительно измененный контейнер не приводит к изменению ЦВЗ. Функция обычно является составной:

 

где и , (1.3)

 

то есть ЦВЗ зависит от свойств контейнера, как это уже обсуждалось выше в данной главе. Функция может быть реализована при помощи криптографически безопасного генератора ПСП с в качестве начального значения.

Для повышения робастности ЦВЗ могут применяться помехоустойчивые коды, например, коды БЧХ, сверточные коды [9]. В ряде публикаций отмечены хорошие результаты, достигаемые при встраивании ЦВЗ в области вейвлет-преобразования с использованием турбо-кодов. Отсчеты ЦВЗ принимают обычно значения из множества , при этом для отображения может применяться двоичная относительная фазовая модуляция (BPSK).

Оператор модифицирует кодовые слова , в результате чего получается ЦВЗ . На эту функцию можно не накладывать ограничения необратимости, так как соответствующий выбор уже гарантирует необратимость . Функция должна быть выбрана так, чтобы незаполненный контейнер , заполненный контейнер и незначительно модифицированный заполненный контейнер порождали бы один и тот же ЦВЗ:

, (1.4)

 

то есть она должна быть устойчивой к малым изменениям контейнера.



2) Процесс встраивания ЦВЗ в исходное изображение может быть описан как суперпозиция двух сигналов:

 

, , (1.5)

 

где - маска встраивания ЦВЗ, учитывающая характеристики зрительной системы человека, служит для уменьшения заметности ЦВЗ;

- проектирующая функция, зависящая от ключа;

знаком обозначен оператор суперпозиции, включающий в себя, помимо сложения, усечение и квантование.

Проектирующая функция осуществляет «распределение» ЦВЗ по области изображения. Ее использование может рассматриваться, как реализация разнесения информации по параллельным каналам. Кроме того, эта функция имеет определенную пространственную структуру и корреляционные свойства, использующиеся для противодействия геометрическим атакам (см. гл.3).

Другое возможное описание процесса внедрения получим, представив стегосистему как систему связи с передачей дополнительной информации (рис.1.4) [8]. В этой модели кодер и декодер имеют доступ, помимо ключа, к информации о канале (то есть о контейнере и о возможных атаках). В зависимости от положения переключателей А и Б выделяют четыре класса стегосистем (подразумевается, что ключ всегда известен кодеру и декодеру).

I класс: дополнительная информация отсутствует (переключатели разомкнуты) – «классические» стегосистемы. В ранних работах по стеганографии считалось, что информация о канале недоступна кодеку. Обнаружение ЦВЗ осуществлялось путем вычисления коэффициента корреляции между принятым стего и вычисленным по ключу ЦВЗ. Если

 
 


 

коэффициент превышал некоторый порог, выносилось решение о присутствии ЦВЗ. Известно, что корреляционный приемник оптимален лишь в случае аддитивной гауссовой помехи. При других атаках (например, геометрических искажениях) эти стегосистемы показывали удручающие результаты.

II класс: информация о канале известна только кодеру (А замкнут, Б разомкнут). Эта конструкция привлекла к себе внимание благодаря статье [10]. Интересной особенностью схемы является то, что, будучи слепой, она имеет ту же теоретическую пропускную способность, что и схема с наличием исходного контейнера в декодере. К недостаткам стегосистем II класса можно отнести высокую сложность кодера (необходимость построения кодовой книги для каждого изображения), а также отсутствие адаптации схемы к возможным атакам. В последнее время предложен ряд практических подходов, преодолевающих эти недостатки. В частности, для снижения сложности кодера предлагается использовать структурированные кодовые книги, а декодер рассчитывать на случай наихудшей атаки.

III класс: дополнительная информация известна только декодеру (А разомкнут, Б замкнут). В этих схемах декодер строится с учетом возможных атак. В результате получаются робастные к геометрическим атакам системы. Одним из методов достижения этой цели является использование так называемой опорного ЦВЗ (аналог пилот-сигнала в радиосвязи). Опорный ЦВЗ – небольшое число бит, внедряемые в инвариантные к преобразованиям коэффициенты сигнала. Например, можно выполнить встраивание в амплитудные коэффициенты преобразования Фурье, которые инвариатны к аффинным преобразованиям. Тогда опорный ЦВЗ «покажет», какое преобразование выполнил со стего атакующий. Другим назначением пилотного ЦВЗ является борьба с замираниями, по аналогии с радиосвязью. Замираниями в данном случае можно считать изменение значений отсчетов сигнала при встраивании данных, атаках, добавлении негауссовского шума и т.д. В радиосвязи для борьбы с замираниями используется метод разнесенного приема (по частоте, времени, пространству, коду). В стеганографии же используется разнесение ЦВЗ по пространству контейнера. Пилотный ЦВЗ генерируется в декодере на основе ключа.

IV класс: дополнительная информация известна и в кодере и в декодере (оба ключа замкнуты). Как отмечено в [9], по всей видимости все перспективные стегосистемы должны строиться по этому принципу. Оптимальность этой схемы достигается путем оптимального согласования кодера с сигналом-контейнером, а также адаптивным управлением декодером в условиях наблюдения канала атак.

3) Также как в радиосвязи наиболее важным устройством является приемник, в стегосистеме главным является стегодетектор. В зависимости от типа он может выдавать двоичные либо М-ичные решения о наличии/отсутствии ЦВЗ (в случае детектора с мягкими решениями). Рассмотрим вначале более простой случай «жесткого» детектора стего. Обозначим операцию детектирования через . Тогда

 

, . (1.6)

 

В качестве детектора ЦВЗ обычно используют корреляционный приемник, изображенный на рис.1.5.

Пусть у половины пикселов изображения значение яркости увеличено на 1, а у остальных – осталось неизменным, либо уменьшено на 1. Тогда , где . Коррелятор детектора ЦВЗ вычисляет величину . Так как может принимать значения , то будет весьма мало, а будет всегда положительно. Поэтому будет очень близко к . Тогда можно воспользоваться результатами теории связи и записать вероятность неверного обнаружения стего, как дополнительную (комплементарную) функцию ошибок от корня квадратного из отношения («энергии сигнала») к дисперсии значений пикселов яркости («энергия шума»).

Для случая мягкого детектора и закрытой стегосистемы имеем две основные меры похожести:

 

- (1.7)

 

нормированный коэффициент взаимной корреляции и

 

- (1.8)

расстояние по Хэммингу.

В детекторе возможно возникновение двух типов ошибок. Существует вероятность того, что детектор не обнаружит имеющийся ЦВЗ и вероятность ложного нахождения ЦВЗ в пустом контейнере (вероятность ложной тревоги). Снижение одной вероятности приводит к увеличению другой. Надежность работы детектора характеризуют вероятностью ложного обнаружения. Система ЦВЗ должна быть построена таким образом, чтобы минимизировать вероятности возникновения обеих ошибок, так как каждая из них может привести к отказу от обслуживания.

 

1.4. Стеганографические протоколы

Важное значение для достижения целей стеганографии имеют протоколы. По протоколом понимается «порядок действий, предпринимаемых двумя или более сторонами, предназначенный для решения определенной задачи» [11]. Можно разработать исключительно эффективный алгоритм скрытия информации, но из-за его неправильного применения не добиться своей цели. И протокол и алгоритм есть некоторая последовательность действий. Различие заключается в том, что в протокол должны быть обязательно вовлечены двое или более сторон. При этом предполагается, что участники принимают на себя обязательство следовать протоколу. Также как и алгоритм, протокол состоит из шагов. На каждом шаге протокола выполняются некоторые действия, которые могут заключаться, например, в производстве каких-то вычислений, или осуществлении некоторых действий.

 

1.4.1. Стеганография с открытым ключом

Стеганография с открытым ключом опирается на достижения криптографии последних 25 лет. Понятие «открытый ключ» означает, что для дешифровки сообщения используется другой ключ, чем при его шифровании. При этом один из ключей делается общедоступным, открытым. Криптографическая система с открытым ключом используется, например, при цифровой подписи. При этом сообщение подписывается закрытым ключом, и любой, имеющий соответствующий открытый ключ, может удостовериться в ее подлинности. При шифровании данных используют обратный порядок: сообщение подписывается открытым ключом, а прочитать его может лишь имеющий соответствующий закрытый ключ. Естественно, что из открытого ключа никакими способами нельзя получить закрытый ключ (в вычислительном смысле).

Напомним, что стеганографический ключ не шифрует данные, а скрывает место их нахождения в контейнере. Спрятанные данные могут быть дополнительно зашифрованы обычными методами, но этот вопрос не относится к стеганографии. Для того, чтобы была возможность организации стегоканала, стороны должны, как правило, иметь перед началом сеанса некоторую информацию.

Вернемся к «проблеме заключенных». Предположим, что Алиса и Боб еще во время нахождения на свободе обменялись закрытыми или открытыми ключами друг с другом. Тогда их задача заключается во встраивании сообщений в контейнер в соответствии с ключом. Встроенное сообщение не должно заметно изменять контейнер и обнаруживаться посредством статистических тестов. Если Вилли злоумышленный нарушитель, то у него имеется возможность некоторого искажения сигнала, передаваемого от Алисы к Бобу. Это может привести к потере скрытого сообщения, если не использовать специальные методы (например, помехоустойчивое кодирование, или расширение спектра сигналов).

Возможно ли осуществление скрытой связи между Алисой и Бобом, если у них имеются только открытые ключи друг друга? Оказывается, да. В публикации [11] представлен протокол, следуя которому заключенные могут наладить в этом случае скрытую «переписку». При этом надо отметить, что предположение о том, что Алиса и Боб имеют открытые ключи друг друга не является чем-то необычным. Протокол, приведенный в [11] предполагает наличие пассивного нарушителя и заключается в следующем:

1. Алиса встраивает свое сообщение с использованием известного ей открытого ключа Боба в стегоканал, подверженный наблюдению со стороны Вилли.

2. Предполагается, что Бобу известны детали протокола, он ждет сообщение и, приняв его, извлекает из контейнера с использованием своего закрытого ключа.

Очевидным недостатком этого протокола является то что Алиса никаким путем не может предупредить Боба о начале передачи скрытого сообщения. Поэтому Боб должен подозревать его наличие во всех принятых сообщениях и проверять их. При интенсивном обмене данными, да еще в многопользовательской среде, это может быть невыполнимо.

С другой стороны, то, что Боб проверяет все поступающие данные говорит о том, что он может стать участником стеганографического протокола. При этом у Алисы появляется возможность передать Бобу свой открытый ключ.

Известна также и модификация этого протокола, не требующая предварительного обмена открытыми ключами между Алисой и Бобом:

1. Алиса генерирует на своем компьютере пару открытого и закрытого ключа.

2. Алиса пересылает открытый ключ по каналу Бобу. Эту же информацию получает и Вилли.

3. Боб предполагает, что пересланные данные есть открытый ключ Алисы. С его помощью он шифрует сообщение, состоящее из его открытого ключа для будущей связи и (возможно) краткого «приветствия». Боб пересылает это сообщение Алисе.

4. Алиса знает, что присланные данные содержат открытый ключ Боба, дешифрует их при помощи своего закрытого ключа. У узников есть вся необходимая информация для обеспечения скрытой двусторонней связи. Так как Вилли лишь Наблюдатель, то он не может никоим образом вмешаться и помешать установлению скрытой связи между Алисой и Бобом.

Иное дело, если Вилли является активным или злоумышленным нарушителем. Тогда он не только может вносить помехи в стегоканал, но и даже полностью имитировать, скажем, Алису. Так как у Боба нет никакой априорной информации об Алисе, он не сможет отличить подделку. Поэтому, осуществление скрытой передачи данных с открытым ключом в присутствии активного нарушителя есть намного более трудная проблема, чем при наличии пассивного нарушителя.

В работе [13] представлен протокол, позволяющий решить эту задачу. Он основан на введение в рассмотрение канала с исключительно малой пропускной способностью - надсознательного (supraliminal) канала. Этот канал образуется за счет встраивания скрываемых данных в наиболее важные признаки контейнера, искажение которых приведет к его полной деградации. Дело в том, что Вилли во многих случаях не может вносить значительные помехи в стегоканал, так чтобы передаваемая информация полностью изменялась. Не может по причинам не технического характера, а по юридическим или иным мотивам. Например, если Алиса пересылает Бобу книгу, Вилли не может подменить ее другой. Также недопустимо, например, изменение дипломатических посланий. За счет того, что скрытое сообщение зависит от контейнера, этот тип канала является робастным. По надсознательному каналу передается малый объем внешне незначимых данных. Например, это может быть сеансовый ключ.

Встраивание информации в наиболее важные свойства контейнера – основной принцип применения ЦВЗ. Отличие надсознательного канала заключается в том, что для встраивания и извлечения информации в этом случае не требуется секретный ключ. Местоположение скрываемых бит общеизвестно, а вот удалить их невозможно без разрушения контейнера. Кроме того, ЦВЗ может не нести в себе никакой осмысленной информации, например, быть функцией самого изображения. В случае же надсознательного канала, наоборот, контейнер может быть функцией скрываемого короткого сообщения.

В качестве примера надсознательного канала в [12] приведен такой сценарий. Пусть контейнером является озвученный видеоклип – речь Алисы. В целях стеганографии здесь обычно используются младшие значащие биты отсчетов клипа – то есть, фактически, шум. Принцип построения надсознательного канала иной. Предположим, что каждой букве алфавита сопоставлено некоторое числовое значение. Получив аудиоклип, Боб выбирает из него и выписывает все достаточно длинные слова, скажем, более пяти букв. Далее для каждого слова он находит произведение числовых эквивалентов этих букв по некоторому простому модулю . Упорядоченные значения получившихся чисел могут рассматриваться как представление некоторого целого числа по модулю .

Задача Алисы при подготовке клипа заключается в том, чтобы должным образом составить сообщение и сохранить его осмысленность. Эта задача облегчается тем, что для скрытия сообщения используются только длинные слова, а короткими можно манипулировать произвольно. Составив текст, Алиса осуществляет аудиовидеозапись. Получившийся канал является открытым, так как сама запись, числовые значения букв известны всем. Однако канал является и замаскированным, так как любая запись может интерпретироваться, как содержащая скрытое сообщение. Канал является робастным, так как Вилли достаточно трудно заменить отдельные сообщения, имитируя голос Алисы и движения ее губ.

Как видно из приведенного примера, основная трудность заключается в формировании контейнера, тогда как работа Боба может быть легко автоматизирована. Для практического применения надсознательного канала должны быть автоматизированы обе операции. Надсознательный канал не подходит для скрытой передачи сообщений, так как он обладает малой пропускной способностью и читается Вилли. Однако, он может быть использован для тайного обмена открытыми ключами, несмотря на наличие активного нарушителя.

Протокол обмена следующий [13]:

1. Алиса генерирует пару открытого и закрытого ключей.

2. Алиса вычисляет представительное описание контейнера, соответствующее ее открытому ключу, генерирует контейнер и пересылает его Бобу.

3. Боб извлекает из принятого контейнера открытый ключ Алисы. Он генерирует секретный ключ, шифрует его с помощью открытого ключа Алисы, находит соответствующее получившейся последовательности описание контейнера, генерирует контейнер и пересылает его Алисе.

4. Алиса и Боб теперь могут обмениваться сообщениями, встраиваемыми в контейнер с использованием этого ключа.

Вилли в результате перехвата канала может получить открытый ключ Алисы и зашифрованный этим ключом секретный ключ Боба. Не зная закрытого ключа Алисы он не сможет получить значение секретного ключа.

 

1.4.2. Обнаружение ЦВЗ с нулевым знанием

Робастные ЦВЗ могут применяться в различных приложениях, соответственно, и требования к ним могут предъявляться различные. Можно выделить следующие категории требований к робастным ЦВЗ:

- ЦВЗ обнаруживается всеми желающими. В этом случае он служит для уведомления о собственнике защищаемого контента и для предотвращения непреднамеренного нарушения прав собственника.

- ЦВЗ обнаруживается, по крайней мере, одной стороной. В этом случае его использование связано с поиском нелегально распространяемых копий, например, в сети Интернет.

- ЦВЗ крайне трудно модифицировать или извлечь из контента. В этом случае ЦВЗ служит для аутентификации.

Одновременное выполнение вышеприведенных требований невозможно, так как они являются противоречивыми. Поэтому, в различных приложениях используются как системы ЦВЗ с секретным, так и с общедоступным ключом. Системы с общедоступным ключом находят гораздо большее применение, так как они могут быть использованы как для обнаружения, так и для предотвращения несанкционированного использования контента. Для того, чтобы поисковая система обнаружила ЦВЗ с секретным ключом, ей необходимо проверить каждое изображение на наличие в нем каждого из возможных ЦВЗ, что является вычислительно трудоемкой задачей. В случае же общедоступного ЦВЗ алгоритм обнаружения единственный. Однако, общедоступные ЦВЗ обладают серьезным недостатком: так как их местоположение известно, то их можно без труда извлечь из защищаемого изображения.

Создается впечатление, что ЦВЗ с общедоступным ключом не могут быть робастными. Однако, является ли таковым ЦВЗ с секретным ключом? Да, его местоположение неизвестно, но лишь до тех пор, пока он не «вступает в действие». Как только ЦВЗ начинает выполнять свои функции по защите контента, у атакующего появляется все больше информации о нем, то есть ЦВЗ становится все более «открытым». В главе 2 представлен ряд атак, связанных с выявлением поведения детектора при незначительных модификациях изображения. Таким образом, сама природа ЦВЗ такова, что их в любом случае можно считать общедоступными, несмотря на наличие секретного ключа.

В работе [14] представлена система ЦВЗ, в которой этапы аутентификации и обнаружения разделены. Это делает возможным создание ЦВЗ, который легко обнаруживается, но трудно удаляется. Эта система строится на основе доказательства с нулевым знанием [11].

Представим себе следующую ситуацию. Алиса обладает некоторой информацией и хочет доказать этот факт Бобу. При этом доказательство должно быть косвенным, то есть Боб не должен получить каких-либо новых знаний об этой информации. Такое доказательство и называется доказательством с нулевым знанием. Оно принимает форму интерактивного протокола. Боб задает Алисе ряд вопросов. Если Алиса действительно владеет некоторой информацией, то она ответит на все вопросы правильно; если же она мошенничает, то вероятность правильного угадывания мала и уменьшается с увеличением количества вопросов.

В целом базовый протокол с нулевым знанием строится следующим образом:

1. Алисе известна некоторая информация, являющаяся решением некоторой трудной проблемы. Она использует эту информацию и случайное число для превращения этой трудной проблемы в другую, изоморфную первой и получает ее решение.

2. Боб просит Алису либо доказать, что старая и новая проблемы изоморфны, либо открыть решение новой проблемы и доказать, что оно является таковым. Алиса выполняет просьбу Боба.

3. Этапы 1 и 2 повторяются раз.

В качестве трудной проблемы выбирается обычно вычисление по однонаправленной функции. Одной из наиболее известных однонаправленных функций является дискретный логарифм. Рассмотрим построение протокола с нулевым знанием на основе дискретного логарифма. При этом общеизвестными являются: большое простое число и порождающий элемент . Алиса выбирает некоторое число и публикует . Так как определение на основе знания есть вычислительно трудная задача, то знание Алисой подтверждает ее идентичность.

Протокол строится следующим образом.

1. Алиса генерирует другое простое число , вычисляет число и посылает его Бобу. (То есть она передает Бобу изоморфную трудную задачу).

2. Боб может попросить Алису:

а) открыть , то есть дать решение изоморфной трудной задачи;

б) открыть , то есть логарифм произведения .

3. Алиса выполняет просьбу Боба, и шаги протокола повторяются при другом значении .

Протоколы доказательства с нулевым знанием могут строиться также на основе использования свойств изоморфизма графов [11] и других трудных задач. В [11] рассмотрены также и слабости этих протоколов.

Итак, в криптографии известна и решена задача доказательства существования некоторой информации без раскрытия сведений о ней. К сожалению, идея доказательства с нулевым знанием не может быть непосредственно применена для построения системы ЦВЗ, из-за специфики последней. Далее рассмотрена эта специфика и возможные модификации протокола доказательства с нулевым знанием для применения в ЦВЗ [14].

В рассмотренном выше протоколе Алиса имеет возможность публиковать открытое число и различные значения , а также и . В случае же системы ЦВЗ вся эта информация должна встраиваться в изображение. Если ее сделать доступной для Боба, тот может просто удалить ее из изображения, так как это не приведет к существенному ухудшению его качества. Возможным выходом являлось бы использование надсознательного канала, то есть ЦВЗ в виде хэш-функции от наиболее значимых признаков изображения. В этом случае удаление ЦВЗ приведет к значительной деградации изображения. Однако, таким образом невозможно встраивать новую информацию, например, вычисленное значение . По существу, надсознательный канал доступен для Алисы в режиме “только для чтения”.

Вначале рассмотрим возможную реализацию протокола с нулевым знанием в известной схеме построения системы ЦВЗ, носящей имя Питаса [15]. В основе схемы Питаса лежит разделение всего множества пикселов на два подмножества, увеличение значений на некоторое число в одном подмножестве и уменьшение на то же число - в другом. Таким образом, средние значения двух подмножеств будут отличаться на .

Версия схемы Питаса для протокола с нулевым знанием строится следующим образом. После внесения ЦВЗ в контейнер Алиса выполняет перестановку . Затем она доказывает наличие перестановки ЦВЗ в перестановке контейнера без раскрытия значения ЦВЗ . Для исключения обмана с ее стороны Алиса должна опубликовать множество сигналов таких, что их скремблированные значения дают множество всех возможных ЦВЗ.

Итак, в соответствии с [14]:

1. Алиса генерирует перестановку, вычисляет последовательность и посылает ее Бобу.

2. Боб теперь знает, как исходный контейнер, так и его перестановку и случайным образом просит Алису:

а) открыть перестановку, чтобы убедиться что нет обмана;

б) показать наличие в .

3. Алиса выполняет просьбу Боба.

4. Алиса показывает, что она не смошенничала и действительно является перестановкой ЦВЗ. Для этого она предъявляет допустимую процедуру скремблирования , такую что .

5. Использованная перестановка больше в протоколе не применяется.

Данный протокол порождает ряд проблем. Во-первых, даже небольшой сдвиг контейнера приведет к рассогласованию значений и . В принципе, эта проблема не самого протокола. Она вызвана чувствительностью схемы Питаса к пространственным сдвигам. Другая проблема состоит в некоторой «утечке» информации о выполненной Алисой перестановке. Дело в том, что значения интенсивностей пикселов при перестановке не изменяются, и атакующий будет использовать эту информацию для сужения круга возможных перестановок. Еще одна слабость протокола заключается в том, что Алиса может найти и использовать такие перестановки, что будет отыскиваться в , и Боб не сможет обнаружить мошенничество.

Поэтому, в [14] был предложен ряд усовершенствований вышеприведенного стеганографического протокола с нулевым знанием, с использованием криптографически сильных перестановок, основанных на сложных проблемах, например, поиска путей на графах.

 

 



<== предыдущая лекция | следующая лекция ==>
Встраивание сообщений в незначащие элементы контейнера | ЛЕКЦИЯ 2. УГРОЗЫ СТЕГОСИСТЕМАМ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.009 сек.