API 如何在 POS 上创建密码块?

How API on POS creating pin block?

我们为 POS 终端开发软件,并使用他们的 POS 开发人员库。生成pin block的函数,向我们询问PIN key。为了生成 PIN 密钥,我们需要指定主密钥,为了生成主密钥,您首先需要指定加载密钥。 所以顺序是:loading key -> master key -> PIN key。

我们需要找出这些键是如何相互关联的。函数内部发生了什么。由于我们无法查看它们的功能。 我们对它们的应用了解多少? 在应用程序上使用加密 3des 的方法,并且可能某些密钥是 XORing。我们确切地知道它显示的是哪个引脚块。

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

加载密钥:1111111111111111111111111111111

主密钥:1111111111111111111111111111111

PIN 码:1111111111111111111111111111111

潘:1111111111111111

密码:1111

我们得到这样的引脚块: 0C43B779D7A1CB72

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

您的方案是 master/session PIN 加密,使用在 "loading key" 下加载的主密钥。

  1. 加载密钥11111111111111111111111111111111以普通方式加载到设备中。

    loadingKey = 11111111111111111111111111111111

  2. PIN 主密钥密文 11111111111111111111111111111111 在 ECB 模式下使用 DES 解密,给出普通 PIN 主密钥 237B2304C393D3AC237B2304C393D3AC(使用加载密钥)。

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

    pinMasterKey = 237B2304C393D3AC237B2304C393D3AC

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

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

    pinWorkingKey = 5CC98C26CB8C00CE5CC98C26CB8C00CE

  4. 此工作密钥用于加密纯格式 0 PIN 块 041100EEEEEEEEEE(由 XORing 041111FFFFFFFFFF0000111111111111 形成 here) 到 0C43B779D7A1CB72.

    pinBlock = (041111FFFFFFFFFF XOR 0000111111111111)

    pinBlock = 041100EEEEEEEEEE

    encryptedPinBlock = DES_Enc_ECB(key=pinWorkingKey,data=pinBlock)

    encryptedPinBlock = 0C43B779D7A1CB72

祝你好运!

免责声明:我不是加密专家,所以请验证我的想法。

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