3des

計算 3DES 密鑰校驗值 (KCV)

  • November 9, 2019

我正在嘗試驗證 PC Crypto 生成的三重 DES 密鑰組件。關鍵部分是:

E6F1081FEA4C402CC192B65DE367EC3E  

應返回的 KCV 值為:

212CF915

理論上,它應該被計算為:用 3DES 的密鑰部分加密二進制 0。

我一直在嘗試以下連結,但計算不起作用。 http://tripledes.online-domain-tools.com/

我在線上工具上使用了以下參數化。

http://tripledes.online-domain-tools.com/

任何人都可以確認計算是按照我提到的那樣進行的嗎?

我只是整理了一個小型 python (python 3) 範例,用於計算 PC Crypto 發出的 KCV(二進制 0 加密的前 4 個字節與密鑰部分)。我可以確認執行有效。該腳本基於 IBM 官方文件(我可以訪問官方儲存庫,儘管我無法線上找到文件來引用它們)。

import binascii
import hashlib
import base64
from pyDes import *

data = '000000000000000000000000000000'
key = 'E6F1081FEA4C402CC192B65DE367EC3E'

key = binascii.unhexlify(key)
data= binascii.unhexlify(data)

print('key: ' + str(key))

k = triple_des(key, ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)

print('KCV: ' + str(binascii.hexlify(d)[0:8]))

這裡有三個問題:

  1. 使用的線上工具需要一個 24 字節(48 個十六進製字元)的密鑰;因此您應該輸入E6F1081FEA4C402CC192B65DE367EC3EE6F1081FEA4C402C作為鍵,複製前 8 個字節;這是將 16 字節的兩塊三重 DES 密鑰擴展為 24 字節的三塊三重 DES 密鑰的慣用方法。
  2. 您提供了 16 個字節(32 個十六進製字元)作為輸入,是所需字節數的兩倍;不過,這不會影響 KCV 的計算。
  3. KCV 值應該是結果的前 3 個字節(6 個十六進製字元),而不是 4 個字節(8 個十六進製字元)。

212cf9修復此問題後,可以使用該工具正確獲得KCV 。

注意:使用線上工具來檢查真實密鑰是一個壞主意,就像使用線上 RNG 生成真實密鑰是一個壞主意一樣。

引用自:https://crypto.stackexchange.com/questions/37379