本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
產生隨機接腳和相關聯的 PVV,然後驗證值
建立 key(s)
為了產生隨機接腳和 PVV,您需要兩個金鑰:用於產生 PVV 的接腳驗證金鑰 (PVK),以及用於加密接腳的接腳加密金鑰。接腳本身會在服務內安全地隨機產生,且與任一金鑰的密碼編譯無關。
PGK 必須是以 PVV 演算法本身為基礎的演算法 TDES_2KEY 金鑰。PEK 可以是 TDES_2KEY、TDES_3KEY 或 AES_128。在這種情況下,由於 PEK 旨在供系統內部使用,因此 AES_128 是不錯的選擇。如果 PEK 用於與其他系統 (例如,卡網路、收單機構、ATMs) 交換,或作為遷移的一部分進行移動,則基於相容性原因,TDES_2KEY 可能是更適當的選擇。
建立 PEK
$
aws payment-cryptography create-key \ --exportable --key-attributes KeyAlgorithm=AES_128,KeyUsage=TR31_P0_PIN_ENCRYPTION_KEY,\ KeyClass=SYMMETRIC_KEY,\ KeyModesOfUse='{Encrypt=true,Decrypt=true,Wrap=true,Unwrap=true}' --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
回應會回傳請求參數,包括後續呼叫的 ARN 以及金鑰檢查值 (KCV)。
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt", "KeyAttributes": { "KeyUsage": "TR31_P0_PIN_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY", "KeyAlgorithm": "AES_128", "KeyModesOfUse": { "Encrypt": false, "Decrypt": false, "Wrap": false, "Unwrap": false, "Generate": true, "Sign": false, "Verify": true, "DeriveKey": false, "NoRestrictions": false } }, "KeyCheckValue": "7CC9E2", "KeyCheckValueAlgorithm": "CMAC", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY", "CreateTimestamp": "2023-06-05T06:41:46.648000-07:00", "UsageStartTimestamp": "2023-06-05T06:41:46.626000-07:00" } }
請記下代表金鑰KeyArn
的 ,例如 arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt。在下一個步驟中,您需要用到。
建立 PVK
$
aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=TDES_2KEY,KeyUsage=TR31_V2_VISA_PIN_VERIFICATION_KEY,KeyClass=SYMMETRIC_KEY,KeyModesOfUse='{Generate=true,Verify=true}' --tags='[{"Key":"CARD_BIN","Value":"12345678"}]'
回應會回傳請求參數,包括後續呼叫的 ARN 以及金鑰檢查值 (KCV)。
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-2::key/ov6icy4ryas4zcza", "KeyAttributes": { "KeyUsage": "TR31_V2_VISA_PIN_VERIFICATION_KEY", "KeyClass": "SYMMETRIC_KEY", "KeyAlgorithm": "TDES_2KEY", "KeyModesOfUse": { "Encrypt": false, "Decrypt": false, "Wrap": false, "Unwrap": false, "Generate": true, "Sign": false, "Verify": true, "DeriveKey": false, "NoRestrictions": false } }, "KeyCheckValue": "51A200", "KeyCheckValueAlgorithm": "ANSI_X9_24", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY", "CreateTimestamp": "2023-06-05T06:41:46.648000-07:00", "UsageStartTimestamp": "2023-06-05T06:41:46.626000-07:00" } }
請記下代表金鑰KeyArn
的 ,例如 arn:aws:payment-cryptography:us-east-2::key/ov6icy4ryas4zcza。在下一個步驟中,您需要用到。
產生隨機 PIN 碼、產生 PVV 並傳回加密的 PIN 碼和 PVV
在此範例中,我們將產生新的 (隨機) 4 位數接腳,其中輸出將是加密的 PIN block
(PinData.PinBlock) 和 PVV
(pinData.VerificationValue). 金鑰輸入為 PAN
、 Pin Verification Key
(也稱為 PIN 產生金鑰)、 Pin Encryption Key
和 PIN 區塊格式。
此命令要求金鑰類型為 TR31_V2_VISA_PIN_VERIFICATION_KEY
。
$
aws payment-cryptography-data generate-pin-data --generation-key-identifier arn:aws:payment-cryptography:us-east-2::key/37y2tsl45p5zjbh2 --encryption-key-identifier arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt --primary-account-number 171234567890123 --pin-block-format ISO_FORMAT_0 --generation-attributes VisaPin={PinVerificationKeyIndex=1}
{ "GenerationKeyArn": "arn:aws:payment-cryptography:us-east-2::key/37y2tsl45p5zjbh2", "GenerationKeyCheckValue": "7F2363", "EncryptionKeyArn": "arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt", "EncryptionKeyCheckValue": "7CC9E2", "EncryptedPinBlock": "AC17DC148BDA645E", "PinData": { "VerificationValue": "5507" } }
使用 PVV 方法驗證加密的 PIN
在此範例中,我們將驗證指定 PAN 的 PIN。PIN 通常由持卡人或使用者在驗證的交易時間提供,並與檔案上的值進行比較 (持卡人的輸入會以終端機或其他上游提供者的加密值提供)。為了驗證此輸入,也會在執行時間提供下列值 - 加密的接腳、用來加密輸入接腳的金鑰 (通常稱為 IWK),PAN
以及要驗證的值 ( PVV
或 PIN offset
)。
如果 AWS 付款密碼編譯能夠驗證 PIN,則會傳回 http/200。如果未驗證 PIN 碼,則會傳回 http/400。
$
aws payment-cryptography-data verify-pin-data --verification-key-identifier arn:aws:payment-cryptography:us-east-2::key/37y2tsl45p5zjbh2 --encryption-key-identifier arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt --primary-account-number 171234567890123 --pin-block-format ISO_FORMAT_0 --verification-attributes VisaPin="{PinVerificationKeyIndex=1,VerificationValue=5507}" --encrypted-pin-block AC17DC148BDA645E
{ "VerificationKeyArn": "arn:aws:payment-cryptography:us-east-2::key/37y2tsl45p5zjbh2", "VerificationKeyCheckValue": "7F2363", "EncryptionKeyArn": "arn:aws:payment-cryptography:us-east-2::key/ivi5ksfsuplneuyt", "EncryptionKeyCheckValue": "7CC9E2", }