簡體   English   中英

有沒有辦法在不使用select APDU命令的情況下選擇javacard applet?

[英]Is there any way to select a javacard applet without using the select APDU command?

我想通過某些界面將applet列入黑名單。 我已經阻止使用select APDU,但我想確保沒有其他方法可以選擇applet。 我可以發送任何選擇小程序作為副作用的APDU嗎?

如果小程序被標記為默認選定小程序,則在ATR / ATS之后自動選擇小程序。 如果您在閱讀器端阻止整個SELECT命令,那么您的其他小程序可能會停止工作,因為您也無法再選擇它們。

如果您只通過匹配APDU標頭 AID來阻止此給定applet的SELECT命令,那么您應該確保:

  • INS字節為A4
  • P1為04(按DF名稱選擇)
  • Lc字節和命令數據與AID匹配
  • Lc字節和命令數據匹配AID的任何子字符串前綴

最后一點稱為SELECT by partial AID,它選擇匹配AID子字符串的第一個applet(以及之后的下一個)。


[編輯]:重讀問題我不確定你是否可能意味着阻止小程序中的選擇。 我的解決方案是從PCD的角度來使用的。

通常為NO,除非默認選擇 Applet,否則始終使用SELECT by Name(其中名稱是應用程序標識符或AID)來執行Applet的選擇。 這可以使用Applet#selectingApplet()來檢測,即使通過另一個APDU進行選擇也應該有效。 之后,您可以使用靜態APDU.getProtocol()方法過濾掉不需要的協議。

但是,即使從流程方法中返回錯誤的狀態字, applet也無法停止被平台選中 所以選擇的唯一有意義的答案是SW_NO_ERROR (當然是SW 9000 )。 所以以前的解決方案無法讓你隨處可見。


在處理SELECT APDU之前,Java Card小程序也將接收對Applet.select()的調用。 但是,您無法在此調用中對協議/媒體做出決定; APDU接口中的靜態方法尚不可用。 如果可能,則可以通過特定接口阻止選擇。 所以這也不會讓你到任何地方。


最后,簡單地為您收到的每個APDU調用APDU.getProtocol()可能更實際。 然后拋出一個ISOExceptionSW_CONDITIONS_NOT_SATISFIED或任何類似的可以接受的狀態字(ISO / IEC沒有指定拋出其地位的話,遺憾的是,只有哪些存在)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM