Sn.exe (Ferramenta de Nome Forte)

A ferramenta Nome Forte (Sn.exe) ajuda a assinar assemblagens com nomes fortes. Sn.exe fornece opções para gestão de chaves, geração de assinaturas e verificação de assinaturas.

Aviso

Não dependa de nomes fortes para segurança. Fornecem apenas uma identidade exclusiva.

Para obter mais informações sobre nomes fortes e assemblagens com nome forte, consulte Assemblagens com Nome Forte e Procedimentos: Assinar uma Assemblagem com um Nome Forte.

A ferramenta Nome Forte é instalada automaticamente com o Visual Studio. Para iniciar a ferramenta, utilize a Linha de Comandos para Programadores do Visual Studio ou o PowerShell para Programadores do Visual Studio.

Nota

Em computadores de 64 bits, execute a versão de 32 bits do Sn.exe utilizando a Linha de Comandos do Programador para Visual Studio e a versão de 64 bits com a Linha de Comandos Win64 do Visual Studio x64.

Na linha de comandos, escreva o seguinte:

Sintaxe

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

Parâmetros

Opção Descrição
-a identityKeyPairFile signaturePublicKeyFile AssemblySignatureKeyAttribute Gera dados para migrar a chave de identidade para a chave de assinatura a partir de um ficheiro.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile AssemblySignatureKeyAttribute Gera dados para migrar a chave de identidade para a chave de assinatura a partir de um contentor de chaves.
-c [csp] Define o fornecedor de serviços criptográficos (CSP) predefinido para utilizar para assinatura de nomes fortes. Esta definição aplica-se a todo o computador. Se não especificar um nome CSP, Sn.exe limpa a definição atual.
-d container Elimina o contentor de chaves especificado do nome forte CSP.
-D assembly1 assembly2 Verifica se duas assemblagens diferem apenas por assinatura. Isto é frequentemente utilizado como uma verificação depois de uma assemblagem ter sido reassinada com um par de teclas diferente.
-e assembly outfile Extrai a chave pública da assemblagem e armazena-a em outfile.
-h Apresenta a sintaxe do comando e as opções da ferramenta.
-i infile container Instala o par de chaves a partir de infile no contentor de chaves especificado. O contentor de chaves reside no nome forte CSP.
-k [keysize] outfile Gera uma nova RSACryptoServiceProvider chave do tamanho especificado e escreve-a no ficheiro especificado. As chaves públicas e privadas são escritas no ficheiro.

Se não especificar um tamanho de chave, é gerada uma chave de 1024 bits por predefinição se tiver o fornecedor de criptográfico melhorado da Microsoft instalado; caso contrário, é gerada uma chave de 512 bits.

O parâmetro keysize suporta comprimentos de chave de 384 bits a 16.384 bits em incrementos de 8 bits se tiver o fornecedor criptográfico melhorado da Microsoft instalado. Suporta comprimentos de chave de 384 bits a 512 bits em incrementos de 8 bits se tiver o fornecedor criptográfico base da Microsoft instalado.
-m [y or n] Especifica se os contentores de chaves são específicos do computador ou específicos do utilizador. Se especificar y, os contentores de chaves são específicos do computador. Se especificar n, os contentores de chaves são específicos do utilizador.

Se não for especificado nem y nem n, esta opção apresenta a definição atual.
-o infile [outfile] Extrai a chave pública do ficheiro infile e armazena-a num ficheiro .csv. Uma vírgula separa cada byte da chave pública. Este formato é útil para referências de hard-coding a chaves como matrizes inicializadas no código fonte. Se não especificar um ficheiro, esta opção coloca o resultado na Área de Transferência. Nota: Esta opção não verifica se a entrada é apenas uma chave pública. Se o infile contém um par de chaves com uma chave privada, a chave privada também é extraída.
-p infile outfile [hashalg] Extrai a chave pública do par de chaves em infile e armazena-a no ficheiro, opcionalmente utilizando o algoritmo RSA especificado pelo hashalg. Esta chave pública pode ser utilizada para atrasar a assinatura de uma assemblagem com as opções /delaysign+ e /keyfile do Assembly Linker (Al.exe). Quando uma assemblagem é assinada com atraso, apenas a chave pública é definida no tempo de compilação e o espaço é reservado no ficheiro para que a assinatura seja adicionada mais tarde, quando a chave privada for conhecida.
-pc container outfile [hashalg] Extrai a chave pública do par de chaves no contentor e armazena-a em outfile. Se utilizar a opção hashalg , o algoritmo RSA é utilizado para extrair a chave pública.
-Pb [y or n] Especifica se a política de ignorar nome forte é imposta. Se especificar y, os nomes fortes para assemblagens de confiança completa não são validados quando carregados para uma fidedignidade AppDomaintotal. Se especificar n, os nomes fortes são validados para correção, mas não para um nome forte específico. O StrongNameIdentityPermission não tem qualquer efeito nas assemblagens de confiança total. Tem de efetuar a sua própria verificação para uma correspondência de nome forte.

Se nem for y especificado, n esta opção apresenta a definição atual. A predefinição é y. Nota: Em computadores de 64 bits, tem de definir este parâmetro nas instâncias de 32 bits e de 64 bits de Sn.exe.
-q[uiet] Especifica o modo de sossego; suprime a apresentação de mensagens de êxito.
-R[a] assembly infile Volte a assinar uma assemblagem assinada anteriormente ou com atraso com o par de chaves infile.

Se -Ra for utilizado, os hashes são recomputados para todos os ficheiros na assemblagem.
-Rc[a] assembly container Volte a assinar uma assemblagem assinada anteriormente ou com atraso com o par de chaves no contentor.

Se -Rca for utilizado, os hashes são recomputados para todos os ficheiros na assemblagem.
-Rh assembly Recompila os hashes para todos os ficheiros na assemblagem.
-t[p] infile Apresenta o token da chave pública armazenada no infile. O conteúdo do infile tem de ser uma chave pública gerada anteriormente a partir de um ficheiro de par de chaves com -p. Não utilize a opção -t[p] para extrair o token diretamente de um ficheiro de par de chaves.

Sn.exe calcula o token com uma função hash da chave pública. Para poupar espaço, o runtime de linguagem comum armazena tokens de chaves públicas no manifesto como parte de uma referência a outra assemblagem quando regista uma dependência de uma assemblagem com um nome forte. A opção -tp apresenta a chave pública para além do token. Se o AssemblySignatureKeyAttribute atributo tiver sido aplicado à assemblagem, o token é para a chave de identidade e o nome do algoritmo hash e a chave de identidade são apresentados.

Tenha em atenção que esta opção não verifica a assinatura de assemblagem e não deve ser utilizada para tomar decisões de confiança. Esta opção apenas apresenta os dados de tokens de chave pública não processados.
-T[p] assembly Apresenta o token de chave pública para assemblagem. A assemblagem tem de ser o nome de um ficheiro que contenha um manifesto de assemblagem.

Sn.exe calcula o token com uma função hash da chave pública. Para poupar espaço, o runtime armazena tokens de chaves públicas no manifesto como parte de uma referência a outra assemblagem quando regista uma dependência de uma assemblagem com um nome forte. A opção -Tp apresenta a chave pública para além do token. Se o AssemblySignatureKeyAttribute atributo tiver sido aplicado à assemblagem, o token é para a chave de identidade e o nome do algoritmo hash e a chave de identidade são apresentados.

Tenha em atenção que esta opção não verifica a assinatura de assemblagem e não deve ser utilizada para tomar decisões de confiança. Esta opção apenas apresenta os dados de tokens de chave pública não processados.
-TS assembly infile Teste os sinais da assemblagem assinada ou parcialmente assinada com o par de chaves infile.
-TSc assembly container Teste os sinais da assemblagem assinada ou parcialmente assinada com o par de chaves no contentor de chaves.
-v assembly Verifica o nome forte na assemblagem, em que assemblagem é o nome de um ficheiro que contém um manifesto de assemblagem.
-vf assembly Verifica o nome forte na assemblagem. Ao contrário da opção -v , -vf força a verificação, mesmo que esteja desativada com a opção -Vr .
-Vk regfile.reg assembly [userlist] [infile] Cria um ficheiro de entradas de registo (.reg) que pode utilizar para registar a assemblagem especificada para ignorar a verificação. As regras para a nomenclatura de assemblagem que se aplicam à opção -Vr também se aplicam a –Vk . Para obter informações sobre a lista de utilizadores e as opções de infile , consulte a opção –Vr .
-Vl Lista as definições atuais para verificação de nome forte neste computador.
-Vr assembly [userlist] [infile] Regista a assemblagem para ignorar a verificação. Opcionalmente, pode especificar uma lista separada por vírgulas de nomes de utilizador aos quais a verificação ignorar deve ser aplicada. Se especificar infile, a verificação permanece ativada, mas a chave pública no infile é utilizada nas operações de verificação. Pode especificar assemblagem no formulário *, strongname para registar todas as assemblagens com o nome forte especificado. Para strongname, especifique a cadeia de dígitos hexadecimais que representam a forma tokenizada da chave pública. Veja as opções -t e -T para apresentar o token de chave pública. Atenção: Utilize esta opção apenas durante o desenvolvimento. Adicionar uma assemblagem à lista ignorar verificação cria uma vulnerabilidade de segurança. Uma assemblagem maliciosa poderia utilizar o nome de assemblagem totalmente especificado (nome da assemblagem, versão, cultura e token de chave pública) da assemblagem adicionada à lista de verificação de ignorar para falsificar a respetiva identidade. Isto permitiria que a assemblagem maliciosa também ignorasse a verificação.
-Vu assembly Anule o registo da assemblagem para ignorar a verificação. As mesmas regras para a nomenclatura de assemblagem que se aplicam a -Vraplicam-se a -Vu.
-Vx Remove todas as entradas que ignoram a verificação.
-? Apresenta a sintaxe do comando e as opções da ferramenta.

Nota

Todas as Sn.exe opções são sensíveis às maiúsculas e minúsculas e têm de ser digitadas exatamente conforme mostrado para serem reconhecidos pela ferramenta.

Observações

As opções -R e –Rc são úteis com assemblagens assinadas por atraso. Neste cenário, apenas a chave pública foi definida no momento da compilação e a assinatura é efetuada mais tarde, quando a chave privada é conhecida.

Nota

Para parâmetros (por exemplo, –Vr) que escrevem em recursos protegidos, como o registo, execute SN.exe como administrador.

A ferramenta Nome Forte pressupõe que os pares de chaves públicas/privadas são gerados com o identificador de AT_SIGNATURE algoritmo. Os pares de chaves públicas/privadas gerados com o AT_KEYEXCHANGE algoritmo geram um erro.

Exemplos

O comando seguinte cria um novo par de chaves aleatórios e armazena-o no keyPair.snk.

sn -k keyPair.snk

O seguinte comando armazena a chave no keyPair.snk contentor MyContainer no nome forte CSP.

sn -i keyPair.snk MyContainer

O seguinte comando extrai a chave pública de keyPair.snk e armazena-a no publicKey.snk.

sn -p keyPair.snk publicKey.snk

O seguinte comando apresenta a chave pública e o token da chave pública contida em publicKey.snk.

sn -tp publicKey.snk

O seguinte comando verifica a assemblagem MyAsm.dll.

sn -v MyAsm.dll

O seguinte comando elimina MyContainer do CSP predefinido.

sn -d MyContainer

Ver também