암호화는 데이터를 보거나 수정하지 못하도록 보호하고, 안전하지 않은 채널을 통해 안전한 통신 수단을 제공하는 데 도움이 될 수 있습니다. 예를 들어, 암호화 알고리즘을 사용하여 데이터를 암호화하고, 암호화된 상태로 전송한 다음, 의도한 수신자가 암호를 해독할 수 있습니다. 제3자가 암호화된 데이터를 가로채면 데이터를 해독하기가 어렵습니다.
이러한 목표를 달성하려면 암호화 기본 요소라고 하는 알고리즘과 규칙의 조합을 사용하여 암호화 체계를 만듭니다. 개인 키 암호화(대칭 암호화), 공개 키 암호화(비대칭 암호화), 암호화 서명 및 암호화 해시가 포함됩니다.
우리는 공개 키 암호화(비대칭 암호화)를 사용하여 등록 코드 알고리즘을 구현합니다.
공개 키 암호화는 권한이 없는 사용자에게 비밀로 유지되어야 하는 개인 키와 누구에게나 공개될 수 있는 공개 키를 사용합니다. 공개 키와 개인 키는 모두 수학적으로 관련되어 있습니다. 공개 키로 암호화된 데이터는 개인 키로만 해독할 수 있고, 개인 키로 서명된 데이터는 공개 키로만 확인할 수 있습니다.
등록 코드의 경우 개인 키를 사용하여 문자열(사용자 이름)에 서명한 다음 공개 키를 사용하여 서명(등록 코드)을 확인합니다. 공개키는 검증용으로만 사용할 수 있으므로 공개키를 안전하게 배포할 수 있으며, 개인키는 서명에 사용되므로 개인키는 개발자의 손에 보관되어야 합니다. 이로써 등록인증의 목적은 달성된다. 현재 "사용자 이름, 등록 코드" 모드를 사용하여 등록된 모든 소프트웨어는 이 기술을 사용해야 합니다.
먼저 사용하려는 공개 키와 개인 키를 생성합니다.
새로운 개인 rsa Security.Cryptography.RSACryptoServiceProvider
RSACryptoServiceProvider 클래스는 비대칭 암호화 및 암호 해독을 수행하기 위한 RSA 알고리즘의 구현을 제공합니다. 필요한 공개 키와 개인 키는 ToXMLString을 통해 생성할 수 있습니다.
rsa.ToXmlString(False)
rsa.ToXmlString(True)
매개변수가 False이면 공개 키만 생성되고, True이면 공개 키와 개인 키가 모두 생성됩니다. 일반적으로 ToXmlString(False)을 통해 공개 키 문자열을 가져오고, ToXmlString(True)을 통해 개인 키 문자열을 가져옵니다(공개 키가 포함되어 있음). 이 두 키를 로컬 시스템에 저장하고 문자열 상수를 통해 정의하고 사용할 수 있습니다. 즉, 당사의 등록 정보는 고유한 공개 키와 개인 키를 사용합니다.
그런 다음 공개 키와 개인 키를 사용하여 지정된 문자열에 서명합니다.
rsa.FromXmlString(PRIVATE_KEY)
Dim f를 새 보안.Cryptography.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim source() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
Dim sha를 새 보안으로 .Cryptography.SHA1Managed
Dim result() As Byte = sha.ComputeHash(source)
Dim regkey() As Byte = f.CreateSignature(result)
SerialNumber = Convert.ToBase64String(regkey)
방금 얻은 개인 키를 사용하여 rsa 객체를 다시 초기화합니다. , RSAPKCS1SignatureFormatter 클래스를 통해 서명이 수행됩니다. 입력 문자열을 바이트 배열로 변환하고(여기서 기본 사용자 이름은 ASCII 문자로만 구성될 수 있음) SHA1 해싱 알고리즘을 통해 해시 값을 계산합니다. 그런 다음 CreateSignature 메서드를 사용하여 얻은 해시 값에 서명합니다. 마지막으로 획득한 바이트 배열을 등록 코드인 문자열로 변환합니다. 등록코드를 생성하는 과정입니다. 우리는 이 프로그램을 재사용하여 다양한 사용자 이름에 서명하고 그에 해당하는 다양한 등록 코드를 얻을 수 있습니다.
마지막으로 방금 얻은 사용자 이름과 등록 코드를 확인합니다.
rsa.FromXmlString(PUBLIC_KEY)
Dim f As New Security.Cryptography.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Dim key() As Byte = Convert.FromBase64String(SerialNumber)
Dim sha As New Security.Cryptography.SHA1Managed
Dim 이름 () As Byte = sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
Result = f.VerifySignature(name, key)
이번에는 공개 키를 사용하여 rsa 개체를 초기화한 다음 서명을 확인합니다. RSAPKCS1SignatureDeformatter 클래스를 통해. 획득한 등록 코드를 바이트 배열로 역변환하고 사용자 이름에 대해 해시 계산을 수행하여 해시 값을 얻습니다. 마지막으로 verifySignature를 통해 검증합니다.
위 프로그램에서 볼 수 있듯이 등록 코드를 생성하려면 개인 키가 필요하며(개인 키에는 공개 키 정보가 함께 제공됨) 사용자 이름과 등록 코드 쌍을 원하는 만큼 생성할 수 있습니다. 공개 키를 사용하면 확인만 가능하고 생성은 불가능합니다. 따라서 공개키는 모든 사용자에게 안전하게 배포하여 검증할 수 있지만 개인키는 그렇지 않습니다. 따라서 공개키와 검증 알고리즘이 출시 버전에 포함될 수 있습니다. 왜냐하면 사용자가 공개키와 검증 알고리즘을 획득하더라도 쉽게 크랙이 불가능하기 때문입니다.
오늘날 인터넷에서 인기 있는 등록 기계는 대부분 소프트웨어의 개인 키를 해독하여 필요한 등록 정보를 무제한으로 생성합니다. 그러나 사용자가 제품을 디컴파일하고 중간 코드를 수정하면 등록 판단 논리를 우회하게 됩니다. 이는 이 글이 해결할 수 있는 문제가 아닙니다. 온라인 활성화나 등록을 위해 웹 서비스 기술을 사용하더라도 네트워크 청취를 통해 서버 정보를 분석하고 가짜 서버를 시뮬레이션할 수 있기 때문입니다.
http://www.cnblogs.com/farrio/archive/2006/12/01/579296.html