

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS 支付密码学的特定区域功能
<a name="advanced.regional"></a>

某些功能可能因地区而异，不得以其他方式使用。本节将更详细地描述这些功能。

# AS2805
<a name="advanced.regional.as2805"></a>

澳大利亚标准2805 (AS2805) 是主要用于信用卡支付交易的电子资金转账标准。它由[澳大利亚标准](https://www.standards.org.au/)局维护。该标准由 6 本书组成，涵盖了从消息格式到加密标准的众多主题。

第 6 部分提供了有关密钥管理的指导，包括 host-to-host (node-to-node) 通信和相关的加密要求，而其他方面则在其他部分中介绍。该标准中的所有密码学目前都基于TDES。

**注意**  
 AS2805 目前已在 ap-southeast-2 区域上市。它将在不久的将来推广到其他地区。

AS2805 与其他实现方式相比有许多差异，总结如下。

*密钥保护*  
依赖按键变体而不是按键块，例如 TR-31/X9.143。 AWS Payment Cryptography 将所有密钥存储为内部密钥块，但允许使用 AS28 05 个定义的变体进行导入、导出和计算 

*单向按键*  
AS2805 强制使用单向密钥。如果两个节点都需要生成消息身份验证码 (MAC)，则它们使用两个密钥。

*别针方块*  
AS2805 定义了每笔交易的唯一密码加密密钥的密钥派生技术。这可以用来代替 DUKPT。与DUKPT使用交易计数器相比， AS2805方案依赖于交易数据（跟踪号和交易金额）。

*密钥交换验证*  
定义在开始交换工作密钥（例如 PIN 密钥）之前验证 KEK 的过程。在其他方案中，KEK不经常交换，并使用KCV进行验证。

AS2805 使用按键变体而不是钥匙块的概念来确保按键仅用于预期（也是唯一的）用途。以下是使用密钥导入、导出或执行其他加密功能时，P AWS ayment Cryptography 如何在变体和密钥块之间映射。


| AS2805 密钥类型 | AWS 付款密码学密钥类型 | 
| --- | --- | 
| TERMINAL\$1MAJOR\$1KEY\$1VARIANT\$100 |  TR31\$1K0\$1KEY\$1NECRYPTION\$1KEY | 
| PIN\$1ENCRYPTION\$1KEY\$1VARIANT\$128 |  TR31\$1P0\$1PIN\$1加密密钥 | 
| 消息认证密钥变体\$124 |  TR31\$1M0\$1ISO\$116609\$1MAC\$1KEY | 
| 数据加密密钥变体\$122 |  TR31\$1D0\$1SYMMETRIC\$1DATA\$1加密密钥 | 
| VARIANT\$1MASK\$182、VARIANT\$1MASK\$182C0 |  作为 KEK 验证过程一部分提供的选项。这些密钥类型是临时性的，不由服务存储。 | 

给定两个节点，节点 1 和 node2，以下示例是从 node1 的角度出发。 AWS 支付密码学在流程 APIs 的两边都提供支持。

**Topics**
+ [

# 交换初始密钥 (KEK)
](as2805.kekexchange.md)
+ [

# KEK 的验证
](as2805.kekvalidation.md)
+ [

# 工作密钥的创建和传输
](as2805.workingkeys.create.md)
+ [

# 导出工作密钥
](as2805.workingkeys.export.md)
+ [

# 别针翻译
](as2805.pintranslation.md)
+ [

# Mac 生成和验证
](as2805.mac.md)

# 交换初始密钥 (KEK)
<a name="as2805.kekexchange"></a>

 在 AS28 05 中，双方都有自己的 KEK。KEK (s) 是指发送端密钥，每当发送方需要密钥并将其发送到 node2 时，都将使用该 protect/wrap 密钥。KEK (r) 是由另一方（节点 2）创建的密钥。

**注意**  
这些术语是相对的——一方创建密钥（发送方），另一方接收密钥。因此 KEY1，在节点 1 上它被称为 KEK (s)，在节点 2 上被称为 KEK (r)。

 AS2805 的 KEK 始终是密钥类型 = TR31 \$1K0\$1KEY\$1ENCRYPTION\$1KEY，因为它们用于保护密码而不是密钥块。这映射到 05 6.1 中定义的 TERMINAL\$1MAJOR\$1KEY\$1VARIANT\$100 AS28 

步骤：

**1.创建密钥**  
使用 [CreateKey](create-keys.md)api 创建密钥。您将创建一个 \$1K0\$1KEY\$1KEY\$1ENCRYPTION TR31 \$1KEY 类型的密钥

**2. 确定与 node2 交换密钥的方法**  
确定如何[与对手交换 KEK](keys-export.md)。对于 AS28 05，最常见且可互操作的方法是 RSA Wrap。

**3. 导出 KEKs**  
根据您在上面的选择，您将收到来自 node2 的公钥证书。您将使用该证书运行导出以保护密钥（或者如果使用 ECDH 则派生密钥）。

**4. 导入 KEKr**  
根据您在上面的选择，您将向 node2 发送公钥证书。您将使用该证书运行 import，将节点 2 加载 KEKr 到服务中。

# KEK 的验证
<a name="as2805.kekvalidation"></a>

![\[使用 AWS 支付密码学的 PIN 应用程序的高级网络图示例\]](http://docs.aws.amazon.com/zh_cn/payment-cryptography/latest/userguide/images/as2805/kek_validation.png)


当您的服务（节点 1）连接到 node2 时，双方将使用名为 KEK 验证的过程确保在后续操作中使用相同的 KEK。

**1。验证第一个密钥的步骤**

**1.1 接收 KRs**  
Node2 将生成一个 KRs 并将其作为登录过程的一部分发送给您。他们可能会使用 AWS 支付密码学来生成此值或其他解决方案。

**1.2 生成 KEK 验证响应**  
您的节点将生成 KEK 验证响应，输入为 KEK (r)，并在步骤 1 中 KRs 提供。  

**Example**  

```
cat >> generate-kek-validation-response.json
{
    "KekValidationType": {
        "KekValidationResponse": {
            "RandomKeySend": "9217DC67B8763BABCFDF3DADFCD0F84A"
        }
    },
    "RandomKeySendVariantMask": "VARIANT_MASK_82",
    "KeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza"
}
```

```
$ aws payment-cryptography-data generate-as2805-kek-validation --cli-input-json file://generate-kek-validation-response.json
```

```
{
 "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza",
 "KeyCheckValue": "0A3674",
 "RandomKeyReceive": "A4B7E249C40C98178C1B856DB7FB76EB",
 "RandomKeySend": "9217DC67B8763BABCFDF3DADFCD0F84A"
}
```

**1.3 已计算回报 KRr**  
将计算结果返回 KRr 到节点 2。该节点会将其与步骤 1 中的计算值进行比较。

**2. 验证第二个密钥的步骤**

**2.1 生成 KRr 和 KRs**  
您的节点将使用 AWS 支付密码学生成一个随机值和该值的倒置（反向）副本。该服务将输出由 KEK 封装的这两个值。它们被称为 KR (s) 和 KR (r)。  

**Example**  

```
cat >> generate-kek-validation-request.json 
{
    "KekValidationType": {
        "KekValidationRequest": {
            "DeriveKeyAlgorithm": "TDES_2KEY"
        }
    },
"RandomKeySendVariantMask": "VARIANT_MASK_82",
    "KeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/rhfm6tenpxapkmrv"
}
```

```
$ aws payment-cryptography-data generate-as2805-kek-validation --cli-input-json file://generate-kek-validation-request.json
```

```
{
 "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/rhfm6tenpxapkmrv",
 "KeyCheckValue": "DC1081",
 "RandomKeyReceive": "A4B7E249C40C98178C1B856DB7FB76EB",
 "RandomKeySend": "9217DC67B8763BABCFDF3DADFCD0F84A"
}
```

**2.2 发送 KRs 到节点 2**  
将发送 KRs 到节点 2。保留以 KRr 备日后验证。

**2.3 节点 2 生成 KEK 验证响应**  
Node2 使用 KEKr 和 KRs，生成并将其发送回您的服务。 KRr 

**2.4 验证响应**  
比较步骤 1 KRr 中的值和步骤 3 中返回的值。如果它们匹配，请继续。

# 工作密钥的创建和传输
<a name="as2805.workingkeys.create"></a>

 AS2805 中使用的典型工作键包括两组按键：

节点之间的密钥，例如：区域密码密钥 (ZPK)、区域加密密钥 (ZEK) 和区域身份验证密钥 (ZAK)。

终端和节点之间的密钥，例如：终端主密钥 (TMK) 和终端引脚密钥 (TPK)（如果不使用 DUKPT）。

**注意**  
我们建议尽量减少每个终端密钥的密钥，并尽可能使用 TR-34 和 DUKPT 等使用较少密钥数量的技术。

**Example**  
在此示例中，我们使用了可选标签来跟踪此密钥的用途和用途。标签不用作系统加密功能的一部分，但可用于分类、财务跟踪，并可用于应用 IAM 策略。  

```
cat >> create-zone-pin-key.json 
{
    "KeyAttributes": {
        "KeyUsage": "TR31_P0_PIN_ENCRYPTION_KEY",
        "KeyClass": "SYMMETRIC_KEY",
        "KeyAlgorithm": "TDES_2KEY",
        "KeyModesOfUse": {
            "Encrypt": true,
            "Decrypt": true,
            "Wrap": true,
            "Unwrap": true,
            "Generate": false,
            "Sign": false,
            "Verify": false,
            "DeriveKey": false,
            "NoRestrictions": false
        }
    },
    "KeyCheckValueAlgorithm": "ANSI_X9_24",
    "Exportable": true,
    "Enabled": true,
    "Tags": [
        {
            "Key": "AS2805_KEYTYPE",
            "Value": "ZONE_PIN_KEY_VARIANT28"
        }
    ]
}
```

```
$ aws payment-cryptography-data create-key --cli-input-json file://create-zone-pin-key.json --region ap-southeast-2
```

```
{
 "Key": {
 "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh",
 "KeyAttributes": {
 "KeyUsage": "TR31_P0_PIN_ENCRYPTION_KEY",
 "KeyClass": "SYMMETRIC_KEY",
 "KeyAlgorithm": "TDES_2KEY",
 "KeyModesOfUse": {
 "Encrypt": true,
 "Decrypt": true,
 "Wrap": true,
 "Unwrap": true,
 "Generate": false,
 "Sign": false,
 "Verify": false,
 "DeriveKey": false,
 "NoRestrictions": false
 }
 },
 "KeyCheckValue": "9A325B",
 "KeyCheckValueAlgorithm": "ANSI_X9_24",
 "Enabled": true,
 "Exportable": true,
 "KeyState": "CREATE_COMPLETE",
 "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
 "CreateTimestamp": "2025-12-17T09:05:27.586000-08:00",
 "UsageStartTimestamp": "2025-12-17T09:05:27.570000-08:00"
 }
}
```

# 导出工作密钥
<a name="as2805.workingkeys.export"></a>

为了保持与其他方的兼容性，P AWS ayment Cryptography 支持 AS28 05 种对称密钥包装技术，这些技术使用密钥变体而不是像 TR-31 这样的密钥块。如果各方共享多个密钥，则应单独导出每个密钥。如果数据是双向发送的，则同一类型的各方之间可能会有两个密钥，例如 ZAK (s) 和 ZAK (r)，双方都使用它们来生成消息身份验证码。

要以这些格式导入和导出的其他参数是在命令中指定的。

```
cat >> export-zone-pin-key.json 
{
    "ExportKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/alsuwfxug3pgy6xh",
    "KeyMaterial": {
        "As2805KeyCryptogram": {
            "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/rhfm6tenpxapkmrv",
            "As2805KeyVariant: "PIN_ENCRYPTION_KEY_VARIANT_28"
        }
    }
}
```

```
$ aws payment-cryptography-data export-key --cli-input-json file://export-zone-pin-key.json --region ap-southeast-2
```

```
{
    "WrappedKey": {
        "KeyCheckValue": "DC1081",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyMaterial": "HDC10AEF038E695DDD72AF08DC1BB422D",
        "WrappedKeyMaterialFormat": "KEY_CRYPTOGRAM",
        "WrappingKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/rhfm6tenpxapkmrv"
    }
}
```

# 别针翻译
<a name="as2805.pintranslation"></a>

AS2805 在第 6.4 节中描述了会话特定的密钥派生模式。它的用途与 DUKPT 类似，任何一种算法都可以使用，因为第 6.7 节中介绍了 DUKPT。在该方案中，会话引脚密钥（称为 KPE）是使用 SystemTraceAuditNumber (STAN) 从终端引脚密钥派生的，并 TransactionAmount 作为派生数据。

Translate pin 是一项常用功能 to/from ，可以翻译多种格式。在此示例中，我们将密码从 KPE 转换为 PIN 加密密钥 (PEK)，例如在向支付网络发送 PIN 时。

```
cat >> translate-pin-as2805.json 
{
    "EncryptedPinBlock": "B3B34B43BAB5F81A",
    "IncomingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
    "IncomingTranslationAttributes": {
        "IsoFormat0": {
            "PrimaryAccountNumber": "9999179999900013"
        }
    },
      "IncomingAs2805Attributes": {
        "SystemTraceAuditNumber": "000348",
        "TransactionAmount": "000000000328"
    },
    "OutgoingKeyIdentifier": "",
    "OutgoingTranslationAttributes": {    
        "IsoFormat0": {
            "PrimaryAccountNumber": "9999179999900013"
        }
    }
}
```

```
$ aws payment-cryptography-data translate-pin-data --cli-input-json file://translate-pin-as2805.json  --region ap-southeast-2
```

```
{
    "WrappedKey": {
        "KeyCheckValue": "DC1081",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "KeyMaterial": "HDC10AEF038E695DDD72AF08DC1BB422D",
        "WrappedKeyMaterialFormat": "KEY_CRYPTOGRAM",
        "WrappingKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/rhfm6tenpxapkmrv"
    }
}
```

# Mac 生成和验证
<a name="as2805.mac"></a>

生成和验证 MAC 命令支持多种命令， MACs 包括 HMAC、CMAC、EMV MAC 等。对于 AS28 05，在 AS28 05.4.1 中定义了一个额外的变体。通常，在 AS28 05 中，传入的消息使用此 MAC 进行验证，传出的消息也包括 MAC。

```
cat verify-mac.json 
{
    "KeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6",
    "Mac": "86304058",
    "MessageData": "73D8BA54D3852951DAEA41",
    "VerificationAttributes": {
        "Algorithm": "AS2805_4_1"
    }
}
```

```
$ aws payment-cryptography-data verify-mac --cli-input-json file://verify-mac.json --region ap-southeast-2
```

```
{
    "KeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6",
    "KeyCheckValue": "2976E7"
}
```