Sn.exe (средство строгих имен)Sn.exe (Strong Name Tool)

Программа строгих имен (Sn.exe) позволяет подписывать сборки строгими именами.The Strong Name tool (Sn.exe) helps sign assemblies with strong names. Программа Sn.exe предусматривает параметры для управления ключами, создания подписи и ее проверки.Sn.exe provides options for key management, signature generation, and signature verification.

Предупреждение

Строгие имена не являются средством обеспечения безопасности.Do not rely on strong names for security. Они служат только для однозначной идентификации.They provide a unique identity only.

Дополнительные сведения о строгом именовании и сборках со строгими именами см. в разделах Сборки со строгими именами и Практическое руководство. Подписание сборки строгим именем.For more information on strong naming and strong-named assemblies, see Strong-Named Assemblies and How to: Sign an Assembly with a Strong Name.

Программа строгих имен автоматически устанавливается вместе с Visual Studio.The Strong Name tool is automatically installed with Visual Studio. Программу можно запустить из командной строки разработчика (или из командной строки Visual Studio в Windows 7).To start the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Дополнительные сведения см. в разделе Командные строки.For more information, see Command Prompts.

Примечание

На 64-разрядных компьютерах можно запустить 32-разрядную версию программы Sn.exe через командную строку разработчика для Visual Studio и 64-разрядную версию через командную строку Visual Studio x64 Win64.On 64-bit computers, run the 32-bit version of Sn.exe by using the Developer Command Prompt for Visual Studio and the 64-bit version by using the Visual Studio x64 Win64 Command Prompt.

В командной строке введите следующее.At the command prompt, type the following:

СинтаксисSyntax

sn [-quiet][option [parameter(s)]]  

ПараметрыParameters

ПараметрOption ОписаниеDescription
-a identityKeyPairFile signaturePublicKeyFile-a identityKeyPairFile signaturePublicKeyFile Создает данные AssemblySignatureKeyAttribute для переноса из файла ключа удостоверения в ключ подписи.Generates AssemblySignatureKeyAttribute data to migrate the identity key to the signature key from a file.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile Создает данные AssemblySignatureKeyAttribute для переноса из контейнера ключей ключа удостоверения в ключ подписи.Generates AssemblySignatureKeyAttribute data to migrate the identity key to the signature key from a key container.
-c [csp]-c [csp] Задается поставщик служб шифрования (CSP), используемый по умолчанию для подписывания строгим именем.Sets the default cryptographic service provider (CSP) to use for strong name signing. Этот параметр применяется к компьютеру в целом.This setting applies to the entire computer. Если имя поставщика служб шифрования не задано, программа Sn.exe удалит текущее значение.If you do not specify a CSP name, Sn.exe clears the current setting.
-d container-d container Удаляет указанный контейнер ключей из поставщика служб шифрования со строгими именами.Deletes the specified key container from the strong name CSP.
-D assembly1 assembly2-D assembly1 assembly2 Проверяет, что две сборки отличаются только подписью.Verifies that two assemblies differ only by signature. Данный подход часто используется как средство проверки после того, как сборка была повторно подписана с помощью другой пары ключей.This is often used as a check after an assembly has been re-signed with a different key pair.
-e assembly outfile-e assembly outfile Извлекает открытый ключ из сборки assembly и записывает его в файл outfile.Extracts the public key from assembly and stores it in outfile.
-h-h Отображает синтаксис команд и параметров программы.Displays command syntax and options for the tool.
-i infile container-i infile container Устанавливает в указанный контейнер ключей пару ключей из файла infile.Installs the key pair from infile in the specified key container. Контейнер ключей располагается в поставщике служб шифрования со строгими именами.The key container resides in the strong name CSP.
-k [keysize] outfile-k [keysize] outfile Создает новый ключ RSACryptoServiceProvider указанного размера и записывает его в указанный файл.Generates a new RSACryptoServiceProvider key of the specified size and writes it to the specified file. В файл записываются и открытый, и закрытый ключи.Both a public and private key are written to the file.

Если размер ключа не задан, по умолчанию создается 1024-разрядный ключ при условии, что установлен усовершенствованный поставщик служб шифрования (Microsoft); в противном случае создается 512-разрядный ключ.If you do not specify a key size, a 1,024-bit key is generated by default if you have the Microsoft enhanced cryptographic provider installed; otherwise, a 512-bit key is generated.

Параметр keysize поддерживает ключи длиной от 384 до 16 384 бит с приращениями по 8 бит, если установлен усовершенствованный поставщик служб шифрования (Майкрософт).The keysize parameter supports key lengths from 384 bits to 16,384 bits in increments of 8 bits if you have the Microsoft enhanced cryptographic provider installed. Он поддерживает ключи длиной от 384 до 512 бит с приращениями по 8 бит, если установлен базовый поставщик служб шифрования (Microsoft).It supports key lengths from 384 bits to 512 bits in increments of 8 bits if you have the Microsoft base cryptographic provider installed.
-m [y | n]-m [y | n] Задает зависимость контейнеров ключей от компьютера или пользователя.Specifies whether key containers are computer-specific, or user-specific. Если задано значение y, контейнеры ключей зависят от компьютера.If you specify y, key containers are computer-specific. Если задано значение n, контейнеры ключей зависят от пользователя.If you specify n, key containers are user-specific.

Если не задан ни один из параметров, этот параметр отобразит текущее значение.If neither y nor n is specified, this option displays the current setting.
-o infile [outfile]-o infile [outfile] Извлекает открытый ключ из файла infile и сохраняет его в CSV-файле.Extracts the public key from the infile and stores it in a .csv file. Байты открытого ключа разделяются запятыми.A comma separates each byte of the public key. Этот формат удобно применять для жесткого задания в исходном коде ссылок на ключи в виде инициализированных массивов.This format is useful for hard-coding references to keys as initialized arrays in source code. Если параметр outfile не указан, выходные данные будут помещены в буфер обмена.If you do not specify an outfile, this option places the output on the Clipboard. Примечание. Данный параметр не проверяет, содержится ли во входном файле что-либо, помимо открытого ключа.Note: This option does not verify that the input is only a public key. Если infile содержит пару ключей, в том числе закрытый ключ, последний также извлекается.If the infile contains a key pair with a private key, the private key is also extracted.
-p infile outfile [hashalg]-p infile outfile [hashalg] Извлекает открытый ключ из пары ключей в файле infile и сохраняет его в файле outfile, при необходимости используя алгоритм RSA, указанный в параметре hashalg.Extracts the public key from the key pair in infile and stores it in outfile, optionally using the RSA algorithm specified by hashalg. Полученный открытый ключ можно использовать для отложенной подписи сборки с помощью параметров /delaysign+ и /keyfile компоновщика сборок (Al.exe).This public key can be used to delay-sign an assembly using the /delaysign+ and /keyfile options of the Assembly Linker (Al.exe). Если применяется отложенная подпись сборки, во время компиляции задается только открытый ключ, а в файле выделяется место для подписи, которая будет добавлена позднее, когда станет известен закрытый ключ.When an assembly is delay-signed, only the public key is set at compile time and space is reserved in the file for the signature to be added later, when the private key is known.
-pc container outfile [hashalg]-pc container outfile [hashalg] Извлекает открытый ключ из пары ключей, хранящейся в параметре container, и записывает его в файл outfile.Extracts the public key from the key pair in container and stores it in outfile. Если указан параметр hashalg, для извлечения открытого ключа используется алгоритм RSA.If you use the hashalg option, the RSA algorithm is used to extract the public key.
-Pb [y | n]-Pb [y | n] Указывает, применяется ли политика пропускания строгих имен.Specifies whether the strong-name bypass policy is enforced. Если задан параметр y, строгие имена сборок с полным доверием не проверяются при загрузке в объект AppDomain с полным доверием.If you specify y, strong names for full-trust assemblies are not validated when loaded into a full-trust AppDomain. Если задан параметр n, проверяется правильность строгих имен, но не проверяется их соответствие конкретному строгому имени.If you specify n, strong names are validated for correctness, but not for a specific strong name. Класс StrongNameIdentityPermission не применяется к сборкам с полным доверием.The StrongNameIdentityPermission has no effect on full-trust assemblies. Проверку на соответствие строгих имен необходимо выполнять отдельно.You must perform your own check for a strong name match.

Если не задан ни один параметр y и n, отображается текущее значение.If neither y nor n is specified, this option displays the current setting. Значение по умолчанию — y.The default is y. Примечание. На 64-разрядных компьютерах значение этого параметра необходимо задавать и в 32-разрядном, и в 64-разрядном экземплярах программы Sn.exe.Note: On 64-bit computers, you must set this parameter in both the 32-bit and the 64-bit instances of Sn.exe.
-q[uiet]-q[uiet] Задает тихий режим и отключает отображение сообщений об успешно выполненных операциях.Specifies quiet mode; suppresses the display of success messages.
-R[a] assembly infile-R[a] assembly infile Повторно подписывает ранее подписанную сборку или сборку с отложенной подписью с помощью пары ключей, содержащейся в файле infile.Re-signs a previously signed or delay-signed assembly with the key pair in infile.

Если указан параметр -Ra, для всех файлов в сборке заново вычисляются хэши.If -Ra is used, hashes are recomputed for all files in the assembly.
-Rc[a] assembly container-Rc[a] assembly container Повторно подписывает ранее подписанную сборку или сборку с отложенной подписью с помощью пары ключей, содержащихся в контейнере container.Re-signs a previously signed or delay-signed assembly with the key pair in container.

Если указан параметр -Rca, для всех файлов в сборке заново вычисляются хэши.If -Rca is used, hashes are recomputed for all files in the assembly.
-Rh assembly-Rh assembly Повторно вычисляет хэши для всех файлов сборки.Recomputes hashes for all files in the assembly.
-t[p] infile-t[p] infile Отображает токен открытого ключа, который хранится в файле infile.Displays the token for the public key stored in infile. Файл infile должен содержать открытый ключ, который был ранее создан из файла пары ключей с использованием параметра -p.The contents of infile must be a public key previously generated from a key pair file using -p. Не используйте параметр -t[p] для непосредственного извлечения токена из файла пары ключей.Do not use the -t[p] option to extract the token directly from a key pair file.

Программа Sn.exe вычисляет токен с помощью функции хэширования открытого ключа.Sn.exe computes the token by using a hash function from the public key. В целях экономии места среда CLR сохраняет токены открытого ключа в манифесте как часть ссылки на другую сборку при записи зависимости от сборки со строгим именем.To save space, the common language runtime stores public key tokens in the manifest as part of a reference to another assembly when it records a dependency to an assembly that has a strong name. При указании параметра -tp наряду с токеном отображается открытый ключ.The -tp option displays the public key in addition to the token. Если атрибут AssemblySignatureKeyAttribute был применен к сборке, токен предназначается для ключа удостоверения, и отображаются имя алгоритма хэширования и ключ удостоверения.If the AssemblySignatureKeyAttribute attribute has been applied to the assembly, the token is for the identity key, and the name of the hash algorithm and the identity key is displayed.

Следует иметь в виду, что данный параметр не проверяет подпись сборки, и его не следует использовать для принятия решений о доверии.Note that this option does not verify the assembly signature and should not be used to make trust decisions. Этот параметр лишь отображает необработанные данные токена открытого ключа.This option only displays the raw public key token data.
-T[p] assembly-T[p] assembly Отображает токен открытого ключа для сборки assembly.Displays the public key token for assembly. Параметр assembly должен содержать имя файла, который содержит манифест сборки.The assembly must be the name of a file that contains an assembly manifest.

Программа Sn.exe вычисляет токен с помощью функции хэширования открытого ключа.Sn.exe computes the token by using a hash function from the public key. В целях экономии места среда выполнения сохраняет токены открытого ключа в манифесте как часть ссылки на другую сборку при записи зависимости от сборки со строгим именем.To save space, the runtime stores public key tokens in the manifest as part of a reference to another assembly when it records a dependency to an assembly that has a strong name. При указании параметра -Tp наряду с токеном отображается открытый ключ.The -Tp option displays the public key in addition to the token. Если атрибут AssemblySignatureKeyAttribute был применен к сборке, токен предназначается для ключа удостоверения, и отображаются имя алгоритма хэширования и ключ удостоверения.If the AssemblySignatureKeyAttribute attribute has been applied to the assembly, the token is for the identity key, and the name of the hash algorithm and the identity key is displayed.

Следует иметь в виду, что данный параметр не проверяет подпись сборки, и его не следует использовать для принятия решений о доверии.Note that this option does not verify the assembly signature and should not be used to make trust decisions. Этот параметр лишь отображает необработанные данные токена открытого ключа.This option only displays the raw public key token data.
-TS assembly infile-TS assembly infile Выполняет пробное подписание полностью или частично подписанной сборки assembly с использованием пары ключей из файла infile.Test-signs the signed or partially signed assembly with the key pair in infile.
-TSc assembly container-TSc assembly container Выполняет пробное подписание полностью или частично подписанной сборки assembly с использованием пары ключей из контейнера ключей container.Test-signs the signed or partially signed assembly with the key pair in the key container container.
-v assembly-v assembly Проверяет строгое имя в сборке assembly, где assembly представляет собой имя файла, содержащего манифест сборки.Verifies the strong name in assembly, where assembly is the name of a file that contains an assembly manifest.
-vf assembly-vf assembly Проверяет строгое имя в сборке assembly.Verifies the strong name in assembly. В отличие от параметра -v, при использовании параметра -vf проверка производится, даже если она отключена с помощью параметра -Vr.Unlike the -v option, -vf forces verification even if it is disabled using the -Vr option.
-Vk regfile.reg assembly [userlist] [infile]-Vk regfile.reg assembly [userlist] [infile] Создает файл регистрационных записей (файл с расширением REG), который можно использовать для регистрации указанной сборки для пропуска проверки.Creates a registration entries (.reg) file you can use to register the specified assembly for verification skipping. Правила присвоения имен сборкам, которые применяются к параметру -Vr, также применяются к параметру -Vk.The rules for assembly naming that apply to the -Vr option apply to –Vk as well. Дополнительные сведения о параметрах userlist и infile см. в описании параметра –Vr.For information about the userlist and infile options, see the –Vr option.
-Vl-Vl Отображает список текущих параметров проверки строгих имен на данном компьютере.Lists current settings for strong-name verification on this computer.
-Vr assembly [userlist] [infile]-Vr assembly [userlist] [infile] Регистрирует сборку assembly для пропуска проверки.Registers assembly for verification skipping. При необходимости можно указать разделенный запятыми список имен пользователей, для которых проверка должна пропускаться.Optionally, you can specify a comma-separated list of user names the skip verification should apply to. Если задан файл infile, проверка будет выполняться, но в ней будет использоваться открытый ключ, находящийся в файле infile.If you specify infile, verification remains enabled, but the public key in infile is used in verification operations. Параметр assembly может быть задан в формате *, strongname, чтобы зарегистрировать все сборки с указанным строгим именем.You can specify assembly in the form *, strongname to register all assemblies with the specified strong name. Для параметра strongname должна быть задана строка шестнадцатеричных цифр, представляющих открытый ключ в форме токена.For strongname, specify the string of hexadecimal digits representing the tokenized form of the public key. Сведения об отображении токена открытого ключа см. в описании параметров -t и -T.See the -t and -T options to display the public key token. Внимание! Используйте этот параметр только во время разработки.Caution: Use this option only during development. При добавлении сборки в список непроверяемых сборок создается уязвимость в системе безопасности.Adding an assembly to the skip verification list creates a security vulnerability. Вредоносная сборка может использовать полное имя сборки (имя сборки, версия, язык и региональные параметры, маркер открытого ключа), добавленное в список непроверяемых, с целью подделки ее идентификации.A malicious assembly could use the fully specified assembly name (assembly name, version, culture, and public key token) of the assembly added to the skip verification list to fake its identity. Данный подход позволяет вредоносной сборке также избежать проверки.This would allow the malicious assembly to also skip verification.
-Vu assembly-Vu assembly Отменяет регистрацию сборки assembly для пропуска проверки.Unregisters assembly for verification skipping. Правила присвоения имен сборкам, которые применяются для параметра -Vr, также применяются к параметру -Vu.The same rules for assembly naming that apply to -Vr apply to -Vu.
-Vx-Vx Удаляет все записи о пропуске проверки.Removes all verification-skipping entries.
-?-? Отображает синтаксис команд и параметров программы.Displays command syntax and options for the tool.

Примечание

Все параметры программы Sn.exe зависят от регистра и должны вводиться в точном соответствии с инструкциями выше, чтобы программа их правильно распознала.All Sn.exe options are case-sensitive and must be typed exactly as shown to be recognized by the tool.

ПримечанияRemarks

Параметры -R и –Rc можно использовать для сборок с отложенной подписью.The -R and –Rc options are useful with assemblies that have been delay-signed. При этом во время компиляции задается только открытый ключ, а подпись выполняется позднее, когда становится известен закрытый ключ.In this scenario, only the public key has been set at compile time and signing is performed later, when the private key is known.

Примечание

Для параметров (например, -Vr), которые осуществляют запись в защищенные ресурсы, такие как реестр, программу SN.exe следует запускать от имени администратора.For parameters (for example, –Vr) that write to protected resources such as the registry, run SN.exe as an administrator.

Средство строгих имен поддерживает пары открытого и закрытого ключей, созданные с помощью идентификатора алгоритма AT_SIGNATURE.The Strong Name tool assumes that public/private key pairs are generated with the AT_SIGNATURE algorithm identifier. При использовании пар открытого и закрытого ключей, созданных с помощью алгоритма AT_KEYEXCHANGE, возникает ошибка.Public/private key pairs generated with the AT_KEYEXCHANGE algorithm generate an error.

ПримерыExamples

Следующая команда создает новую пару случайных ключей, которая сохраняется в файле keyPair.snk.The following command creates a new, random key pair and stores it in keyPair.snk.

sn -k keyPair.snk  

Следующая команда сохраняет ключ из файла keyPair.snk в контейнере MyContainer поставщика служб шифрования со строгими именами.The following command stores the key in keyPair.snk in the container MyContainer in the strong name CSP.

sn -i keyPair.snk MyContainer  

Следующая команда извлекает открытый ключ из файла keyPair.snk и сохраняет его в файле publicKey.snk.The following command extracts the public key from keyPair.snk and stores it in publicKey.snk.

sn -p keyPair.snk publicKey.snk  

Следующая команда отображает открытый ключ и его токен, которые содержатся в файле publicKey.snk.The following command displays the public key and the token for the public key contained in publicKey.snk.

sn -tp publicKey.snk  

Следующая команда проверяет сборку MyAsm.dll.The following command verifies the assembly MyAsm.dll.

sn -v MyAsm.dll  

Следующая команда удаляет MyContainer из поставщика служб шифрования со строгими именами, используемого по умолчанию.The following command deletes MyContainer from the default CSP.

sn -d MyContainer  

См. такжеSee also