Подтвердить что ты не робот

Что такое токен открытого ключа и как он вычисляется в строгих именах сборки?

Что такое "токен открытого ключа" и как он вычисляется в строковых именах сборки?

4b9b3361

Ответ 1

Что касается вашего вопроса "Как он рассчитан", это хэш SHA1.

Из dot net blog:

Microsoft решает "открытый ключ" bloat ", используя хэш открытый ключ общедоступной сборки. Эти хеши называются общедоступными и являются низкими 8 байтами хэш SHA1 сильно названного публичный ключ сборки. Хеши SHA1 160 бит (20 байт) хэшей, а верхняя 12 байтов хэша просто отбрасывается в этом алгоритме.

Ответ 2

Вы можете получить PublicKeyToken из командной строки VS, набрав:

sn –T DLLName.dll

Ответ 3

Если вам нужно создать токен открытого ключа на основе открытого открытого ключа, этот небольшой статический метод работает:

   private static byte[] GetKeyTokenFromFullKey(byte[] fullKey)
    {
        SHA1CryptoServiceProvider csp = new SHA1CryptoServiceProvider();
        byte[] hash = csp.ComputeHash(fullKey);
        byte[] token = new byte[8];
        for (int i = 0; i < 8; i++ )
            token[i] = hash[hash.Length - (i+1)];

        return token;
    }

Ответ 4

Из ECMA-335:

Это объявление используется для хранения младших 8 байтов хэша SHA-1 отправителей открытый ключ в ссылке на сборку, а не полный открытый ключ.
Ссылка на сборку может хранить либо полный открытый ключ, либо 8-байтовый токен открытого ключа. Либо можно использовать подтвердите, что тот же закрытый ключ, используемый для подписи сборки во время компиляции, также подписывал сборку, используемую в во время выполнения. Также не требуется присутствовать, и хотя оба могут быть сохранены, это не полезно.

[Обоснование: токен открытого ключа или открытого ключа, хранящийся в ссылке на сборку, используется для обеспечения того, чтобы сборка, и сборка, фактически используемая во время выполнения, была произведена во владении субъектом одного и того же частного ключа, и поэтому можно предположить, что они были предназначены для этой же цели. В то время полный открытый ключ криптографически безопасен, для этого требуется больше места для хранения. Использование открытого ключа токен уменьшает пространство, необходимое для хранения ссылки, лишь слегка ослабив процесс проверки. конечное обоснование]

Как вычисляется хэш (я предполагаю, что это может быть то, что вы просите, поскольку токен открытого ключа не "вычислен" ) из той же спецификации:

Метаданные CLI позволяют производителю сборки вычислить криптографический хэш этой сборки (используя хэш-функцию SHA-1), а затем для ее шифрования с использованием алгоритма RSA (см. раздел I) и публичного/частного выбор пары производителей. Результаты этого ( "цифровая подпись SHA-1/RSA" ) могут быть сохранены в метаданных (§25.3.3) вместе с открытой частью пары ключей, требуемой алгоритмом RSA..publickey directive используется для указания открытого ключа, который использовался для вычисления подписи. Вычислять хэш, подпись обнуляется, вычисляется хэш, а затем результат сохраняется в сигнатуре.

Процесс подписания сильного имени (SN) использует стандартные алгоритмы хеширования и шифрования для сильной подписи имени. Генерация SHA-1 на большинстве файлов PE. Это хэш-значение RSA-подписан с закрытым ключом SN. Для в целях проверки открытый ключ хранится в файле PE, а также в значении хеш-символа.
За исключением следующих, все части файла PE хэшируются: • Запись подписи Authenticode: файлы PE могут быть аутентифицированы. Аутентод подпись содержится в 8-байтовой записи со смещением 128 в каталоге данных заголовка PE ( "Таблица сертификатов" в §25.2.3.3) и содержимое файла PE в диапазоне, указанном в этом запись в каталоге. [Примечание. В соответствующем файле PE эта запись должна быть равна нулю. конечная нота] • Сильное имя Blob: 8-байтная запись со смещением 32 заголовка CLI ( "StrongNameSignature" ) в п. 25.3.3) и содержимое хэш-данных, содержащихся в этом RVA в PE файле. Если 8-байтовый запись равна 0, нет ассоциированной сильной подписи. • Контрольная сумма заголовка PE: 4-байтная запись со смещением 64 заголовка PE-заголовка Windows NT-Specific Поля ( "Контрольная сумма файла" в §25.2.3.2). [Примечание. В соответствующем файле PE эта запись должна быть равна нулю. end note]

Вы можете бесплатно скачать эту опцию: http://www.ecma-international.org/publications/standards/Ecma-335.htm

Ответ 5

Ключ открытого ключа используется для идентификации организации в узле с жестким именем. Эта информация добавляется к сборке метабазы. Я бы предположил, что Ричард прав относительно технического способа его хранения.

Если вы хотите просмотреть метабазу сборки, используйте ILDASM. Вы можете перейти к тому, что хранится в метабазе, а не видеть IL.

Ответ 6

Это хэш-байты ключа, используемые для подписи сборки.

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