development

소프트웨어 라이센스 키는 어떻게 생성됩니까?

big-blog 2020. 3. 1. 15:57
반응형

소프트웨어 라이센스 키는 어떻게 생성됩니까?


라이센스 키는 불법 복제 방지 수단으로 사실상 표준입니다. 솔직히 말해서, 이것은 나에게로 파업 을 통해 축구화 (의) 보안을 정말 라이센스 키가 생성되는 방법을 아무 생각이 없지만,. 라이센스 키 생성의 좋은 (보안) 예는 무엇입니까? 어떤 암호화 기본 요소 (있는 경우)를 사용하고 있습니까? 메시지 요약입니까? 그렇다면 어떤 데이터를 해싱합니까? 크래커가 자체 키 생성기를 구축하기 어렵게하기 위해 개발자는 어떤 방법을 사용합니까? 키 생성기는 어떻게 만들어 집니까?


구식 CD 키의 경우, CD 키 (모든 문자열 일 수 있음)를 쉽게 생성하고 확인할 수있는 알고리즘을 구성하는 것이었지만 유효 CD 키와 유효하지 않은 CD의 비율 -키는 너무 작아서 무작위로 CD 키를 추측해도 올바른 키를 얻지 못할 수 있습니다.

IT를 수행하는 잘못된 방법 :

스타 크래프트반감기는 모두 같은 체크섬을 사용했습니다. 13 자리는 첫 12 자리를 확인했습니다. 따라서 첫 12 자리에는 아무 것도 입력 할 수없고 13 자리 (10 개의 가능성 만 있음)를 추측하면 악명 높은1234-56789-1234

확인 알고리즘은 공개이며 다음과 같습니다.

x = 3;
for(int i = 0; i < 12; i++)
{
    x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;

IT를 올바르게 수행하는 방법

Windows XP 는 많은 정보를 가져 와서 암호화 한 다음 문자 / 숫자 인코딩을 스티커에 넣습니다. 이를 통해 MS는 키를 확인 하고 동시에 제품 유형 (Home, Professional 등)을 얻을 수있었습니다. 또한 온라인 활성화가 필요합니다.
전체 알고리즘은 다소 복잡하지만 독일에서 출판 된 이 문서 (완전히 합법적입니다!) 에 잘 요약 되어 있습니다.

물론, 더 당신이 (같은 온라인 서비스를 제공하지 않는 한 당신이 무슨 상관 월드 오브 워크래프트 는 어떤 게임 가치 값이 있다면 불행하게도, 사람이 깰 것), 복사 방지의 모든 유형은 실속없는 우회하기 적어도 (또는 ) CD 키 알고리즘 및 기타 모든 저작권 보호.

실제 올바른 방법 :

온라인 서비스의 경우 바이너리 파일을 사용하더라도 서버를 사용하여 서버를 인증해야 (예 : WoW 계정) 수명이 조금 더 단순 해집니다. 예를 들어 플레이 타임 카드를 구입할 때 사용되는 월드 오브 워크래프트의 CD 키 알고리즘은 다음과 같습니다.

  1. 매우 큰 암호로 안전한 난수를 생성하십시오.
  2. 데이터베이스에 저장하고 카드에 인쇄하십시오.

    그런 다음 누군가가 재생 시간 카드 번호를 입력하면 데이터베이스에 있는지 확인하고,있는 경우 해당 번호를 현재 사용자와 연결하여 다시 사용할 수 없도록합니다.

온라인 서비스의 경우 위의 체계를 사용 하지 않을 이유가 없습니다 . 다른 것을 사용 하면 문제가 발생할있습니다 .


원래이 답변을 썼을 때 라이센스 키의 '오프라인'유효성 검사에 관한 문제라는 가정하에있었습니다. 대부분의 다른 답변은 온라인 확인을 처리하므로 처리하기가 훨씬 쉽습니다 (대부분의 로직은 서버 측에서 수행 할 수 있음).

오프라인 확인을 사용하면 가장 어려운 점은 수많은 고유 라이센스 키를 생성하고 쉽게 확인되지 않는 강력한 알고리즘 (예 : 간단한 확인 숫자)을 유지할 수 있다는 것입니다.

나는 수학에 정통하지는 않지만 이것을하는 한 가지 방법 은 그래프를 그리는 수학 함수 를 사용하는 것입니다.

플롯 된 선은 (충분한 주파수를 사용하는 경우) 수천 개의 고유 한 점을 가질 수 있으므로 해당 그래프에서 임의의 점을 선택하고 어떤 방식 으로든 값을 인코딩하여 키를 생성 할 수 있습니다

여기에 이미지 설명을 입력하십시오

예를 들어,이 그래프를 플롯하고 4 개의 점을 선택하고 "0, -500; 100, -300; 200, -100; 100,600"과 같은 문자열로 인코딩합니다.

우리는 알려진 고정 키로 문자열을 암호화하고 (거의 약하지만 목적을 제공합니다) Base32통해 결과 바이트를 변환 하여 최종 키를 생성합니다

그런 다음 응용 프로그램은이 프로세스 (base32를 실수로 해독, 해독, 포인트 디코딩)를 취소 한 다음 각 포인트가 비밀 그래프에 있는지 확인할 수 있습니다.

상당히 많은 양의 고유하고 유효한 키를 생성 할 수있는 상당히 적은 양의 코드

그러나 모호한 보안은 매우 안전합니다. 코드를 분해하는 데 시간이 걸리는 사람은 그래프 기능과 암호화 키를 찾은 다음 키 생성기를 조롱 할 수 있지만 우연한 불법 복제를 늦추는 데 매우 유용 할 것입니다.


다음 요구 사항을 다루는 부분 키 확인 에 대한 tis 기사를 확인하십시오 .

  • 라이센스 키는 입력하기에 충분히 쉬워야합니다.

  • 지불 거절 또는 도난당한 신용 카드로 구매할 경우 라이센스 키를 블랙리스트에 올릴 수 있어야합니다.

  • 키를 테스트 할“집에 전화”가 없습니다. 이 관행이 점점 더 널리 보급되고 있지만, 여전히 사용자로서 그것을 높이 평가하지 않으므로, 사용자들에게이를 따라달라고 요구하지 않을 것입니다.

  • 크래커가 출시 된 애플리케이션을 분해하고 작동하는 "키겐"을 생성하는 것은 불가능합니다. 이는 애플리케이션이 확인을위한 키를 완전히 테스트하지 않음을 의미합니다. 키 중 일부만 테스트해야합니다. 또한 응용 프로그램의 각 릴리스는 키의 다른 부분을 테스트해야합니다. 따라서 이전 릴리스를 기반으로 한 가짜 키는 이후 릴리스의 소프트웨어에서는 작동하지 않습니다.

  • 중요 : 합법적 인 사용자가 실수로 작동하는 것처럼 보이지만 인쇄상의 오류로 인해 향후 버전에서 실패하는 잘못된 키를 입력 할 수는 없습니다.


사람들이 실제로 CD 키를 생성하는 작업에 대한 경험이 없지만 온라인 활성화의 길을 가고 싶지 않다고 가정하면 키를 만들 수있는 몇 가지 방법이 있습니다.

  • 숫자는 (17)로 나눌 수 있어야합니다. 많은 키에 액세스 할 수 있지만 대부분의 잠재적 인 문자열은 유효하지 않은 것으로 추측하기 쉽습니다. 마찬가지로 키의 체크섬이 알려진 값과 일치해야합니다.

  • 키의 전반부는 알려진 값으로 연결될 때 키의 후반까지 해시해야합니다. 그러나 프로그램에는 여전히 키를 생성하고 유효성을 검증하는 데 필요한 모든 정보가 포함되어 있습니다.

  • 알려진 값 + nonce를 (개인 키로) 암호화하여 키를 생성하십시오. 이는 해당 공개 키를 사용하여 해독하고 알려진 값을 확인하여 확인할 수 있습니다. 프로그램은 이제 키를 생성하지 않고 키를 검증하기에 충분한 정보를 가지고 있습니다.

이것들은 여전히 ​​공격에 열려 있습니다 : 프로그램은 여전히 ​​존재하며 검사를 우회하도록 패치 할 수 있습니다. Cleverer는 프로그램에 값을 저장하지 않고 세 번째 방법에서 알려진 값을 사용하여 프로그램의 일부를 암호화 할 수 있습니다. 이렇게하면 프로그램의 암호를 해독하기 전에 키의 사본을 찾아야하지만 암호를 한 번 복사하면 한 사람이 합법적 인 사본을 가져 와서 다른 사람이 소프트웨어에 액세스 할 수 있도록하는 데 여전히 취약합니다.


CD 키는 네트워크에 연결되지 않은 제품에 대한 보안 수준이 높지 않으므로 기술적으로 안전하게 생성 할 필요가 없습니다. .net을 사용하는 경우 Guid.NewGuid ()를 거의 사용할 수 있습니다.

오늘날 주된 용도는 서버가 CD 키를 확인할 수있는 멀티 플레이어 구성 요소입니다. 따라서 "전달 된 내용을 조회하고 다른 사람이 이미 사용 중인지 확인"으로 귀결 될 때 얼마나 안전하게 생성되었는지는 중요하지 않습니다.

즉, 두 가지 목표를 달성하기 위해 알고리즘을 사용할 수 있습니다.

  • 일종의 체크섬이 있습니다. 이는 오타를 탐지하는 것만으로 설치 프로그램에 "키가 유효하지 않은 것 같습니다"라는 메시지를 표시 할 수있게합니다 (설치 프로그램에 이러한 검사를 추가하면 실제로 해커가 필요한 모든 코드를 가지고 있기 때문에 키 생성기를 작성하는 것이 쉽지 않습니다. 서버 측 유효성 검사를 확인하고 전적으로 의존하면 서버가 오타를 알지 못해 CD 키를 수락하지 않는 이유를 이해하지 못하는 합법적 고객을 성가 시게 할 위험이 있습니다.)
  • 제한된 문자 하위 집합으로 작업하십시오. CD 키를 입력하려고 시도하고 "이것은 8 또는 B입니까? 1 또는 I입니까? Q 또는 O입니까 또는 0입니까?" -모호하지 않은 문자 / 숫자의 하위 집합을 사용하면 혼동을 제거 할 수 있습니다.

즉, 해커가 단순히 유효한 키 (데이터베이스에서는 유효하지만 여전히 상점 선반의 상자에 있음)를 추측하고 해당 상자를 구매하는 합법적 인 고객을 괴롭히는 것을 피하기 위해 대규모 배포 및 임의성이 필요합니다. .


특히 키 길이에 관심이 없다면 공개 및 개인 키 암호화를 사용하는 것이 좋습니다.

본질적으로 어떤 종류의 nonce와 고정 서명이 있습니다.

예를 들면 다음과 같습니다. 0001-123456789

0001은 nonce이고 123456789는 고정 서명입니다.

그런 다음 개인 키를 사용하여이를 암호화하여 다음과 같은 CD 키를 얻으십시오. ABCDEF9876543210

그런 다음 응용 프로그램과 함께 공개 키를 배포하십시오. 공개 키를 사용하여 CD 키 "ABCDEF9876543210"의 암호를 해독 한 다음 고정 서명 부분을 확인할 수 있습니다.

그러면 개인 키가 없기 때문에 nonce 0002에 대한 CD 키가 무엇인지 추측 할 수 없습니다.

유일한 주요 단점은 1024 비트 크기의 개인 / 공개 키를 사용할 때 CD 키가 상당히 길다는 것입니다. 또한 사소한 정보를 암호화하지 않도록 충분히 긴 nonce를 선택해야합니다.

단점은이 방법이 "활성화"없이 작동하며 이메일 주소 또는 라이센스 사용자 이름과 같은 것을 nonce로 사용할 수 있다는 것입니다.


키 시스템에는 몇 가지 속성이 있어야합니다.

  • 매우 적은 키가 유효해야합니다
  • 사용자가 가진 모든 것을 가지고 있어도 유효한 키를 도출 할 수 없어야합니다.
  • 한 시스템의 유효한 키는 다른 시스템의 유효한 키가 아닙니다.
  • 다른 사람

이를 제공해야하는 한 가지 해결책은 공개 키 서명 체계 를 사용하는 것 입니다. "시스템 해시"로 시작하십시오 (예 : NIC의 맥, 정렬 및 CPU-ID 정보 및 기타 다른 것들을 가져 와서 모두 함께 연결하고 결과의 MD5를 가져옵니다 (정말 원치 않습니다) ( 필요하지 않은 경우 개인 식별 정보 처리 ) CD의 일련 번호를 추가하고 일부 레지스트리 키 (또는 일부 데이터 파일)에 blob에 대한 유효한 서명이없는 경우 부팅을 거부합니다. 사용자는 Blob을 배송하여 프로그램을 활성화하고 서명을 다시 배송합니다.

잠재적 인 문제에는 실질적으로 모든 것에 서명하도록 제안하는 것이 포함되어 있으므로 누군가가 선택한 일반 텍스트 및 / 또는 선택된 암호문 공격 을 실행한다고 가정해야합니다 . 제공된 일련 번호를 확인하고 유효하지 않은 요청을 처리하는 것을 거부하고 주어진 s / n에서 주어진 수보다 많은 쿼리를 일정한 간격으로 처리하는 것을 거부함으로써 완화 할 수 있습니다 (연간 2 개).

몇 가지 사항을 지적해야합니다. 첫째, 숙련되고 결정적인 공격자는 제한없이 액세스 할 수있는 부분 ( 예 : CD의 모든 항목)의 모든 보안을 우회 할 수 있습니다. 해당 계정에서 수행 할 수있는 최선의 방법은 합법적 인 접근보다 불법적 인 접근을 어렵게합니다. 둘째, 저는 전문가가 아니므로이 제안 된 계획에 심각한 결함이있을 수 있습니다.


프로세스에 여러 단계를 통합하는 DRM 동작도 있습니다. 가장 잘 알려진 예 중 하나는 Creative Suite의 설치를 확인하는 Adobe의 방법 중 하나입니다. 여기에 설명 된 기존 CD 키 방법이 사용 된 다음 Adobe 지원 라인이 호출됩니다. CD 키는 Adobe 담당자에게 제공되며 사용자가 사용할 활성화 번호를 제공합니다.

그러나, 단계들로 나뉘어 졌음에도 불구하고, 이것은 일반적인 프로세스에 사용 된 것과 동일한 크래킹 방법에 속한다. 원본 CD 키와 비교하여 확인되는 활성화 키를 만드는 데 사용 된 프로세스가 빠르게 발견되었으며 두 키를 모두 포함하는 생성기가 만들어졌습니다.

그러나이 방법은 인터넷에 연결되어 있지 않은 사용자가 제품을 확인하는 방법으로 여전히 존재합니다. 앞으로 인터넷 액세스가 보편적으로됨에 따라 이러한 방법이 어떻게 제거되는지 쉽게 알 수 있습니다.


모든 CD는 복제 방지 알고리즘 만 사용하여 정직한 사용자를 위태롭게하며 불법 복제를 방지하지는 않습니다.

"해적"은 하나의 합법적 인 CD와 그 액세스 코드에만 액세스하면되고, 사본을 만들어 배포 할 수 있습니다.

암호화를 통해 코드를 안전하게 보호하는 것은 중요하지 않습니다. CD를 일반 텍스트로 제공해야합니다. 그렇지 않으면 합법적 인 사용자가 소프트웨어를 활성화 할 수 없습니다.

대부분의 보안 체계에는 소프트웨어를 제공 할 컴퓨터의 세부 정보 (cpu 일련 번호, mac 주소, IP 주소 등)를 소프트웨어 공급 업체에 제공하거나 공급 업체 웹 사이트 및 그 대가로 활성화 토큰을받습니다. 첫 번째 옵션은 많은 수동 관리가 필요하며 매우 가치가 높은 소프트웨어에만 가치가 있습니다. 두 번째 옵션은 스푸핑 될 수 있으며 네트워크 액세스가 제한되어 있거나 방화벽 뒤에 갇혀 있으면 절대적으로 분노합니다.

전체적으로 고객과의 신뢰 관계를 구축하는 것이 훨씬 쉽습니다!

참고 URL : https://stackoverflow.com/questions/3002067/how-are-software-license-keys-generated



반응형