Подписание собрания с закрытым ключом - PullRequest
5 голосов
/ 26 декабря 2010

Дорогие все, у меня есть некоторая путаница, если один из вас, пожалуйста, помогите мне в этом. Мои вопросы:

  1. Все говорят, что подписывают сборку закрытым ключом, но никто не говорит, как получить закрытый ключ, используя sn.exe -KI может создать пару секретный / открытый ключ, но как извлечь из нее закрытый ключ, чтобы подписать его. .

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

Ответы [ 4 ]

21 голосов
/ 26 декабря 2010

У меня некоторая путаница

Это запутанная тема.

как извлечь из нее закрытый ключ?

Вам не нужно.Инструмент подписи берет файл ключа.Он достаточно умен, чтобы извлечь закрытый ключ, если это необходимо.

нужно ли отправить ему открытый ключ для использования этой сборки?

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

, если кто-то может использовать, что означает шифрование его с помощью закрытого ключа?

Цель подписания сборки с помощью закрытого ключадолжен предоставить доказательств . свидетельство означает, что «эта сборка была произведена человеком, который обладал закрытым ключом, связанным с этим открытым ключом».

Например, токен открытого ключа Microsoft хорошо известен.Вот почему он называется «открытым» ключом: потому что он известен общественности.Когда вы видите сборку с открытым ключом Microsoft, это свидетельство того, что Microsoft произвела эту сборку, потому что сборка, подпись которой может быть расшифрована с помощью открытого ключа Microsoft, должна была быть создана кем-то, кто имел доступ кЗакрытый ключ Microsoft .Этот ключ находится под строгой охраной глубоко внутри Building Seven здесь, в Редмонде, поэтому у вас есть веские доказательства того, что кто-то, кто действительно работал в Microsoft, создал эту сборку.

Цель этой системы - дать людям возможность установить политики , которые превращают доказательства в разрешения .У вашего клиента может быть политика, которая гласит: «Если у меня есть доказательства того, что эта сборка была произведена Ашишем, тогда разрешите коду делать все, что мне разрешено».

Теперь вы можете разумно спросить: "Как клиент узнает, что данный открытый ключ является вашим открытым ключом?"Это проблема «управления ключами», и это ваша ответственность .Если у вас есть злой близнец, который говорит вашим клиентам, что его открытый ключ ваш открытый ключ, тогда ваши клиенты могут доверять вашему злому близнецу, думая, что он - это вы.В этом случае ваша ответственность состоит в том, чтобы информировать ваших клиентов о том, что существует злой близнец, который пытается их обмануть, и научить их, как отличить открытый ключ от доброго Ашиша ототкрытый ключ злого близнеца.

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

6 голосов
/ 26 декабря 2010
  1. Вы не извлекаете закрытый ключ для подписи сборки. Вы просто настраиваете проект для подписи, используя файл SNK (сгенерированный sn -k), который содержит как закрытый, так и открытый ключи. Вы можете указать это в атрибуте сборки, но в наши дни предпочтительным способом является его указание в параметрах проекта (я полагаю, эквивалент флага /keyfile на csc.exe).

  2. Лично я обычно не добавляю библиотеки в GAC - я предпочитаю сохранять сборку рядом с проектом, который ее использует. Но нет, вам не нужно отправлять ему открытый ключ.

    Вы не шифруете файл с закрытым ключом - вы подписываете его этим ключом. Открытый ключ встроен в сборку, и в основном вы говорите: «Производитель этой сборки определенно владеет этой парой открытого / закрытого ключа, потому что вы можете убедиться, что она подписана с помощью закрытого ключа, соответствующего этому открытому ключу».

1 голос
/ 26 декабря 2010
  1. Вы можете создать ключ с помощью sn.exe, он создаст файл .snk. Вы также можете подписать сборку с помощью sn.exe и того же файла .snk, не нужно ничего извлекать. Также гораздо удобнее делать все это в Visual Studio (свойства проекта, можно также создавать и подписывать).

  2. Нет, сборка включает в себя открытый ключ. Возможно, вы путаете это с подписанием кода сертификатами X.509. Это не так.

0 голосов
/ 26 декабря 2010

Я думаю, что эти две статьи рассказывают вам все, что вам нужно знать:

Как: создать пару открытого / закрытого ключа

Как: подписать сборку со строгим именем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...