跳到內容

ISO/IEC 14443 Type A 的 SAK (Select Acknowledge) 說明

SAK(Select Acknowledge)是 ISO/IEC 14443 Type A 防碰撞(Anti-collision)流程中的回應值。

當讀卡機完成一個 SELECT 指令後,卡片會回傳一個 1 Byte 的 SAK,用來告知讀卡機:

  1. UID 是否還有下一個 Cascade Level。
  2. 是否支援 ISO/IEC 14443-4(ISO-DEP)。
  3. 其他由標準或廠商定義的能力位元。

SAK 的目的不是辨識卡片型號


SAK 為 1 Byte:

Bit: 7 6 5 4 3 2 1 0

其中最重要的是:

BitMask意義
Bit 20x04Cascade Bit,表示 UID 還有下一層
Bit 50x20支援 ISO/IEC 14443-4(ISO-DEP)

如果:

SAK & 0x04 != 0

表示:

UID 尚未完整,還有下一個 Cascade Level。

例如:

CL1
SAK = 04

代表:

還有 CL2

若第二層完成後:

SAK = 20

則表示 UID 已完整。


ISO14443-4 Bit(0x20)

「ISO14443-4 Bit(0x20)」章節

如果:

SAK & 0x20 != 0

表示:

卡片支援 ISO/IEC 14443-4(ISO-DEP)。

通常代表:

  • DESFire
  • JCOP
  • CPU Card
  • EMV Card
  • Type 4 Tag

SAK常見卡片
0x00Ultralight、NTAG
0x08MIFARE Classic 1K(NXP 版,以及大部分 M1 相容卡)
0x88MIFARE Classic 1K(Infineon 版)
0x18MIFARE Classic 4K
0x20DESFire、JCOP、CPU Card
0x28ISO14443-4 + 其他能力
0x04UID 尚未完成(不是最終 SAK 例如 M1 7 bytes 卡)

注意:SAK 並不能唯一辨識卡片種類。

相同的 SAK 可能出現在不同廠商或不同產品上,因此判斷卡片類型通常需要搭配 ATQA、UID 長度、SAK、ATS 等資訊。


實務上你會看到「同一張卡有兩個 SAK」的說法,這兩個值來源不同,不要混為一談

俗稱是什麼怎麼看
WUP-SAK卡片在 SELECT 之後、由晶片協定層即時回傳的 SAKMCT 的「Display Tag Info」
Vanity SAKBlock 0(第 0 區)記憶體裡存的那個 bytedump 出來的第 11~12 個十六進位數字

本頁前面所講的 SAK 位元定義,指的都是 WUP-SAK。

需要特別說明的是:

  • WUP-SAKVanity SAK 不是 ISO/IEC 14443 或 NXP 的官方術語,而是 RFID 社群(Proxmark3、magic card 圈)為了區分這兩者所用的俗稱。
  • ISO/IEC 14443 只定義「SELECT 之後回傳的 SAK」這一個概念。NXP 的 MF1S50YYX_V1 資料表把 Block 0 描述為「IC manufacturer data」,內容是 UID/NUID + BCC + manufacturer data,並未把其中任何 byte 定義為 SAK 或 ATQA。把那幾個 byte 稱為 SAK / ATQA 是 MCT、MifareOneTool 這類工具的慣例命名。
  • 因此規範上這兩個值之間沒有任何必然關係。正品 MIFARE Classic 1K 目前已知就有 08 / 08(NXP 版)、88 / 88(Infineon 版)、08 / 88(部分系統配發的卡)等多種組合。

有些門禁會同時比對這兩個值來偵測複製卡。原理、各代複製卡的實測行為與選卡建議,請見 👉 WUP-SAK 是什麼?門禁靠它抓出 MIFARE 複製卡的原理與應對


7 Bytes UID 一定會經過 兩個 Cascade Level

流程如下:

REQA
ATQA
Anti-collision CL1
SELECT CL1
SAK = 04
Anti-collision CL2
SELECT CL2
SAK = 最終 SAK

因此:

  • 第一個 SAK 固定為 0x04
  • 第二個 SAK 才是真正代表卡片能力的 最終 SAK

CL1 SAKCL2 SAK常見卡片
0x040x00NTAG、Ultralight
0x040x20DESFire、JCOP、CPU Card
0x040x08某些 Memory Card、Clone Card
0x040x28支援 ISO14443-4 的部分卡片

UID = 7 Bytes
CL1 SAK = 04
CL2 SAK = 00

表示:

  • UID 已完成
  • 不支援 ISO14443-4

UID = 7 Bytes
CL1 SAK = 04
CL2 SAK = 20

表示:

  • UID 已完成
  • 支援 ISO14443-4

UID = 7 Bytes
CL1 SAK = 04
CL2 SAK = 08

表示:

  • UID 已完成
  • 不支援 ISO14443-4

10 Bytes UID 共有三個 Cascade Level:

CL1 SAK = 04
CL2 SAK = 04
CL3 SAK = 最終 SAK

因此:

  • 4 Bytes UID:1 個 SAK
  • 7 Bytes UID:2 個 SAK
  • 10 Bytes UID:3 個 SAK

  • SAK(Select Acknowledge)是卡片在完成 SELECT 後回傳的 1 Byte 回應。
  • 0x04(Bit 2)表示 UID 尚未完成,還有下一個 Cascade Level。
  • 0x20(Bit 5)表示支援 ISO/IEC 14443-4(ISO-DEP)。
  • SAK 不是卡片型號,不能單獨用來辨識卡片。
  • 判斷卡片類型通常需要搭配 ATQA、UID 長度、SAK、ATS 等資訊。
  • 對於 7 Bytes UID
    • 第一個 SAK 固定為 0x04
    • 第二個(最終)SAK 才具有實際參考價值。