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. 강력한 이름은 고유한 ID를 제공할 뿐입니다.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. 이 도구를 시작하려면 개발자 명령 프롬프트(또는 Windows 7의 Visual Studio 명령 프롬프트)를 사용합니다.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비트 컴퓨터에서는 Visual Studio 명령 프롬프트를 사용하여 32비트 Sn.exe 버전을 실행하고 Visual Studio x64 Win64 명령 프롬프트를 사용하여 64비트 버전을 실행합니다.On 64-bit computers, run the 32-bit version of Sn.exe by using the Visual Studio Command Prompt 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 ID 키를 파일의 서명 키로 마이그레이션하기 위해 AssemblySignatureKeyAttribute 데이터를 생성합니다.Generates AssemblySignatureKeyAttribute data to migrate the identity key to the signature key from a file.
-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile-ac identityPublicKeyFile identityKeyPairContainer signaturePublicKeyFile ID 키를 키 컨테이너의 서명 키로 마이그레이션하기 위해 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. CSP 이름을 지정하지 않으면 현재 설정이 지워집니다.If you do not specify a CSP name, Sn.exe clears the current setting.
-d container-d container 지정된 키 컨테이너를 강력한 이름 CSP에서 삭제합니다.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. 키 컨테이너는 강력한 이름 CSP에 상주합니다.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.

키 크기를 지정하지 않으면 Microsoft 고급 암호화 공급자가 설치된 경우 기본적으로 1,024비트 키가 생성되고 그러지 않은 경우 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 매개 변수는 Microsoft 고급 암호화 공급자가 설치된 경우 8비트씩 증가시킬 수 있는 384비트에서 16,384비트까지의 키 길이를 지원합니다.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. Microsoft Base Cryptographic Provider가 설치되어 있는 경우에는 길이가 384 - 512비트(8비트 단위로 증가)인 키를 지원합니다.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.

y나 n을 모두 지정하지 않으면 현재 설정이 표시됩니다.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에 저장하며, 이 경우 hashalg에서 지정된 RSA 알고리즘을 선택적으로 사용합니다.Extracts the public key from the key pair in infile and stores it in outfile, optionally using the RSA algorithm specified by hashalg. 이 공개 키는 어셈블리 링커(Al.exe)/delaysign+/keyfile 옵션을 사용하여 어셈블리 서명을 연기하는 데 사용될 수 있습니다.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.

yn을 모두 지정하지 않으면 현재 설정이 표시됩니다.If neither y nor n is specified, this option displays the current setting. 기본값은 y입니다.The default is y. 참고: 64비트 컴퓨터에서는 Sn.exe의 32비트 및 64비트 인스턴스 모두에 이 매개 변수를 설정해야 합니다.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. 공용 언어 런타임에서는 공간을 절약하기 위해 강력한 이름을 가진 어셈블리에 대한 종속성을 기록할 때 매니페스트의 공개 키 토큰을 다른 어셈블리에 대한 참조의 일부로 저장합니다.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 특성이 어셈블리에 적용된 경우 토큰은 ID 키용이며 해시 알고리즘의 이름 및 ID 키가 표시됩니다.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 특성이 어셈블리에 적용된 경우 토큰은 ID 키용이며 해시 알고리즘의 이름 및 ID 키가 표시됩니다.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 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. userlistinfile 옵션에 대한 자세한 내용은 –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으로 공개 키의 토큰 형식을 나타내는 16진수 문자열을 지정합니다.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. 악의적인 어셈블리가 확인 건너뛰기 목록에 추가된 어셈블리의 정규화된 어셈블리 이름(어셈블리 이름, 버전, culture 및 공개 키 토큰)을 사용하여 해당 어셈블리의 ID를 모방할 수 있습니다.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.

예제Examples

다음 명령을 사용하여 난수 키 쌍을 새로 만들어 keyPair.snk에 저장합니다.The following command creates a new, random key pair and stores it in keyPair.snk.

sn -k keyPair.snk  

다음 명령을 사용하여 keyPair.snk에 있는 키를 강력한 이름 CSP의 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  

다음 명령을 사용하여 기본 CSP에서 MyContainer를 삭제합니다.The following command deletes MyContainer from the default CSP.

sn -d MyContainer  

참고 항목See Also

도구Tools
Al.exe(어셈블리 링커)Al.exe (Assembly Linker)
강력한 이름의 어셈블리Strong-Named Assemblies
명령 프롬프트Command Prompts