.snk는 무엇입니까?


153

.snk 파일이란 무엇입니까? 나는 그것이 Strongly Named Key의 약자라는 것을 알고 있지만 그것이 무엇인지 그리고 어떻게 작동하는지에 대한 모든 설명은 내 머리 위로 넘어갑니다.

강력한 이름의 키를 사용하는 방법과 작동 방식에 대한 간단한 설명이 있습니까?

답변:


212

.snk 파일은 .NET 어셈블리에 강력한 이름을 적용하는 데 사용됩니다 . 그런 강력한 이름은

간단한 텍스트 이름, 버전 번호 및 문화권 정보 (제공된 경우) 및 공개 키 및 디지털 서명.

SNK에는 고유 한 키 쌍 (개인 및 공개 키)이 포함되어 있으며 이는 어셈블리의 고유 한 강력한 이름을 갖도록하는 데 사용할 수 있습니다. 어셈블리의 이름이 강력한 경우 어셈블리의 내용에서 "해시"가 구성되고 해시는 개인 키로 암호화됩니다. 그런 다음이 서명 된 해시는 .snk의 공개 키와 함께 어셈블리에 배치됩니다.

사람의 요구 어셈블리 강력한 이름의 무결성을 검증 할 때 나중에, 그들은 어셈블리의 내용의 해시를 구축하고, 어셈블리와 함께 해시 해독하기 위해 어셈블리에서 공개 키를 사용하여 - 두 해시가 일치하는 경우를, 조립 검증이 통과합니다.

이 방법으로 어셈블리를 확인하여 전체 응용 프로그램을 파괴 할 악의적 인 어셈블리로 교체하는 사람이 없도록하는 것이 중요합니다. 그렇기 때문에 이름이없는 어셈블리는 이름이 강한 어셈블리와 같은 방식으로 신뢰하지 않으므로 GAC에 배치 할 수 없습니다. 또한 신뢰 체인이 있습니다. 이름이 지정되지 않은 어셈블리를 참조하는 이름이 지정된 어셈블리를 생성 할 수 없습니다.

" 강한 명명의 비밀 "기사 . 이러한 개념을보다 자세하게 설명하는 데 탁월합니다. 사진과 함께.


2
이것은 .PFX로 어셈블리에 서명 할 때 실제로 컴파일 할 때마다 .SNK를 생성하는 데 실제로 사용한다는 것을 의미합니까?
Patrick

5
@Patrick no, 즉 Authenticode Signature 는 서명과 확인 사이에 파일이 수정되지 않았 음을 증명하지만 강력한 이름 요구 사항을 충족시키지 못합니다. 문제는 Authenticode에 강력한 이름 지정에 필요한 어셈블리 신뢰 체인이 필요하지 않기 때문에 강력한 명명 / 서명되지 않은 어셈블리에 의존하는 어셈블리에 Authenticode 서명 할 수 있다는 것입니다.
Scott Chamberlain

1
당신은 단순히 snk를 벗겨서 다른 것으로 교체 할 수 있습니다. .. 그것이 유용한 실제 시나리오를 모르겠습니다. .. 기본적으로 당신이 그것에 대한 신뢰를 쌓을 수없는 우리의 핵심 쌍입니다
Ibrahim


링크가 죽었 기 때문에 모든 사람이 주석을 읽지는 않기 때문에 답변의 링크를 @asfeynman이 제안한 링크로 업데이트하십시오.
XelaNimed

22

.Net 세계에서 SNK 파일은 컴파일 된 바이너리에 서명하는 데 사용됩니다. 이를 통해 몇 가지 일이 발생할 수 있습니다.

  1. GAC (Global Assembly Cache)에 어셈블리를 등록 할 수 있습니다 . 기본적으로 여러 사본을 유지 관리하지 않고도 동일한 컴퓨터의 여러 위치에서 참조 할 수 있습니다.
  2. 서명 된 다른 바이너리 내에서 바이너리를 사용할 수 있습니다 (서명 된 어셈블리와 관련하여 이상한 바이러스 성 동작).
  3. SNK 파일에 액세스 할 수없는 타사에서 어셈블리를 쉽게 쉽게 수정할 수 없으므로 최소한의 보안이 제공됩니다.

BizTalk Server의 작동 방식에 익숙 하지 않으므로 해당 환경에서 어떤 특정 용도로 사용되는지 밝힐 수 없다고 생각합니다.

이것이 다소 도움이 되었기를 바랍니다.


7

.snk 파일은 어셈블리를 GAC (Global Assembly Cache)에 추가 할 수 있도록 어셈블리에 서명하는 데 사용됩니다.

.snk 파일에는 키에 대한 공개 및 개인 토큰이 포함되어 있습니다. 해당 키로 일부 데이터 (또는 이진)에 서명하려는 경우 데이터에서 체크섬이 계산 된 다음 개인 토큰으로 암호화됩니다. 그런 다음 암호화 된 체크섬이 데이터에 추가됩니다. 누구나 키에서 공개 토큰을 사용하여 체크섬을 해독하고 계산 된 체크섬과 비교하여 서명 된 데이터가 변조되지 않았 음을 확인할 수 있습니다.

공개 키 암호화에 대한 자세한 내용은 http://en.wikipedia.org/wiki/Public-key_cryptography를 참조하십시오 .


4

.snk 파일은 프레임 워크 유틸리티 세트의 sn 유틸리티에 의해 생성 된 "키"의 지속적 버전입니다. 그런 다음이 파일을 사용하여 어셈블리에 '디지털 서명'합니다. 두 부분으로 된 키입니다. 개인-공개 키 조합입니다. 키의 공개 부분은 모두에게 알려져 있습니다. 개인 부분은 구성 요소 / 앱 개발자에게만 알려져 있으며 그렇게 유지해야합니다.

어셈블리에 서명하면 어셈블리에 개인 키와 해시 값을 사용하여 어셈블리에 포함 된 디지털 서명을 만듭니다. 그런 다음 어셈블리를로드하는 사람은 확인 단계를 거칩니다. 퍼블릭 키는 어셈블리가 실제로 제공되는지 여부를 확인하는 데 사용됩니다.이 경우 퍼블릭 키가 필요합니다 (어셈블리 매니페스트에 토큰 화 된 형식으로 포함됨). 어셈블리가 훼손된 경우 해시 값이 달라지고 어셈블리로드가 중단됩니다. 이것은 보안 메커니즘입니다.


3

.snk 파일은 다른 사람이 사용자 대신 자신의 어셈블리를 넣을 수 없도록하는 데 사용됩니다. 한 쌍의 암호화 / 암호 해독 키를 제공합니다.

.snk 파일을 사용하여 어셈블리에 서명하면 어셈블리 파일에서 해시 코드 값이 계산되고 개인 키를 사용하여 암호화됩니다. 그런 다음 암호화 된 "다이제스트"는 .snk 파일의 공개 키와 함께 어셈블리에 고정됩니다.

그런 다음 누군가 어셈블리를 받으면 해시 코드 값을 계산할 수도 있습니다. 공개 키를 사용하여 계산 한 키를 해독하고 계산 된 값을 비교합니다. 어셈블리가 전혀 변경되지 않은 경우 해당 값이 달라지고 어셈블리 사용자는 사용자가 제공 한 어셈블리가 아님을 알게됩니다.

BizTalk Server와 관련하여 BizTalk 솔루션에서 사용하는 사용자 지정 어셈블리를 작성하는 사람은 BizTalk 서버가 GAC에로드하여 사용할 수 있도록 .snk 파일을 사용하여 어셈블리에 서명해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.