[독서 노트].NET 본질론 제2장-Components(Part Two,public key)
2390 단어 component
CLR은 프로그램 집합이 발표된 후에 변경되는 것을 방지하고 유일하게 발표자를 확정할 수 있다.이 서명 방법은 공공 키 개인 키 파일을 사용한 다음 프로그램 집합의 모든 모듈에 해시를 가져와 디지털 서명을 만들고 프로그램 집합의 메타데이터에 놓는 것입니다.
현재 CLR 버전에서는 RSA 공개 키/개인 키 및 Secure Hash Algorithm(SHA)을 사용하여 디지털 서명을 만듭니다.
SDK에 strong name tool, SN.exe, 이 도구를 사용하면 공공 키 개인 키 쌍을 생성할 수 있습니다.
sn -k publicprivate.snk
이렇게publicprivate.snk 이 파일에는 공개 키와 개인 키가 포함되어 있습니다 (개인 키 436 바이트, 공개 키는 128 바이트와 32 바이트의 머리로 구성됩니다)
그러나 개인 키라는 것은 밀급이 매우 높다(대기업은 개인 키를 엄밀하게 사용하는 신청 제도를 제정해야 한다). 우리는 프로그램을 작성할 때 테스트를 자주 배치해야 한다. 매번 개인 키 서명을 한 번씩 신청할 수는 없잖아.마이크로소프트도 이 점을 생각해서 우리가 공개 키 서명만 사용할 수 있도록 허락했다. 공개 키는 공개된 것이기 때문에 이것은 비밀 문제와 관련이 없다.SN.exe는 공개 키 개인 키 파일에서 공개 키를 꺼내서 새 파일을 생성할 수 있습니다.
sn –p publicprivate.snk public.snk
이렇게snk에는 공개 키만 포함되어 있습니다. 이 파일을 모든 개발자에게 안심하고 발표할 수 있습니다. 하지만 이것은 테스트할 때만 사용할 수 있습니다. 발표할 때 이것을 사용하면 변경 방지나 아무 소용이 없습니다.왜 그랬을까?
공개 키 파일 서명을 사용할 때 프로그램 집합에 다음과 같은 기능을 사용합니다.
using System.Reflection;
[assembly:AssemblyKeyFile("public.snk")]
[assembly:AssemblyDelaySign(false)]
이 Assembly Delay Sign을 주의하십시오. 서명을 지연시킨다는 뜻입니다. 실제 발표될 때 개인 키로 서명합니다.
만약 이런 방식으로 서명을 한다면, 생성된 프로그램 집합 서명은 그곳에 비어 있고, 프로그램 집합 데이터에는 공개 키만 있을 것이다.
자, 이제 프로그램이 발표됩니다. 공개 키 키 파일을 가져와서 vs로 프로그램을 다시 컴파일하는 것이 어떻습니까?물론 아니야, 때로는 프로그램 코드가 매우 커서 다시 한 번 컴파일하기가 쉽지 않아.
SN.exe에는 프로그램 집합에 다시 서명할 수 있는 명령줄 스위치가 하나 더 있습니다. 바로 아까 빈 곳에 진정한 서명을 기입하는 것입니다.
sn –R mylib.dll publicprivate.snk
여기에 사용된 것은publicprivate입니다.snk, 바로 개인 키를 포함하는 파일입니다.
여기 얘기 끝났는데 왜 또 퍼블릭 키 토큰이 있죠?
public 키가 128 바이트나 된다고 생각하십니까? 프로그램 집합 이름을 인용해서 프로그램 집합을 인용할 때 이것을 가지고 갑니까?그리고 프로그램 집합의 메타데이터에 이 프로그램 집합이 인용한 프로그램 집합의 모든 정보를 기록했다면 얼마나 큰 정보를 모두 기록해야 하는가.만약 퍼블릭 키 토큰이라는 물건을 만들면, 이 물건은 8바이트, SN.exe에도 공개 키에서 public key token을 생성하는 스위치가 있습니다.
sn –t public.snk
이렇게 하면 프로그램 집합을 인용하여 이런 문자열을 사용할 수 있습니다.
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35
그렇다면 이 퍼블릭 키 토큰은 어떻게 얻었을까요?알고리즘 단계는 다음과 같습니다.
1、SHA1 알고리즘을 사용하여public 키에서 해시 값을 얻다
2. 이 해시 값의 마지막 8 바이트를 꺼낸다
3、그리고 이 8 바이트를 거꾸로 배열하세요
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Angular의 DI는 구성 요소를 더 스마트하게 만들 수 있습니다.Angular에 내장된 종속성 주입은 매우 강력하며 오늘 우리는 이를 사용하여 구성 요소를 스마트하게 만드는 방법을 살펴보겠습니다. 버튼 구성요소에 대해 알아보겠습니다. 여기에서 버튼 구성 요소가 다양한 구성 옵션을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.