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


Автор: aktuba 28.6.2007, 11:54
Есть такая проблема - при запуске программы появляется окно-предупреждение, что пользователь хочет запустить файл, подписанный "неизвестным издателем". Как в это окно вписать свои данные?

Автор: Alexeis 29.6.2007, 08:59
aktuba, это значит что программе неизвестна подпись текущего файла. У программы должно быть база всех зарегистрированных подписей. Но как это связано с делфи?

Автор: MetalFan 29.6.2007, 09:30
Цитата(Alexeis @  29.6.2007,  09:59 Найти цитируемый пост)
программе неизвестна подпись текущего файла

скорее тогда ОС неизвестна подпись (если она есть вообще) запускаемого файла... 

з.ы. на сколько я понимаю, aktub'e нужно "подписать" exe-шник, чтобы ОС не ругалась...

Автор: aktuba 29.6.2007, 09:32
Цитата

У программы должно быть база всех зарегистрированных подписей.


Это не к программе даже относиться, а к винде. Для того, чтобы убрать это окно, необходимо купить цифровой сертификат (от 179$ в год) и прописать его в ресурсы программы. За объяснение - спасибо Snowy.

Автор: MetalFan 29.6.2007, 10:51
Цитата(aktuba @  29.6.2007,  10:32 Найти цитируемый пост)
от 179$ в год

ахренеть.... вот мелкомягкие сволочи

Автор: aktuba 29.6.2007, 11:14
Цитата

вот мелкомягкие сволочи 


Это даже не мягкотелые =))) Это Британская компания. У MS цена выше...

Добавлено через 1 минуту и 4 секунды
Да и еще: выяснилось, что данная бяка появляется только тогда(!!!), когда файл загружен через IE (аутглюк и компания работают тоже через ie)... Иначе - ничего не появляется...

Автор: Rennigth 29.6.2007, 11:19
ммм, какбы так выразиться чтобы не нарушать правила форума.  smile 
Вообщем есть ли инфа какая-нибудь по формату этой подписи, т.е где храниться(понятно что в ресурсах, но в каком виде, просмоторщики ресурсов их вроде не видят), в каком виде, и какие есть механизмы зашиты этого чуда?

Добавлено через 2 минуты и 3 секунды
Цитата(aktuba @  29.6.2007,  11:14 Найти цитируемый пост)
Иначе - ничего не появляется... 

Ну это вроде зависит от настроек винды. Например в 2003 сервере вроде по умолчанию всегда спрашивает. Могу правда что-то путать...  smile 

Автор: Alexeis 29.6.2007, 11:36
Цитата(aktuba @  29.6.2007,  11:14 Найти цитируемый пост)
что данная бяка появляется только тогда(!!!), когда файл загружен через IE (аутглюк и компания работают тоже через ie)... Иначе - ничего не появляется... 

  А еще если это инсталяха. 

Цитата(Rennigth @  29.6.2007,  11:19 Найти цитируемый пост)
Вообщем есть ли инфа какая-нибудь по формату этой подписи, т.е где храниться(понятно что в ресурсах, но в каком виде, просмоторщики ресурсов их вроде не видят), в каком виде, и какие есть механизмы зашиты этого чуда?

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

Автор: Rennigth 29.6.2007, 11:53
Цитата(Alexeis @  29.6.2007,  11:36 Найти цитируемый пост)
  Цифровая подпись это шифрование файла несимметричным ключом. В программе храниться только публичный ключ для расшифровки. Если файл перешифровать, то ключ будет уже другим, и не будет соответствовать ни одному из ключей из БД винды. Винда расшифровывает файл этим ключом и сверяет его по базе. Если таковой найдет то дается разрешение. Если зашить в прогу чужой ключ, то с помощью него уже нельзя будет расшифровать программу. Ключ шифровки храниться у производителя и является секретным. Не имея его нельзя зашифровать файл так чтобы его можно было расшифровать публичным ключом. 


Спасиб.

Автор: aktuba 29.6.2007, 12:36
Цитата

А еще если это инсталяха. 


Опять-таки, загруженная... Если с одного компа переписать на другой - траблов не будет... Правда, http://www.delphilab.ru/content/view/91/1/, Snowy описал новую проблему для Висты... ну и решение этой проблемы =)))))

Автор: Alexeis 29.6.2007, 13:15
Цитата(aktuba @  29.6.2007,  12:36 Найти цитируемый пост)
Опять-таки, загруженная... Если с одного компа переписать на другой - траблов не будет... Правда, вот тут, Snowy описал новую проблему для Висты... ну и решение этой проблемы =))))) 

  Так я как раз об этом! Но решение совсем не красивое. Называть инсталяторы не своими именами имхо бред. Представь себе название инсталяхи "Program mounter.exe". Кто-то поймет его назначение? Если будет совпадать с названием проги тоже не хорошо, так как будет путаница, что за файл перед тобой инсталяха или сам программа.

Автор: aktuba 29.6.2007, 13:32
Цитата

Так я как раз об этом! Но решение совсем не красивое. Называть инсталяторы не своими именами имхо бред. Представь себе название инсталяхи "Program mounter.exe". Кто-то поймет его назначение? Если будет совпадать с названием проги тоже не хорошо, так как будет путаница, что за файл перед тобой инсталяха или сам программа.


Согласен... Но и платить 200$ в год не сильно хочется... Будем надеяться пользователи привыкнут доверять =))))

Автор: Poseidon 29.6.2007, 14:37
Я что-то не пойму что вы тут наобсуждали. Лично в моих прогах ни разу не вылетало такое предупреждение, хотя я его пару раз наблюдал на чужих прогах. Закономерности не могу найти, но то, что я не плачу 200 зеленых в год - это факт!

Автор: Snowy 29.6.2007, 14:42
Poseidon, речь идёт об exe, скачанных при помощи IE, либо сохранённых из аутлука.
Такие exe автоматом помечаются, как "полученные из ненадёжного источника" (если конечно у них нет заверенной подписи).
При каждом запуске таких exe, винда будет ругаться.
Выходы:
1. Заплатить за подпись.
2. Утрамбовать в архив - пусть юзер распаковывает.
3. Создать инсталлятор - тогда винда ругнётся только один раз на инсталлятор, а сама прога будет работать без возмущений.

Автор: Yanis 29.6.2007, 14:43
Цитата(Snowy @  29.6.2007,  15:42 Найти цитируемый пост)
Выходы:

4. В свойствах файла нажать кнопку «Разблокировать» smile

Автор: Snowy 29.6.2007, 14:47
Цитата(Alexeis @  29.6.2007,  13:15 Найти цитируемый пост)
Называть инсталяторы не своими именами имхо бред.
Это просто выработавшийся условно стандарт.
Просто по имени файла юзверь автоматом понимает, что это инсталлятор.
Но вполне нормально назвать инсталлятор программы MyProg, например: "MyProg.1.0.12.128.exe". 
Можно использовать типовые приёмы - использование схожих по написанию символов.
Можно разбить, по примеру: "S e t u p .exe"

Автор: Alexeis 29.6.2007, 19:57
Цитата(Snowy @  29.6.2007,  14:47 Найти цитируемый пост)
Это просто выработавшийся условно стандарт.

  Так на этом и держится популярность и удобство винды.
Цитата(Snowy @  29.6.2007,  14:47 Найти цитируемый пост)
Можно разбить, по примеру: "S e t u p .exe"

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

Автор: vornic 2.7.2007, 10:57
Цитата(Rennigth @  29.6.2007,  11:19 Найти цитируемый пост)
Вообщем есть ли инфа какая-нибудь по формату этой подписи, т.е где храниться(понятно что в ресурсах, но в каком виде, просмоторщики ресурсов их вроде не видят), в каком виде, и какие есть механизмы зашиты этого чуда?

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

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

Вы в корне не правы, исполняемые файлы вовсе не шифруются. Подпись крепится в конце файла. Подписывать можно и dll и ocx и даже vbs скрипты. Шифрования тут нет вообще. И кстати, публичный ключь в шифровании применяется для шифрования, а для расшифровки приватный. В цифровой же подписи наоборот.
Для проверки подписи нужно наличие корневого сертификата, большинство которых расположено в хранилище винды, если угодно иметь собственную подпись то ничто не мешает пополнить это хранилище своим сертификатом и использовать свою подпись, не обязательно покупать её у "спикулянтов" smile

PS Уж извините за коммент, не удержался. Такие фантазии городите.

Автор: Alexeis 2.7.2007, 16:08
Цитата(vornic @  2.7.2007,  10:57 Найти цитируемый пост)
PS Уж извините за коммент, не удержался. Такие фантазии городите. 

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

Цитата(http://linux-admin.net.ru/content/892)

Цифровые подписи

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

Полученные в результате шифрования хеша двоичные данные и есть наша цифровая подпись

user posted image

Получатель, чтобы удостовериться, что данные присланы именно от нас и не были искажены, производит следующие операции:

    * получает хеш от данных (данные остались открытыми);

    * расшифровывает нашу цифровую подпись при помощи нашего открытого ключа;

    * сравнивает свой хеш и результат дешифровки. Если они эквивалентны, значит, данные были подписаны именно нами (ну, по крайней мере, нашим закрытым ключом, см. Рисунок 5).

user posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)