PBOC/EMV之DDA(動態數據認證)
文章出處:http://hz-huyue.com 作者: 人氣: 發表時間:2012年05月27日
前一篇文章講了SDA,DDA的步驟可以這樣理解:先執行SDA,再執行DDA特有的步驟. 所以這篇文章主要講這個特有的步驟.正是這個特有的步驟,使得DDA不僅具有SDA的功能(保證卡片上的數據在個人化后不會被修改),還可以防止卡片被復制偽造.
第一步,取IC公鑰
在SDA階段取得的發卡行公鑰,在DDA時還有一個用途,就是恢復IC卡公鑰. 可以用下面的公式表示:
發卡行公鑰+IC卡公鑰證書+RSA算法=IC卡公鑰
IC卡公鑰證書是終端在讀數據階段從卡里讀出來的, 是一串密文數據,類似如下:
第二步,取簽名的動態數據
終端首先發起內部認證命令給卡片, 命令的數據域是DDOL中指明的數據, DDOL是卡片在讀數據階段返回給終端的,告訴終端自己需要哪些終端數據來生成簽名的動態數據. 舉例如下:
要注意9F37(終端不可預知數)是DDOL的必備項.
卡片用終端送來的DDOL中的數據,加上自己產生的動態數據(比如ATC),用IC卡私鑰(注意這個, 這個私鑰放在安全存貯區域,是不可復制的)生成一個密文數據,這個數據叫做簽名的動態應用數據. 然后卡片把這個數據通過內部認證返回給終端.
第三步,驗證哈希值
用公式可表示如下:
IC卡公鑰+動態簽名的應用數據+RSA=數據A
數據A也包括兩部分,一部分我把它叫A1,另一部分叫哈希結果A
終端用A1加上DDOL指定的數據,用指定的哈希算法計算一個哈希結果B.
A和B比較,如果相等,則DDA成功,否則失敗.
前面一開始說到,DDA可以防止復制卡片, 從上面一系列的流程可以看出, 即使你復制一張卡,SDA可以通過(因為靜態的數據都是一樣的),但是由于IC卡私鑰的安全性,動態簽名的驗證是肯定失敗的.