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

Это может работать для вас (GNU sed):

sed -E 's/^\w+|\b\w{4,}\b/\u&/g' file

Верхний регистр - первый символ слова, если это слово появляется в строке, начинающейся со слова или любого слова, 4 или более символов. длинные

24
задан shA.t 15 November 2017 в 05:41
поделиться

5 ответов

Относительно Вашего вопроса, "Как это вычисляется", это - хеш SHA1.

От точечный сетевой блог :

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

16
ответ дан 28 November 2019 в 23:37
поделиться

От ECMA-335:

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

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

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

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

процесс подписания Строгого имени (SN) использует стандартный хеш и алгоритмы шифра для подписания Строгого имени. SHA-1 долго обсуждает большую часть файла PE, сгенерирован. То значение хэш-функции RSA-подписывается с закрытым ключом SN. Поскольку цели проверки открытый ключ хранятся в файл PE, а также значение хэш-функции со знаком.
За исключением следующего, все части Файла PE хешируются: • запись Подписи Authenticode: файлы PE могут быть подписанным authenticode. authenticode подпись содержится в 8-байтовой записи при смещении 128 из Каталога Данных Заголовка PE (“Certificate Table” в В§25.2.3.3) и содержание Файла PE в диапазоне, указанном этой записью каталога. [Отметьте: В соответствующем Файле PE эта запись должна быть нулем. закончите примечание] • Блоб Строгого имени: 8-байтовая запись при смещении 32 из Заголовка CLI (“StrongNameSignature” в В§25.3.3) и содержание данных хеша содержится в этом RVA в Файле PE. Если 8-байтовая запись 0, нет никакой связанной подписи строгого имени. • Контрольная сумма Заголовка PE: 4-байтовая запись при смещении 64 из Заголовка PE Определенные для Windows NT Поля (“File Checksum” в В§25.2.3.2). [Отметьте: В соответствующем Файле PE эта запись должна быть нулем. закончите примечание]

, можно загрузить спецификацию здесь бесплатно: http://www.ecma-international.org/publications/standards/Ecma-335.htm

5
ответ дан 28 November 2019 в 23:37
поделиться

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

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

3
ответ дан 28 November 2019 в 23:37
поделиться

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

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

0
ответ дан 28 November 2019 в 23:37
поделиться

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

   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;
    }
6
ответ дан 28 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: