功能方法如Java卡API的2.2文件here提到的,selectingApplet()
是用於由小應用程序process()
方法區分選擇哪個選擇此applet APDU命令的方法,從所有其他SELECT APDU命令可能與文件或內部小程序狀態選擇有關,並且如果正在選擇此小程序,則返回true。什麼是selectingApplet的()中JAVACARD2.2
我的問題是爲什麼我們需要這種方法?甚至更一般:爲什麼選定的applet需要接收SELECT-applet命令?我認爲唯一需要知道的實體SELECT -applet APDU是JCRE。
我建議下面的情形:
- JCRE從CAD
- 收到APDU命令來檢查,看它是否是一個SELECT APDU命令與否。
- 如果它不是SELECT APDU命令,它將接收到的APDU發送到所選Applet的
process()
方法。並且所選擇的小程序解釋並執行它(使用開關,如果表達式並且不需要使用selectingApplet()
方法) - 如果它是SELECT APDU命令,檢查命令的數據字段的長度以查看它是否爲一個選擇文件或它是一個選擇小程序。
- 如果是SELECT文件命令,JCRE再次發送至被選的applet的
process()
方法。但是如果它是SELECT applet coomand,JCRE invokedeselet()
當前選擇的小程序的方法,然後調用select()
方法的新請求的小程序。和接收True
後,使其選擇並等待下一個APDU命令(甚至不需要發送先前SELECT-Applet
APDU命令到這個新選的applet的process()
法)
有什麼不對上述實施?什麼是JC 2.2當前實現的優勢(發送所有接收到的APDU當前選定的小程序的process()
方法和selectingApplet()
區分不同選擇命令)
我認爲目前的實施提供一個漏洞!如果程序員以其方法將其所有接收到的APDU寫入EEPROM中的方式實施他/她的小應用程序,則他/她可以檢索卡上某些其他安裝的小應用程序的AID。這是正確的嗎?
你的意思是''chooseApplet()'會調用一次嗎?或者每次_JCRE_收到一個_APDU_時都會調用它? – TheGoodUser 2014-11-09 13:21:06
請參閱上面的編輯 – 2014-11-10 14:25:45