id: Гость   вход   регистрация
текущее время 16:44 25/04/2024
Автор темы: Гость, тема открыта 20/03/2005 19:16 Печать
https://www.pgpru.com/Форум/ПрактическаяБезопасность/ВопросОтносительноЗащитыПрограммШифрованием
создать
просмотр
ссылки

Вопрос относительно защиты программ шифрованием


Здравстуйте,
Возник у меня такой вопрос, не знаю куда обратиться за дополнительной информацией.
Если результат выполнения программы представить как временной ряд состояний ячеек памяти и регистров процессора, то это получается текст. Если это текст, то его можно зашифрвать при помощи алгоритма с открытыми ключами (т.е. имея открытый ключ и цифер-текст можно получть сам текст, а восстановить закрытый ключ нельзя).
Теперь если представить, что открытым ключом является некоторый ключ сгенерированный на основе закрытого ключа + входные данные программы, то расшифровка текста по сути – выполнение программы. Если такое реализуемо, то теоретически можно создавать программы, которые в принципе нельзя декомпилировать (т.е. декомпилирование по сути будет означать подбор закрытого ключа, т.е. задача взлома цифертекста).
А вопрос состоит в том есть ли такие разработки на самом деле и кто ими занимается?


 
Комментарии
— unknown (20/03/2005 20:33)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Насколько я знаю, такого рода защиты с ассиметричными ключами давно и успешно применяются и успешно ломаются (даже если часть данных вынести на "невскрываемый" внешний железный носитель ключа).

Я лично разделяю мнение, что создание защиты от копирования криптографическими средствами невозможно. В руках взломщика всегда будет и шифртекст и ключ, и алгоритм расшифровки. Здесь работает только защита "security through obsurity", можно попытаться сделать систему как можно более запутанной и непонятной для взломщика, но это даст только временный выигрыш.

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

А еще лучше подумать над тем, чтобы как можно больше программ распространялись бесплатно, свободно и с открытыми исходниками, а не над тем, как изобрести для людей очередные виртуальные оковы, загоны и колючую проволоку, поскольку копирайтное право на информацию – прямой путь к подавлению прав и свобод людей в цифровую эпоху. (более подробно свое мнение на тему конфликта между коммерческим и свободным ПО я высказывал в "оффтопике" про службу техподдержки PGP).
— Гость (20/03/2005 20:53)   <#>
Я не утверждаю, что надо делать мало общедоступных программ. Коммерческие программные продукты будут либо всегда, либо ещё очень долго и их надо защищать.
Но вопрос у меня был немного другой, нежели ваш ответ.
У взломщика есть цифер-текст, есть ключ и есть алгоритм – в данном случае взломщик концептуально не отличается от нормального пользователя например PGP системы – при помощи ключа, цифертекста и алгоритма он получает текст. Я же объяснил, что в моём примере текстом яляется не код программы, а результат её исполнения, а открытым ключём некоторый ключ (на базе закрытого) + входные данные программы.
Я именю ввиду некоторый эмулятор (который по сути – алгоритм расшифровки), разработчик шифрует программу, а получить расшифрованным можно только один вариант использования этой программы (т.е. только ту последовательность действий машины, которая будет при данных входных параметрах) в случае других входных данных – другая последовательсность действий. Сам код при этом нет необходимости дешифровывать, этот эмулятор получается работает на особом цифер коде, который не понятен для программиста и не возможен для изменения если не известен закрытый ключ
— unknown (20/03/2005 23:35)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Я не утверждаю, что надо делать мало общедоступных программ. Коммерческие программные продукты будут либо всегда, либо ещё очень долго и их надо защищать.

Ладно. Признаю свой идеализм. Миром правят вовсе не те ценности, которые мне нравятся, но иногда и помечтать не вредно.

Но вопрос у меня был немного другой, нежели ваш ответ.

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

Я именю ввиду некоторый эмулятор (который по сути – алгоритм расшифровки), разработчик шифрует программу, а получить расшифрованным можно только один вариант использования этой программы (т.е. только ту последовательность действий машины, которая будет при данных входных параметрах) в случае других входных данных – другая последовательсность действий.

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

Мне кажется, вы рассуждаете только как программист, но идеализируете возможности криптографических алгоритмов. Они являются стойкими только при определенных условиях. ((рас) шифрование данных в ОТСУТСТВИИ противника в непосредственной близости).

Даже теоретически стойкость такой защиты нельзя будет обосновать. RSA- алгоритмы в чистом виде уязвимы к атакам на основе подобранного текста, а у взломщика будет полная свобода для таких манипуляций.
Думаю также можно будет применить массу способов для восстановления истинного открытого текста, все RSA-подобные алгоритмы будут бессильны в такой ситуации. Взломщик может контролировать и процесс расшифровки отдельных блоков шифртекста и подавать любые данные на вход-выход системы и видеть все промежуточные состояния и узнавать значения всех степеней-множителей (как бы вы их не маскировали), по которым можно раскрыть правильный ключ и т.д.
Он все это может сравнивать с работой программы в "легальных" условиях с "легальными" данными и ключами.
Если же RSA – будет использоваться для генерации симметричного ключа, то вся концепция рушится. Взломщик вытащит этот ключ и все сведется к обычному симметричному шифрованию.

На практике все будет еще хуже. Стойкие алгоритмы шифрования могут быть взломаны за несколько подобранных шифртекстов при помощи fault-анализа. Это когда в работу шифр-машины (аппаратные шифраторы, смарт-карты, но также и закрытые программы) вносятся ошибки и анализируются их результаты. Большинство самых стойких алгоритмов элементарно ломаются путем дифференциального анализа мощности или учета времени, затраченного на шифрование и т.д. Плюс у взломщика будут в распоряжении все другие каналы утечки информации (даже по звуку, создаваемому электроникой можно узнать ключи шифрования – оборудование для этого нужно дешевое-любительское). Плюс он может засунуть работающую микросхему под электронный микроскоп или лазерную установку (или подо что там еще). Плюс он может снимать дампы памяти. Плюс он может запустить программу на специальном железе. (Думаете процессоры и микросхемы только фирма "Интел" умеет делать? Железные анализаторы данных, проходящих по шине компьютера делают и другие фирмы и стоят они не так чтобы запредельно).

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

P. S. Если еще не читали, то почитайте "Секреты и Ложь" Б. Шнайера – "Безопасность данных в цифровом мире". Главы "Сопротивление вторжению", "Нападения через побочные каналы", "Атаки против смарт-карт" – там описана ситуация с аппаратными средствами защиты секретов, но думаю, что для программных средств ситуация еще хуже.
— Гость (21/03/2005 00:09)   <#>
Правильно я понял, что системы, которые основаны на открытой пересылке ключей принципиально уязвимы?
Т.е., например, PGP? Где у меня есть закрытый ключ, я могу кому угодно дать открытый ключ и он сможет прочитать сообщение зашифрованное мной, но зашифровать потом также это сообщение не сможет; или сможет и это не так и сложно, как говорите вы?
— unknown (21/03/2005 08:54)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
Правильно я понял, что системы, которые основаны на открытой пересылке ключей принципиально уязвимы?

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

Т.е. стойкость и необратимость таких систем это всего лишь упрощенная модель. Которая работает в одних условиях и не работает в других.

Т.е., например, PGP? Где у меня есть закрытый ключ, я могу кому угодно дать открытый ключ и он сможет прочитать сообщение зашифрованное мной, но зашифровать потом также это сообщение не сможет; или сможет и это не так и сложно, как говорите вы?

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

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

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

Существуют протоколы тайных вычислений – Алиса дает Бобу что посчитать, Боб считает, но не знает что именно, а расшифровать результат его расчета может только Алиса, когда Боб ей отошлет полученные данные. Но если Алиса и Боб – это одна программа или они находятся в одной системе, то опять ничего не получится. Это невозможно в принципе, как вечный двигатель или как если бы кто-то сам себя пытался вытащить за волосы из болота (Мюнгхаузен :-)
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3