강력한 이름 어셈블리란?
Strong Named Assembly
.Net 의 어셈블리(assembly) 이름과 버전 정보 및 몇 가지 정보를 추가하여 각 어셈블리의 유일성을 보장하는 방법을 의미한다.
Strong Named Assembly 를 이루는 구성요소는 다음과 같다.
-
Simple Name – 일반적으로 확장자를 제외한 assembly 를 포함하는 파일명
(Usually the name of the file (without the extension) that contains the assembly) -
Public Key – assembly 인증을 위한 RSA 로 된 publci 암호키
(RSA cryptographic public key that helps verify the assembly’s authenticity) -
Version – Major.Minor.Build.Revision 의 4 부분으로 된 버전 숫자
(Four-part version number, in the form of Major.Minor.Build.Revision) -
Culture – assembly 사용자를 위한 국가-언어 정보
Target audience for the assembly, such as “neutral” (default audience), “en-us” (English – United States) or “fr” (France) etc. -
Processor Architecture – assembley 포맷, 예를 들어 MSIL 이나 x86 등.
Defines the assembly’s format, such as MSIL (intermediate language) or x86 (binary for Intel x86 processors)
그럼, 일반적인 어셈블리(weak named assembly)와 차이는 무엇인가? 아래 두 가지가 표면적인 차이점이라 할 수 있다.
- 서명되지 않은 일반 어셈블리는 시스템 공용 캐쉬(GAC, General Assembly Cache)에 해당 어셈블리를 설치할 수 없다.
- 서명된 어셈블리에서 서명되지 않은 어셈블리를 직접 참조로 로드할 수 없다.
서명 키 (Signature Key)
어셈블리를 빌드시에 Digital Signature 를 어셈블리 정보에 포함시키는데(이를 어셈블리를 서명한다 고 한다), 이 과정에서 서명을 하기 위한 key 가 필요하다.
서명을 위해서는 비대칭 키(RSA알고리즘을 따르는) 쌍이 필요하다. 서명을 할때는 private key 로 서명을 하고, public key 정보를 어셈블리 정보에 포함시킴으로써, .Net CLR 에서 해당 어셈블리가 변조되지 않았음을 확인할 수 있도록 한다.
서명을 위해 사용할 수 있는 key 종류
-
snk: MS 에서 제공한 Strong Name 도구(Sn.exe)를 이용하여 RSA key 쌍을 생성할 수 있다.
-
p12 / pfx : pfx 와 p12 형식은 구분없이 동일하게 사용할 수 있다. p12 가 pfx 를 계승하여 만들어진 포맷이다.
-
password를 이용해 key 내용이 암호화 되어 있다.
보안 관점에서 key 자체의 보안성은 p12/pfx 가 snk 보다 더 높다고 볼 수 있다.
참고자료
- 마이크로소프트 문서 - https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/strong-naming
- 어셈블리 서명 - https://brutaldev.com/post/net-assembly-strong-name-signer
- 패키지 서명 - https://devblogs.microsoft.com/nuget/package-signing/
- pfx , cer , snk 차이점 - https://stackoverflow.com/questions/8174229/how-to-create-a-snk-from-pfx-cer
Strong Naming Assembly 관련한 비판
Still Strong-Naming your Assemblies? You do know it's 2016, right?
Update: Though the information and concerns in this blog post are still very true, I've actually had a change of heart and I'm now advocating to Start Strong-Naming your Assemblies! ! For far to long, Strong-Named Assemblies have been a huge rock…
www.pedrolamas.com
Update version and remove sn. · microsoft/XamlBehaviors@ceb2f68
Permalink Browse files Update version and remove sn. Loading branch information Showing 7 changed files with 8 additions and 8 deletions. +1 −1 src/BehaviorsSDKManaged/ManagedUnitTests/ManagedUnitTests.csproj +1 −1 src/BehaviorsSDKManaged/Microsoft.Xam
github.com
http://www.csharpstudy.com/DevNote/Article/2
C# 어셈블리에 사인(Sign)은 왜 하는 것일까? - C# 프로그래밍 배우기 (Learn C# Programming)
C# 어셈블리에 사인(Sign)은 왜 하는 것일까? [제목] C# 어셈블리에 사인(Sign)은 왜 하는 것일까? C# DLL (또는 EXE 파일) 어셈블리에 사인(Sign)은 왜 하는 것일까? 만약 사인하지 않는다면, 어떠한 제약사항이 있을까? 닷넷 어셈블리에 사인을 한다는 것은 해당 어셈블리의 특정 영역에 Digital Signature와 public key를 적는다는 것을 의미한다. 이 Digital Signature는 한 어셈블리의 내용이 다른 누구
www.csharpstudy.com
http://www.csharpstudy.com/DevNote/Article/3
C# 어셈블리에 Delay Sign은 왜 하는 것일까? - C# 프로그래밍 배우기 (Learn C# Programming)
C# 어셈블리에 Delay Sign은 왜 하는 것일까? [제목] C# 어셈블리에 Delay Sign은 왜 하는 것일까? 이전 아티클 (http://bit.ly/14k9d86)에서 설명한 바와 같이 어셈블리의 Digital Signature를 생성하기 위해서는 private/public key pair 중 private key를 사용하게 된다. 일반적으로 개발회사에서 이 private key는 각별한 보안을 유지 하기 때문에, 개발 기간 동안은 매 빌드마다
www.csharpstudy.com
https://evyul.tistory.com/entry/3장-공유-어셈블리와-강력한-이름의-어셈블리
3장 공유 어셈블리와 강력한 이름의 어셈블리
두 가지 어셈블리, 두 가지 배포방법 - CLR은 약한 이름의 어셈블리(Weakly Named Assembly)와 강력한 이름의 어셈블리(Strongly Name Assembly)라는 두 가지 종류의 어셈블리를 지원한다 - 두 종류의 차이점은 강..
evyul.tistory.com
'Language > C#' 카테고리의 다른 글
알아두면 쓸모 있는 .NET 이야기 (0) | 2021.08.04 |
---|