儲存設備唯一ID

儲存設備唯一ID

我遇到過以某種方式與儲存媒體綁定的許可證系統。雖然基於檔案系統上的 UUID 相當簡單,但我不認為情況是這樣(見下文)。此行為的典型範例如下:

  1. 每次啟動時,都會產生一個 id 檔案。
  2. 系統將檢查密鑰檔案中的許可證。如果 key 與 id 匹配,那麼一切都很好。
  3. 如果沒有密鑰,或密鑰與 ID 不符(例如從不同系統複製),則許可證無效。

我觀察到以下行為:

  • 完全擦除CF卡並重新安裝會產生相同的id文件,因此不需要新的金鑰文件。
  • 在不同的 CF 上使用相同的金鑰不起作用,因為它與新 id 檔案的內容不符。

這讓我得出結論,有一種方法可以以某種方式取得 CF 卡的唯一 ID。如何在 Linux 中實現這一目標?


附:我故意省略了產品本身的任何細節,因為我更想知道像這樣的系統如何建立 CF 卡的唯一 ID。

答案1

該卡將以唯讀方式記錄有大量資訊。

文章讀取內部SD卡訊息有這樣說:

內部 SD 卡訊息

有關 SD 卡的資訊編碼在其內部卡註冊表中。其中之一是卡片識別 (CID)暫存器,一個16位元組的代碼,包含唯一識別SD卡的信息,包括卡序號(PSN)、製造商ID號(MID)和製造日期(MDT)。 CID 暫存器在卡片製造時設置,設定後不能更改。 (根據SD卡規格,該資訊只能寫入一次,但是如果卡片不符合規格,則該資訊可能會被更改!)

如何從 SD 卡讀取 CID

讀取 CID 的一種方法是使用具有 SD 卡插槽的筆記型電腦。筆記型電腦中的讀卡機通常透過 PCI 匯流排(或 IDE 匯流排)直接連接。這不適用於 USB 讀卡機,因為檢索卡片資訊的命令會被讀卡機攔截且無法理解。並非所有具有內建卡片插槽的電腦都可以工作,某些內建讀卡機是透過 USB 匯流排連接的。

假設您擁有適當的硬件,可以使用多種方法來獲取卡片資訊。使用Linux,讀取內部SD卡資訊很簡單。插入卡片並查看下方 /sys/block/mmcblk0/device/(此位置可能會根據您的裝置而變更)。您將看到幾個可用的屬性,其中包括 CID 暫存器及其內部資訊。

答案2

正如其他人評論的那樣,這可能與 CF 卡被擦除的方式有關,但更可能的是軟體根據卡中的韌體識別 CF 卡 -

通常使用“udevinfo”讀取此資訊 - 例如,如果 CF 卡是 /dev/sdb udevinfo -a -p $(udevinfo -q path -n /dev/sdb) - 這很可能包含足夠的資訊唯一標識該卡。

筆記:在基於 Debian 的發行版上udevadm info替換udevinfo

udevadm info -a -p $( udevadm info -q path -n /dev/sdb )

相關內容