사람들이 라이센스 키를 생성하기 위해 어떤 방법 / 라이브러리 / 도구를 제안합니까 (소프트웨어를 등록 할 때 입력하는 멋진 AAAAA-AAAAA-AAAAA-AAAAA-AAAAA)?
구현할 때주의해야 할 점이 있습니까?
(현재 언어에 국한되지 않고 일반적인 것으로 관심이 있으니 솔루션이 언어에 따라 다른 언어를 사용하고 있으면됩니다.)
답변
암호를 저장할 때와 거의 같습니다. 생성기와 프로그램에만 알려진 고유 한 비밀 키가 있어야합니다. 이 키를 사용하여 세부 사항 (사용자 이름, 비밀번호, 조직 등)을 조작 한 후 해시하십시오. 그런 다음 Base32 에서 해시에 대한 간단한 전송 인코딩을 수행 하거나 형식에 신경 쓰지 않으면 간단히 16 진수 문자열로 옮길 수 있습니다.
구현할 때주의해야 할 점이 있습니까?
비밀을 비밀로 유지하십시오. 구현을 즉흥적으로 만드십시오. 누군가가 깨지면 쉽게 구현을 변경할 수 있습니까? 데스크톱 응용 프로그램의 일반적인 구현 중 하나는 원격 서버를 사용하여 라이센스의 유효성을 검사하는 것입니다. 이렇게하면 응용 프로그램 자체를 검사하여 누군가 해시 또는 알고리즘을 리버스 엔지니어링 할 수있는 가능성이 사라집니다.
답변
이 같은 질문 은 SO에 대해 물었고 대답은 꽤 좋습니다. 일반적인 요점은 다음과 같습니다.
- 사용자의 이름을
- SHA1을 사용하여 사용자 이름과 비밀 키 및 해시 연결
- SHA1 해시를 영숫자 문자열로 압축 해제하십시오. 이것은 개별 사용자의 “제품 키”입니다
- 프로그램 내에서 동일한 해시를 수행하고 제품 키와 비교하십시오. 같으면 OK.
답변
내가 선호하는 방법은 10,000 개의 임의 라이센스 문자열, SHA1 (또는 MD5) 해시 또는 HMAC를 생성하고 SHA1 / MD5 해시의 전부 또는 일부를 실행 파일 자체에 포함시키는 것입니다. 라이센스 문자열을 입력하면 난독 처리 된 코드를 사용하여 문자열의 해시를 생성하고 목록의 코드와 비교합니다. 일치하면 유효한 라이센스입니다. 라이센스가 부족한 경우 더 많은 문자열로 새 버전을 릴리스하십시오.
SHA1 해시의 첫 96 비트 만 사용하면 충분합니다. 따라서 10,000 개의 라이센스가 120KB 미만이됩니다. 알고리즘 키 생성 또는 키 생성기 생성은 불가능합니다. 걱정해야 할 유일한 취약점은 리버스 엔지니어링 또는 우회입니다. (또는 유효한 키를 배포 한 사람이 있습니다.)