我们为POS终端开发软件,并使用他们的开发人员库POS。生成引脚块的功能,向我们询问PIN键。并且为了生成PIN密钥,我们需要指定主密钥,并且为了生成主密钥,首先需要指定加载密钥。 所以顺序是:加载密钥 - >主密钥 - >密钥。
我们需要了解这些密钥是如何相互关联的。这个功能内部发生了什么。因为我们无法查看其功能。 我们对他们的申请了解多少? 在应用程序上使用加密3des的方法,也许一些关键是XORing。我们确切地知道它显示的是哪个引脚块。
例如,如果您指定以下键:
加载密钥:11111111111111111111111111111111
万能钥匙:11111111111111111111111111111111
PIN码:11111111111111111111111111111111
PAN:1111111111111111
PIN:1111
我们得到像这样的pin block: 0C43B779D7A1CB72
请帮助那些精通加密和终端的人。提前谢谢!
答案 0 :(得分:2)
您的方案是使用在“加载密钥”下加载的主密钥进行主/会话PIN加密。
加载密钥
以明文形式加载到设备中。
11111111111111111111111111111111
在ECB模式下使用DES解密PIN主密钥密码loadingKey = 11111111111111111111111111111111
,提供普通PIN主密钥11111111111111111111111111111111
(使用加载密钥)。
237B2304C393D3AC237B2304C393D3AC
pinMasterKey = DES_Dec_ECB(key=loadingKey,data=11111111111111111111111111111111)
使用工作密钥密码pinMasterKey = 237B2304C393D3AC237B2304C393D3AC
请求输入密钥,密钥密码11111111111111111111111111111111
在ECB模式下使用DES解密为普通工作密钥5CC98C26CB8C00CE5CC98C26CB8C00CE
(使用PIN主密钥)。
pinWorkingKey = DES_Dec_ECB(key=pinMasterKey,data=11111111111111111111111111111111)
pinWorkingKey = 5CC98C26CB8C00CE5CC98C26CB8C00CE
此工作密钥用于加密普通格式0 PIN块041100EEEEEEEEEE
(由041111FFFFFFFFFF
和0000111111111111
所述的0C43B779D7A1CB72
和pinBlock = (041111FFFFFFFFFF XOR 0000111111111111)
形成{ {1}}。
pinBlock = 041100EEEEEEEEEE
encryptedPinBlock = DES_Enc_ECB(key=pinWorkingKey,data=pinBlock)
encryptedPinBlock = 0C43B779D7A1CB72
public string Serialize(JobInfo info)
{
var stringBuilder = new StringBuilder();
using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture))
{
var writer = new XmlTextWriter(stringWriter);
new DataContractSerializer(typeof(JobInfo)).WriteObject(writer, info);
}
return stringBuilder.ToString();
}
Desclaimer:我不是加密专家,所以请确认我的想法。
(注意:DES密钥奇偶校验未调整)