Расскажите о Цифровой подписи?
================================

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

 Зашифровывается хеш сообщения и посылается вместе с сообщением. Расшифровав хэш и сверив его с вычесленным самостоятельно, можно убедиться в подлинности сообщения.  
  

Сертификат которым подписано сообщение обычно сам имет подпись какого-либо доверенного центра сертификации. Или же вы просто сами уверены, что сертификат точно пренадлежит организации или человеку. 

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

Полученный хэш шифруется закрытым ключом сертификата и вкладывается в документ (или прикладывается к нему) вместе с указанием сертификата.  

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

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