기계의 일부 하드웨어 구성 요소를 기반으로 키(숫자?)를 생성합니다.

기계의 일부 하드웨어 구성 요소를 기반으로 키(숫자?)를 생성합니다.

기계의 일부 구성 요소를 기반으로 하드웨어 키를 수동으로 생성하는 가장 좋은 방법이 무엇인지 궁금합니다.

문제는 다음과 같습니다. 특정 유형의 컴퓨터만 내 서버와 통신할 수 있기를 바랍니다. 이를 위해 해당 하드웨어가 내 서버에서 인식(또는 허용)하는 "허용된 하드웨어"의 일부인지 확인하고 싶습니다.

해당 하드웨어를 기반으로 키를 생성하여 서버 측에서 확인하고 "허용" 범위 내에 있는지 확인하고 싶습니다.

이상적으로는 "확인"하는 것입니다.

  • 프로세서
  • 마더보드
  • 이더넷 네트워크 인터페이스

메모리와 하드 드라이브는 자주 변경될 수 있기 때문에 조금 더 까다롭습니다.

lshw저는 Ubuntu 10.10을 사용하고 있으며 이 명령이 모든 것에 대해...글쎄...모든 것에 대한 많은 정보를 제공하는 것을 보았습니다 . 또한, cat /proc/cpuinfo, dmidecode... 이들 모두는 많은 정보를 표시하는데, 이는 항상 정규식으로 구문 분석하여... 작업을 수행할 수 있지만 더 깨끗하고 직접적인 방법이 있는지 궁금합니다.

이 문제에 대한 조언이나 조언을 주시면 감사하겠습니다.

감사해요.

답변1

나는 이것이 결국 당신을 귀찮게 할 흥미로운 질문이라고 생각합니다.

다음을 수행하는 스크립트를 작성할 수 있습니다.

rm /tmp/hw_snapshot
touch /tmp/hw_snapshot
cat /proc/cpuinfo | grep <whatever> >> /tmp/hw_snapshot
dmidecode | grep <whatever> >> /tmp/hw_snapshot
lspci | grep <whatever> >> /tmp/hw_snapshot
md5sum /tmp/hw_snapshot > /tmp/key

아니요, 하드웨어 구성에는 고유 식별자가 있습니다. 문제는 동일한 모델 시리즈 내에서도 CPU, 네트워크 카드, 네트워크 카드 수 등 하드웨어가 크게 다를 수 있다는 것입니다. 따라서 기본적으로 누구든지HP DL380모델을 선택하고 추가 네트워크 카드가 포함된 다른 모델을 구입하면 고유 키를 추가할 수 없습니다.

또한 하드웨어 기반 제한 통신의 목적을 아직도 이해하지 못합니다. 당신의 컴퓨터와 통신하는 것을 제어하려면 (가능하다면) 개인 네트워크에 무언가를 두십시오.

답변2

md5sumetc.에서 출력을 생성할 수도 있지만 lspci약간 dmidecode의 하드웨어 변경(예: 메모리 추가 또는 다른 네트워크 카드 추가)이 있거나 이러한 도구의 출력이 변경되는 경우에도 문제가 발생할 수 있습니다.

상용 소프트웨어는 라이선스 관리를 위해 네트워크 카드의 MAC 주소를 사용하는 경우가 많지만 이는 위조될 수 있습니다.마이 변경 그리드.

앞서 언급했듯이 VPN을 사용하는 등 액세스가 제한된 개인 네트워크에 이러한 시스템을 배치하는 것이 좋습니다.

답변3

열쇠? SSH나 VPN을 사용하지 않는 이유는 무엇입니까?

MAC 주소의 공급업체 부분을 사용할 수 있지만 이는 쉽게 위조될 수 있습니다.

답변4

글쎄요... 저는 여러분이 주신 답변을 "끓여서" 제 필요에 맞는 것을 얻었고 어쩌면 누군가가 그것이 유용하다고 생각할 수도 있습니다. U-Dev( 내가 아는 한 dmidecode내부적으로 사용됨 )에 직접 연결하고 여러 값을 가져와서 SHA256 키를 생성하는 데 사용하는 Python 스크립트입니다. 네트워크 장치, BIOS, 마더보드에 대한 정보만 사용했습니다. 그것은 나에게 충분합니다(변경될 수 있습니다... U-Dev는... 시스템에 있는 모든 것에 대한 정보를 제공합니다)

#!/usr/bin/env python    
import hashlib
import pyudev

if __name__ == "__main__":
    retval = None
    context = pyudev.Context()
    borrajaxHardwareKey = unicode()
    for netDevice in context.list_devices(subsystem="net"):
        actualDevice = netDevice.parent
        if actualDevice is not None:
            tmpList = list()
            try:
                tmpList.append(actualDevice.attributes.asstring("vendor"))
                tmpList.append(actualDevice.attributes.asstring("device"))
            except KeyError:
                tmpList = list()
            if len(tmpList) > 0:
                borrajaxHardwareKey = u"," + borrajaxHardwareKey + u":".join(tmpList)

    dmiThingy = pyudev.Device.from_path(context, '/sys/devices/virtual/dmi/id')
    dmiThingyValidAttrs = list()
    for dmiThingAttr in ["bios_vendor", "sys_vendor", "product_name", "board_vendor", "board_name"]:
        try:
            dmiThingyVal = dmiThingy.attributes.asstring(dmiThingAttr).strip()
            if len(dmiThingyVal) == 0:
                raise KeyError()
            else:
                dmiThingyValidAttrs.append(dmiThingyVal)
        except KeyError:
            pass

    borrajaxHardwareKey = u"," + borrajaxHardwareKey + u":".join(dmiThingyValidAttrs)
    print "1) Before hashing (do not use this one):\n\'%s\'" % borrajaxHardwareKey
    borrajaxHardwareKey = hashlib.sha256(borrajaxHardwareKey).hexdigest()
    print "2) After hashing:\n%s" % borrajaxHardwareKey

관련 정보