Hash 를 이용한 라이센스 키 생성

Hash 를 이용한 라이센스 키 생성

  • Hash 를 통해 암호화 하고 이를 라이센스 키로 사용하는 방법 테스트
  • MAC 주소를 불러와 hash 를 통해서 암호 키를 생성하고,
  • 생성된 암호키를 어플리케이션 내해서 확인하여 라이센스 검증 테스트를 수행한다.

Digest 란?

암호화해시를 통해 얻은 메시지 (여기서는 라이센스 키로 사용)

MAC address 를 이용한 digest 생성

import hashlib
import uuid

# get MAC address
myMacAdr = hex(uuid.getnode()) + "20190527"

# generate key using hash
myHash = hashlib.sha512(myMacAdr.encode('utf-8')).hexdigest()
testKey = open('test.key', 'w')
testKey.write(myHash)
testKey.close()

# test key for fail test
testAdr1 = hex(uuid.getnode()) + "20190528"
testHash1 = hashlib.sha512(testAdr1.encode('utf-8')).hexdigest()
testKey1 = open('test1.key', 'w')
testKey1.write(testHash1)
testKey1.close()

testAdr2 = hex(uuid.getnode() + 0x000012340000) + "20190527"
testHash2 = hashlib.sha512(testAdr2.encode('utf-8')).hexdigest()
testKey2 = open('test2.key', 'w')
testKey2.write(testHash1)
testKey2.close()

생성된 결과물

  • test.key # 올바른 라이센스 키
  • test1.key # 위조된 라이센스 키
  • test2.key # 위조된 라이센스 키

Key 값 을 이용한 어플리케이션의 라이센스 검증 테스트

# test application for license key validation
class testApp():
    def __init__(self, key):
        print ("Initialize testApp using key: {}".format(key))
        # open key
        self.license = 'fail'
        testKey = open(key, 'r')
        
        # make true key
        # get MAC address
        myMacAdr = hex(uuid.getnode()) + "20190527"
        # generate key using hash
        myHash = hashlib.sha512(myMacAdr.encode('utf-8')).hexdigest()
        
        if testKey.readline() == myHash:
            self.license = 'pass'
            
    def runApp(self):
        if self.license == 'pass':
            print("Success certification")
        else:
            print("Fail certification!\n\n")
            return
            
        print (" ---------------")
        print (" run application")
        print (" ---------------\n\n")
# run test
test = testApp('test.key')
test.runApp()
test1 = testApp('test1.key')
test1.runApp()
test2 = testApp('test2.key')
test2.runApp()
Initialize testApp using key: test.key
Success certification
 ---------------
 run application
 ---------------


Initialize testApp using key: test1.key
Fail certification!


Initialize testApp using key: test2.key
Fail certification!

위 결과에서 첫번째 라이센스 키는 올바로 동작하지만, 두번째, 세번째 결과에서는 라이센스 키 인증이 실패함을 알 수 있다.

해쉬?

여기서 사용된 해쉬는 단방향 암호화 방법으로, 복호화가 불가능하다. 이를 이용해 라이센스 키를 생성하고 인증키를 확인하는데 사용하였다.

댓글