1) 标准的动态数据认证,卡片行为分析前执行.
2) 复合动态数据认证/应用密文生成,在GENERATEAC命令发出后执行。
3) 由终端恢复认证中心公钥。
4) 由终端恢复发卡行公钥。
5) 由终端恢复IC卡公钥。
6) RSA
A. N=P*Q//N公开,的模数,IC卡公钥
B. Φ(N)=(P-1)* (Q-1) //欧拉函数, 小于n并与n互素的正整数的个数
C. gcd(E,Φ(N))=1 //E公开,加密密钥
D. D*E≡1(modΦ(N)) //D保密, 解密密钥
E. Y=X^Emod N
F. X=Y^Dmod N
G. DQ=D mod (q-1) //8202 Q的指数
H. Qinv=1/qmod p //8201 系数数据
I. DP=D mod (p-1) //8203 P的指数
1. 恢复和验证IC卡公钥(P[8205]*Q[8204])
//IC卡公钥指数(9F47) IC_E = 03 //IC卡公钥证书(9F46) IC_I =11E5E2C0727BE714A9EE439AC9ED089B8C9FC8A2887A895E977517A2AF060053035875E4A0DDE71A4DCFB91CDEF25D250BE244AEE03111D7CE751385883A1A251213951FD19264355781D06C65331938B5C03C32C1EFCE808670FF484808345BB320A747E7E252EAD7F50075F6BD8E5F0D786097B990B8B3376C402B22261D56A67813D86828FBBE680ED9862820C6117B26DC23DDE00EFD1FB47D48F666885120DE33C94F3AAACE15C39DD348980CBB //恢复IC卡公钥证书(唯一) //IC_O = DeRSA(_CA_N, IC_E, IC_I) IC_O =6A046230360501000269314F122100064C0101B001+B85E8056A5307E37849412709FCF3BA50C413A45CDB38858E141112BE5744E80AF61E8353D4BCCD730979A1107B69E57794B5339F1E000EB04244FFA146DE06BB47AEB9B396539EE914A01D9ECF7A6C166CAA5994912A04F2334E83FB1812CB45AA140E604A41FE51C22C940882F4932357871832C0847DA6432DBD60184635ED1240023D033698A55D79200DB879D352B6E8FA5E0331D4D319CBC //BB = ('B', CA_N.GetLength() - 52); //HashValueInfo = IC_O.Mid(2, IC_O.GetLength() -42 - 2) + TagValue[9F48] + IC_E + SDA_Value //HashV = SHA1(HashValueInfo); HashV = 698A55D79200DB879D352B6E8FA5E0331D4D319C
字段名 | 长度 | 描述 | 格式 |
恢复数据头 | 1 | 十六进制,值为‘6A’ | b |
证书格式 | 1 | 十六进制,值为‘04’ | b |
应用主账号 | 10 | 主账号(在右边补上十六进制数‘F’) | cn 20 |
证书失效日期 | 2 | MMYY,在此日期后,这张证书无效 | n4 |
证书序列号 | 3 | 由发卡行分配给这张证书的唯一的二进制数 | b |
哈希算法标识 | 1 | 标识用于在数字签名方案中产生哈希结果的哈希算法 | b |
IC卡公钥算法标识 | 1 | 标识使用在IC卡公钥上的数字签名算法 | b |
IC卡公钥长度 | 1 | 标识IC卡公钥的模的字节长度 | b |
IC卡公钥指数长度 | 1 | 标识IC卡公钥指数的字节长度 | b |
IC卡公钥或IC卡公钥的最左边字节 | NI-42 | 如果NIC≤NI–42,这个字段包含了在右边补上了NI–42–NIC 个值为‘BB’的字节的整个IC卡公钥。 如果NIC >NI -42,这个字段包含了IC卡公钥最高位的NI–42个字节 | b |
哈希结果 | 20 | IC卡公钥以及相关信息的哈希值 | b |
恢复数据结尾 | 1 | 十六进制,值为‘BC’ | b |
2. 动态签名应用数据的生成
//内部认证,+DDOL[9F49](由终端生成的不可预知数,9F37,4个字节的二进制数) Send:0088000004+11223344 --->:61B3 Send:00C00000B3 //IC卡通过使用IC卡私钥对计算 --->:8081B009A7044A0C50066FB5DBF49DFF7FD280BB5664522B51916BBC0AABE39A564190AA2092E5E5FB406D543883AF3FE8C5C4A8A6DF090D9CC7006ED0530B3485E895DEADE1FE7EE93825EEAC64D7E44CA62F5CFF78AFE50792501D63ABD956397AFEDDAE807DE9BE9EDFA29C1F98CCE36F208E23A847AE1F6E11CA31A84B76165B9FB0E3C2E9F9C91ACBD4A5BB845D1B17881F19FAB2FE7FA20B936F16802A2EEDC4C4412DDDCCF848961743A86ADA1724F99000 [√] 内部认证生成密文成功(_IC_I) //恢复IC卡签名动态数据 //_IC_N(IC卡公钥P*Q) = IC_O.Mid(42, nIssuer_n_Len - 84) + TagValue[9F48] //_IC_O = DeRSA(_IC_N, IC_E, _IC_I); _IC_O =6A050108020003AAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB79E94C728CC576FC0A4EDA19A979BAC5698A0D75BC //HashValueInfo = _IC_O.Mid(2, _IC_O.GetLength() -22 * 2) + TagValue[9F37]; //HashV = SHA1(HashValueInfo); HashV = 79E94C728CC576FC0A4EDA19A979BAC5698A0D75 [√] 动态签名数据摘要信息一致...... [√] 动态数据认证成功......
字段名 | 长度 | 描述 | 格式 |
恢复数据头 | 1 | 十六进制,值为‘6A’ | b |
签名数据格式 | 1 | 十六进制,值为‘05’ | b |
哈希算法标识 | 1 | 标识用于在数字签名方案中产生哈希结果的哈希算法1 | b |
IC卡动态数据长度 | 1 | 标识IC卡动态数据的字节长度 | b |
IC卡动态数据 | LDD | 由IC卡生成和/或存储在IC卡上的动态数据 | - |
填充字节 | NIC- LDD–25 | (NIC-LDD–25)个值为‘BB’的填充字节 | b |
哈希结果 | 20 | 动态应用数据以及相关信息的哈希值 | b |
恢复数据结尾 | 1 | 十六进制,值为‘BC’ | b |
文/yanxin8原创,获取更多信息请访问http://yanxin8.com/440.html
C++ EMV EP/ED Javascript MFC MIFARE noteCard PBOC php QPBOC WordPress wp插件 创意发明 发现 小众软件 常识 教程 旗舰版 智能卡 注册码 游记 社保 算法 美文 职场 金融 面试题 0 12