如何在POS上创建PIN块?

时间:2015-11-19 08:13:30

标签: cryptography 3des

我们为POS终端开发软件,并使用他们的开发人员库POS。生成引脚块的功能,向我们询问PIN键。并且为了生成PIN密钥,我们需要指定主密钥,并且为了生成主密钥,首先需要指定加载密钥。 所以顺序是:加载密钥 - >主密钥 - >密钥。

我们需要了解这些密钥是如何相互关联的。这个功能内部发生了什么。因为我们无法查看其功能。 我们对他们的申请了解多少? 在应用程序上使用加密3des的方法,也许一些关键是XORing。我们确切地知道它显示的是哪个引脚块。

例如,如果您指定以下键:

加载密钥:11111111111111111111111111111111

万能钥匙:11111111111111111111111111111111

PIN码:11111111111111111111111111111111

PAN:1111111111111111

PIN:1111

我们得到像这样的pin block: 0C43B779D7A1CB72

请帮助那些精通加密和终端的人。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您的方案是使用在“加载密钥”下加载的主密钥进行主/会话PIN加密。

  1. 加载密钥 以明文形式加载到设备中。

    11111111111111111111111111111111

  2. 在ECB模式下使用DES解密PIN主密钥密码loadingKey = 11111111111111111111111111111111,提供普通PIN主密钥11111111111111111111111111111111(使用加载密钥)。

    237B2304C393D3AC237B2304C393D3AC

    pinMasterKey = DES_Dec_ECB(key=loadingKey,data=11111111111111111111111111111111)

  3. 使用工作密钥密码pinMasterKey = 237B2304C393D3AC237B2304C393D3AC请求输入密钥,密钥密码11111111111111111111111111111111在ECB模式下使用DES解密为普通工作密钥5CC98C26CB8C00CE5CC98C26CB8C00CE(使用PIN主密钥)。

    pinWorkingKey = DES_Dec_ECB(key=pinMasterKey,data=11111111111111111111111111111111)

    pinWorkingKey = 5CC98C26CB8C00CE5CC98C26CB8C00CE

  4. 此工作密钥用于加密普通格式0 PIN块041100EEEEEEEEEE(由041111FFFFFFFFFF0000111111111111所述的0C43B779D7A1CB72pinBlock = (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(); }

  5. 祝你好运!

    Desclaimer:我不是加密专家,所以请确认我的想法。

    (注意:DES密钥奇偶校验未调整)