# PIN 偏移量（IBM 3624）：PIN 验证与十进制化

> IBM 3624 PIN 验证的工作原理——十进制化表、PIN 偏移量计算、验证方法，以及与 PVV 的比较。

Canonical: https://hsmkit.com/zh/guides/pin-offset-ibm3624-guide/

Last updated: 2026-05-21

IBM 3624 PIN 验证方法（也称为 PIN 偏移量）是银行行业中最古老且部署最广泛的 PIN 验证方案之一。本指南解释 PIN 偏移量的工作原理以及它在 ATM 和 POS 网络中的使用方式。

## 什么是 IBM 3624 PIN 偏移量？

IBM 3624 方法通过从卡号（PAN）计算"自然 PIN"并使用偏移量值将其与实际 PIN 进行比较来验证客户的 PIN。偏移量是客户选择的 PIN 与计算的自然 PIN 之间的差值。

### 核心概念

```
自然 PIN = f(PAN, PIN_派生密钥)
PIN 偏移量 = 客户_PIN - 自然_PIN（模 10）
```

验证 PIN 时：
```
预期 PIN = 自然_PIN + PIN_偏移量（模 10）
```

如果预期 PIN 与提交的 PIN 匹配，则验证成功。

## PIN 偏移量工作原理

### 自然 PIN 生成

自然 PIN 使用 PIN 派生密钥（PDK）从 PAN 派生：

**步骤 1：准备 PAN**

取 PAN（主账号），排除校验位，并格式化：

```
PAN_格式化 = PAN 最右边 12 位数字（不含校验位）
```

**步骤 2：使用 PDK 加密**

使用 PIN 派生密钥进行 [3DES](/zh/guides/des-3des-legacy-encryption/) 加密：

```
加密结果 = 3DES_Encrypt(PDK, PAN_格式化)
```

**步骤 3：十进制化**

使用十进制化表将加密结果转换为十进制数字：

1. 取加密结果的每个十六进制数字
2. 使用表将其映射到十进制数字
3. 选择前 N 位数字（N 为 PIN 长度，通常为 4）

### 十进制化表

十进制化表将十六进制数字（0-F）映射到十进制数字（0-9）：

```
十六进制: 0 1 2 3 4 5 6 7 8 9 A B C D E F
十进制:  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
```

这是默认表。银行可以自定义以增加安全性——如果攻击者知道算法但不知道表，就无法计算自然 PIN。

### PIN 偏移量计算

生成自然 PIN 后，计算 PIN 偏移量：

```
PIN 偏移量 =（客户_PIN - 自然_PIN）模 10
```

每位数字独立计算：

```
偏移量_数字[i] =（客户_数字[i] - 自然_数字[i]）模 10
```

### 示例

给定：
- PAN：`4012345678901234`（校验位是 4）
- PDK：`0123456789ABCDEF FEDCBA9876543210`
- 客户 PIN：`1234`
- 十进制化表：默认

**步骤 1：格式化 PAN**
```
PAN（不含校验位）：401234567890123
最右边 12 位：012345678901
```

**步骤 2：加密**
```
加密结果 = 3DES_Encrypt(PDK, 012345678901)
结果：A1B2C3D4E5F6A7B8
```

**步骤 3：十进制化**
```
使用默认表：012345078056
自然 PIN（前 4 位）：0123
```

**步骤 4：计算偏移量**
```
偏移量 =（1234 - 0123）模 10 = 1111
```

**存储值**：PIN 偏移量 = `1111`

## PIN 验证过程

当客户在 ATM 输入 PIN 时：

1. ATM 将加密的 PIN 块发送到主机
2. 主机的 [HSM](/zh/guides/hsm-key-management-overview/) 解密 PIN 块
3. HSM 检索该卡的存储 PIN 偏移量
4. HSM 使用 PDK 和 PAN 计算自然 PIN
5. HSM 将偏移量加到自然 PIN 上
6. HSM 将结果与提交的 PIN 进行比较
7. 如果匹配，交易继续进行

### HSM 命令流程

```
1. 解密 PIN 块 → 提取提交的 PIN
2. Encrypt(PDK, PAN_格式化) → 加密结果
3. 十进制化(加密结果) → 自然 PIN
4. 自然_PIN + PIN_偏移量 → 预期 PIN
5. 比较(提交_PIN, 预期_PIN) → 结果
```

## PIN 偏移量存储位置

PIN 偏移量可以存储在多个位置：

- **在磁条上**：编码在磁道 2 或磁道 3 中
- **在发卡行数据库中**：与卡记录关联
- **在芯片中**：对于 EMV 卡，可能存储在芯片中

### 磁条存储

传统上，PIN 偏移量存储在磁道 2 的自由数据字段中：

```
磁道 2：PAN | 有效期 | 服务码 | 自由数据（包含 PIN 偏移量）
```

## 安全注意事项

### 优势

1. **简单性**：易于实现和理解
2. **高效性**：每次验证只需一次加密操作
3. **兼容性**：与现有磁条基础设施兼容

### 弱点

1. **无 PIN 加密**：偏移量本身未加密——如果数据库泄露，攻击者可以计算 PIN
2. **表依赖性**：安全性依赖于保密十进制化表
3. **自然 PIN 暴露**：如果 PDK 泄露，可以为所有卡计算自然 PIN

### 缓解措施

- 将 PDK 安全保存在 [HSM](/zh/guides/hsm-key-management-overview/) 内部
- 使用非默认十进制化表
- 保护 PIN 偏移量数据库
- 考虑迁移到 [PVV](/payments-pin-pvv) 以获得更强的安全性

## PIN 偏移量与 PVV 对比

| 特性 | PIN 偏移量（IBM 3624） | PVV（VISA） |
|------|----------------------|------------|
| 来源 | IBM | VISA |
| 验证 | 将偏移量加到自然 PIN | 比较 PVV 值 |
| 存储 | 偏移量在磁条/数据库 | PVV 在磁条上 |
| 算法 | 3DES + 十进制化 | 3DES + 十进制化 |
| 安全性 | 中等 | 更高 |
| 密钥 | PDK | PVK |

PVV 提供更强的安全性，因为验证值本身是加密的，而不仅仅是一个偏移量。详情参见 [PIN PVV 指南](/payments-pin-pvv)。

## 实际应用

### ATM 网络

PIN 偏移量仍在全球 ATM 网络中广泛使用：
- 大多数 ATM 支持 IBM 3624 验证
- 与传统系统的向后兼容性
- 在 HSM 中简单实现

### 迁移路径

许多银行正在从 PIN 偏移量迁移到 PVV 或 EMV 芯片验证：
1. 实现双重验证（支持两种方法）
2. 逐步重新发行带有 PVV 的卡
3. 最终淘汰 PIN 偏移量

## 亲自尝试

使用我们的 PIN 偏移量工具理解和验证 IBM 3624 方法：

- [PIN 偏移量计算器](/payments-pin-offset) —— 使用 IBM 3624 方法计算自然 PIN、计算 PIN 偏移量和验证 PIN

所有处理在您的浏览器本地完成——您的 PDK 不会离开您的设备。
