Skip to content

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 已完整。


如果:

SAK & 0x20 != 0

表示:

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

通常代表:

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

SAK常見卡片
0x00Ultralight、NTAG
0x08MIFARE Classic(以及許多 Clone Card)
0x20DESFire、JCOP、CPU Card
0x28ISO14443-4 + 其他能力
0x04UID 尚未完成(不是最終 SAK)

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

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


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 才具有實際參考價值。