>Для восстановления всемирной гармонии я признаю за собой слабое владение терминологией, незнание отличий между SSL и PGP и многие другие грехи. Однако меня интересует принципиальный вопрос: чтобы подписывать код, нужен открытый или закрытый ключ?В общем все это выглядит примерно следующим образом.
Если вам нужно сделать так, чтобы другие убедились в подлинности ваших данных (без шифрования самих данных), то необходимо ставить подпись:
1. Например, упаковали в архив исходный код, посчитали хеш-сумму от архива.
2. Зашифровали на вашем закрытом ключе вашу хеш-сумму от архива + приложили ваш сертификат (открытый ключ + много разного в нем может быть), который должен быть в списке доверенных у тех, кто скачает архив (например, вы получили сертификат в СА, а этот СА у всех стоит в доверенных). Получается файлик, где (упрощенно) лежит зашифрованная хеш-сумма и ваш сертификат - это и есть фактически подпись.
4. Когда ваш архив скачают, то считают хеш-сумму от архива + расшифровывают на вашем сертификате хеш-сумму, которая идет в файлике, который подпись.
5. Посчитанная хеш-сумма совпадает с расшифрованной на сертификате (открытом ключе) - значит подмены архива нет. Подпись проверена.
При желании, можно все пихать в один контейнер, можно раздельными частями архив+подпись с сертификатом. Главное, чтобы потом можно было разъединить все эти части.
При установки шифрованного (одностороннего) соединения:
1. Клиент забирает с сервера его сертификат (где хранится открытый ключ). Шифрует на нем данные - например симметричный сеансовый ключ AES, так как ассиметричное шифрование крайне медленное.
2. Передает данные на сервер. Сервер расшифровывает на своем закрытом ключе, получает сеансовый ключ и дальше данные уже идут с использованием сеансового ключа быстрого алгоритма AES.
Возможен еще обмен сертификатами для взаимной аутентификации клиента и сервера, если в этом есть необходимость.