라이센스 키는 불법 복제 방지 수단으로 사실상 표준입니다. 솔직히 말해서, 이것은 나에게로 파업 을 통해 축구화 (의) 보안을 정말 라이센스 키가 생성되는 방법을 아무 생각이 없지만,. 라이센스 키 생성의 좋은 (보안) 예는 무엇입니까? 어떤 암호화 기본 요소 (있는 경우)를 사용하고 있습니까? 메시지 요약입니까? 그렇다면 어떤 데이터를 해싱합니까? 크래커가 자체 키 생성기를 구축하기 어렵게하기 위해 개발자는 어떤 방법을 사용합니까? 키 생성기는 어떻게 만들어 집니까?
답변
구식 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 등)을 얻을 수있었습니다. 또한 온라인 활성화가 필요합니다.
전체 알고리즘은 다소 복잡하지만 독일에서 출판 된 이 문서 (완전히 합법적입니다!) 에 잘 요약 되어 있습니다.
물론, 온라인 서비스 ( World of Warcraft 와 같은)를 제공하지 않는 한, 사용자가 무엇을 하든지 , 모든 유형의 복제 방지는 실속에 빠질 수 있습니다. ) CD 키 알고리즘 및 기타 모든 저작권 보호.
실제 올바른 방법 :
온라인 서비스의 경우 바이너리 파일을 사용하더라도 서버를 사용하여 서버를 인증해야 (예 : WoW 계정) 수명이 조금 더 단순 해집니다. 예를 들어 플레이 타임 카드를 구매할 때 사용되는 World of Warcraft의 CD 키 알고리즘은 다음과 같습니다.
- 매우 큰 암호로 안전한 난수를 생성하십시오.
- 데이터베이스에 저장하고 카드에 인쇄하십시오.
그런 다음 누군가가 재생 시간 카드 번호를 입력하면 데이터베이스에 있는지 확인하고, 해당 번호 인 경우 해당 번호를 현재 사용자와 연결하여 다시 사용할 수 없도록합니다.
온라인 서비스의 경우 위의 체계를 사용 하지 않을 이유가 없습니다 . 다른 것을 사용 하면 문제가 발생할 수 있습니다 .
답변
원래이 답변을 썼을 때 라이센스 키의 ‘오프라인’유효성 검사에 관한 문제라는 가정하에있었습니다. 대부분의 다른 답변은 온라인 확인을 처리하므로 처리하기가 훨씬 쉽습니다 (대부분의 로직은 서버 측에서 수행 할 수 있음).
오프라인 확인을 사용하면 가장 어려운 점은 수많은 고유 라이센스 키를 생성하고 쉽게 확인되지 않는 강력한 알고리즘 (예 : 간단한 확인 숫자)을 유지할 수 있다는 것입니다.
나는 수학에 정통하지는 않지만 이것을하는 한 가지 방법 은 그래프를 그리는 수학 함수 를 사용하는 것입니다.
플롯 된 선은 (충분한 주파수를 사용하는 경우) 수천 개의 고유 한 점을 가질 수 있으므로 해당 그래프에서 임의의 점을 선택하고 어떤 방식 으로든 값을 인코딩하여 키를 생성 할 수 있습니다
예를 들어이 그래프를 플로팅하고 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의 모든 항목)의 모든 보안을 우회 할 수 있습니다. 합법적 인 접근보다 불법적 인 접근을 어렵게합니다. 둘째, 저는 전문가가 아니므로이 제안 된 계획에 심각한 결함이있을 수 있습니다.