操作系统:Win7x64
ukey型号:Longmai GM3000 for itrus(itrus定制版。通用版应该也可以,手头没有,没法测试)
csp版本: GM3000TWCSP.dll 1.1.20.xxx
GM3000TWCSP_s.dll 2.0.0.2
目的:调用csp接口,实现使用ukey内证书做签名时,每次签名都输入pin码。即每次签名后都清PIN码缓存。
问题:厂家一开始提供的一版中间件,是不清PIN缓存的。输入一次PIN后,短时间内(估计几分钟)再次签名,不需要再输入PIN。
后来向厂家要了一版中间件,安装后,可以清PIN码了。
很奇怪这俩中间件有啥区别。于是:
步骤:
1. 对比安装两个版本中间件后,system32和syswow64目录下新增的gm3000开头和mtoken开头的文件的版本区别。好像没区别。可以判断能否清PIN码和库文件无关。
2.使用注册表对比工具BCompare,对比安装两个版本中间件后,注册表的变化。发现安装清PIN码中间件后:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000002
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000002
而不清PIN码时:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000001
实测,只有"CrossProcess"=dword:00000002时可以清PIN码,"CrossProcess"=dword:00000001或把"CrossProcess"=dword:00000001 删除是不清PIN码。
原因基本确定:csp读取这一dword值,决定是否清PIN码。
为了方便,写两个注册表文件来实现快速切换:
清PIN码:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000002
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000002
不清PIN码:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=dword:00000001
或者直接删除这一项值:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=-
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Longmai GM3000 for itrus CSP V1.1]
"CrossProcess"=-
测试通过。