классический сценарий ИПК ... вы хотите CA ...
все ваши коллеги должны знать сертификат общественного CA загодя ...
раз в одноранговых регистров с сервером, его должен зашифровать свой собственный ключ, чтобы сервер мог быть уверен, что полученный ключ не был подделан ...
для структуры данных, вероятно, вы должны использовать X509
с точки зрения программистов:
одноуровневых хочет зарегистрировать с новой парой ключами ...
-> генерировать пару ключей
- > заполните идентификационные данные сертификата и приложите открытый ключ (то, что вы сейчас называете «запрос сертификата»)
-> enc rypt запрос симметрично (AES-CBC-256 со случайным IV выглядит как хороший выбор)
-> зашифровать сим- метрический ключ и отправить его вместе с зашифрованным запросом и открытым текстом IV на сервер (необязательно, включить сервер при условии одноразового номера или addidional данных сеанса в зашифрованной части)
на стороне сервера:
расшифровывать, проверять данные, особенно информацию идентификации запроса , если это нормально, принять запрос (ID часть + общественности) и подпишите, что с помощью ключа CA
сообщите об этом партнеру и передайте подписанный сертификат (ы) осел она не включает в себя какие-либо секреты, которые могут быть открытым текстом или шифруются с помощью прилагаемого ключа для пэра A)
когда вам необходимо установить контакт между коллегами, вам нужна только некоторая контактной информация:
если сверстниками X хочет связаться со сверстником A, все, что вам нужно передать, - это адрес, с которым можно связаться A ... X затем связывается с A и запрашивает идентификатор («Привет? это? пожалуйста, дайте мне свой сертификат, и вот мой сертификат. ») ... после обмена сертификатами подписи проверяются ... если CA sigs в порядке, обе стороны генерируют случайные числа (« nonces », number-once-used) и зашифровывать их с помощью открытых ключей из полученного и подтвержденного сертификата и передавать их другому партнеру ... после получения зашифрованного значения дешифруется и повторно зашифровывается с помощью ключа других сторон и отправляет обратно ... после получения этого расшифровки значение с вашим собственным личным ключом и убедитесь, что это тот же номер, который вы отправили ... проверено подлинное соединение, и теперь вы можете перейти к передаче симметричных ключей и начать передачу зашифрованных данных
, если вы считаете, что можете жить без аутентификации другой партнер, вы можете сразу начать передачу зашифрованных данных после того, как вы проверили сертификат CA на их сертификате ... но учтите, что в этом случае attac ker может получать данные, которые не для него (он не может расшифровать его, но он может притворяться другим сверстником ...)
Большое спасибо. Я думал о чем-то подобном этой реализации, но у меня были и другие реализации, и я не мог понять, в какую из них пойти. Другой метод, который, как я думал, заключался в том, чтобы сервер создавал пару ключей и сертификат во время регистрации и подписывал сертификат и отправлял его партнеру. Но я думаю, что я пойду с этой реализацией. И я не создаю CA, как в реальном ЦС, однако у меня будет собственный сертификат и пара ключей для центрального сервера. И используйте это, чтобы подписать все сертификаты сверстников. –
Можете ли вы сказать мне какие-либо последствия для безопасности, если вы не используете установленное программное обеспечение CA и сами выполняете такую задачу. Подписание части кажется очень простым, и я не вижу смысла иметь программное обеспечение CA для этого. –
хорошо ... что такое программное обеспечение CA? ... если вы посмотрите на openssl, он включает в себя «крошечный CA» ... кучу скриптов вокруг основных операций openssl ... то, что вы строите, является CA ... вопрос факта ...у вас CA будет самозаверяющий сертификат ... хорошо ... посмотрите на другие ЦС ... все корневые ЦС в вашем браузере имеют самоподписанные сертификаты ... единственное различие: они доставляются вместе с браузером или операционной системой ... ваш будет доставлен с вашим приложением ... этот CA будет таким же реальным, как и любой другой ... – DarkSquirrel42