在 Linux 上讀取護照內 NFC 晶片 (★ 100 分)
這篇文章介紹如何利用 Linux 讀取護照內 NFC 晶片中的所有資料,其主要動機並非出於惡意,而是為了瞭解與實作。作者採用 roeften 的 pypassport 程式庫,透過讀取機讀區(MRZ,Machine Readable Zone)取得密碼,而該密碼由護照號碼、出生日期與到期日期組合而成,每一項皆附有依據 ICAO(國際民航組織)文件所定義的校驗碼。因為部份作廢護照會因裁剪導致 MRZ 缺失,文章提供 Python 程式碼範例說明如何重現失落的校驗碼,進而順利讀取包括生物特徵在內的所有護照資料。
文章更進一步解釋了護照內資料的結構,說明資料以不同的「資料群組」儲存,例如 DG1 儲存機讀區資訊(姓名、性別、國籍等),而 DG2 至 DG4 則包含生物特徵模板,如數位照片及臉部特徵(包含眼部位置與拍攝角度資訊)。作者同時展示如何利用 pypassport 與 pyasn1 套件,在連接 NFC 讀取器後執行 Python 程式來讀取、處理並儲存這些結構化資料,並以簡單指令碼示範如何將照片儲存為 JPEG 格式。
在安全性與破解可能性方面,文章指出護照 NFC 晶片並無內建計時器,因此大批次嘗試密碼並不會被鎖定,只會因錯誤嘗試而產生短暫延遲。然而,實際上由於護照涉及龐大組合(例如有效期、生日及護照號碼可能性極高),進行蛮力破解在實務上難以實現。即便利用 OCR 技術辨識紙本機讀區以還原缺失部份,也僅能取得原本公開印製的個人資料,而無法驗證護照真偽或揭露額外安全漏洞。
討論中有網友補充,認為文章中重現校驗碼部分雖然簡單,但並未詳述實際破解過程所需的時間與操作細節;也有意見提到,雖然 NFC 晶片可以經由正確密碼讀取,但該資料經護照發行機關以私密金鑰簽章保護,冒用或更改難度極高。另有人關心若以高功率讀寫器進行攻擊可能引發的安全風險與法律問題,以及類似技術在其他身分證件中之應用情形。這些討論為該技術的實務效能與潛在風險提供了多元而實質的思考。
👥 28 則討論、評論 💬
https://news.ycombinator.com/item?id=44374574