第4章:用户KYC与AML — 从入门到实战
大家好,我是老张。今天咱们聊聊KYC和AML。说实话,这两个词在交易所圈子里都快被说烂了,但真正做对、做透的团队,我见过的真不多。
KYC不是填个身份证就完事。AML也不是拉个黑名单就交差。它们是一整套防御体系。我当年在上一家平台,就因为KYC等级划分太粗糙,被监管罚了一笔不小的数目。嗯,从那以后,我对这套东西就格外上心。
4.1 KYC等级划分 — 别一刀切
很多团队上来就搞三级KYC:初级、中级、高级。但说实话,这太死板了。我建议你根据用户的交易行为和资产规模动态调整等级。
举个例子。一个用户每天充提几十万U,但只过了初级KYC,你觉得风险大不大?我在项目中遇到过,有个用户就是利用低等级KYC的漏洞,频繁换地址洗钱。后来我们才把规则改成了「交易量触发升级」机制。
核心思路:KYC等级 = 身份可信度 × 行为风险系数
我个人习惯把等级分成四档:
| 等级 | 认证要求 | 日交易限额 | 提币限额 |
|---|---|---|---|
| L0 - 未认证 | 无 | 1000 USDT | 500 USDT |
| L1 - 基础 | 手机号+邮箱 | 10000 USDT | 5000 USDT |
| L2 - 标准 | 身份证+人脸 | 50000 USDT | 20000 USDT |
| L3 - 高级 | 地址证明+视频面签 | 无限 | 100000 USDT |
小技巧:L0用户虽然门槛低,但一定要限制提币速度。我曾经见过有人注册100个L0账号,每个提500U,一天就洗出去5万U。后来我们加了「新账号24小时冷静期」,这个问题才解决。
4.2 实名认证流程 — 用户体验与安全的平衡
认证流程太复杂,用户跑了。太简单,风控形同虚设。怎么平衡?我总结了一个「三步走」策略。
- 第一步:OCR识别 — 自动提取身份证信息,减少用户输入。这里要注意,有些国家的身份证格式很奇葩,比如日本驾照、香港智能身份证。我们的OCR模型必须覆盖主流国家。
- 第二步:活体检测 — 不是随便拍张照片就行。要检测眨眼、张嘴、转头。我见过有人用视频伪造活体,后来我们加入了「随机动作指令」,比如「请先眨眼再向左转头」,大大提高了攻击成本。
- 第三步:人工审核兜底 — 机器判不了的就转人工。但人工审核效率低,我建议设置「自动通过率」目标,比如80%的认证请求由机器自动完成,只有20%的异常请求才转人工。
注意:人脸数据是敏感信息,存储必须加密。我见过有团队把用户人脸照片直接存MongoDB,结果被拖库。一定要用独立的加密存储服务,且与业务数据库物理隔离。
4.3 反洗钱规则 — 别只盯着大额
很多人以为反洗钱就是监控大额交易。其实不是。洗钱高手最擅长「化整为零」。比如一笔100万U的交易,拆成1000笔1000U,每笔都低于你的监控阈值。
我建议你关注三个维度:
- 交易频率异常 — 比如一个用户1小时内充值20次,每次金额相近。这明显是结构化交易(structuring)。
- 地址关联性 — 新地址收到资金后,立刻转给另一个新地址,再转给第三个。这种「跳转」模式很可疑。
- 时间模式 — 凌晨3点到5点的交易量突然暴增。正常人不会这个时间频繁操作,除非是机器人或洗钱团伙。
实战规则示例:
规则1: 单日充值次数 > 10 且 单笔金额 < 5000 USDT → 触发人工审核
规则2: 资金在30分钟内经过 ≥ 3个地址 → 标记为「混币嫌疑」
规则3: 凌晨0-6点交易量占比 > 60% → 限制提币24小时
我曾经遇到一个案例。有个用户每天凌晨2点准时充值,每次4999 USDT,连续一周。系统自动标记后,我们一查,发现他的资金来源是一个赌博网站。嗯,这就是规则3的价值。
4.4 黑名单管理 — 别只依赖官方名单
黑名单分两种:官方黑名单和自建黑名单。官方名单比如OFAC、FATF的制裁名单,这些必须接入。但说实话,官方名单更新慢,而且很多洗钱地址根本不在上面。
我建议你自建一个「行为黑名单」:
- 地址黑名单 — 被举报过的地址、与已知黑客地址有关联的地址。
- 设备黑名单 — 曾经用于欺诈的设备指纹。比如某个手机号注册了10个账号,全部触发风控,那这个设备就该进黑名单。
- IP黑名单 — 来自高风险地区的IP,或者频繁更换IP的用户。
避坑指南:我曾经犯过一个错误——黑名单只增不减。结果名单越来越长,很多地址其实已经失效了。后来我们加了「黑名单有效期」机制,比如地址黑名单90天自动过期,除非有新的证据链。
4.5 链上地址追踪 — 别只看一层
链上追踪是AML的终极武器。但很多团队只追踪「直接交易对手」,这远远不够。洗钱团伙会用混币器、跨链桥、去中心化交易所来切断资金链路。
我建议你至少追踪三层:
- 第一层:直接对手 — 用户充值的地址是谁的?如果是交易所地址,那还好。如果是个人地址,就要警惕。
- 第二层:间接对手 — 这个地址的资金来源是哪里?有没有混币器(比如Tornado Cash)的参与?
- 第三层:关联图谱 — 所有与这个地址有交易的地址,形成一个网络。如果这个网络中有大量「休眠地址突然激活」,那基本可以确定是洗钱行为。
技术实现思路:
// 伪代码示例
function traceAddress(address, depth=3) {
let graph = new Graph();
let queue = [{addr: address, level: 0}];
while(queue.length > 0) {
let current = queue.shift();
if(current.level > depth) break;
let txs = getTransactions(current.addr);
for(let tx of txs) {
graph.addEdge(current.addr, tx.to);
if(current.level + 1 <= depth) {
queue.push({addr: tx.to, level: current.level + 1});
}
}
}
return graph;
}
说实话,链上追踪很吃计算资源。我建议你只对「高风险用户」做全链路追踪,普通用户只做第一层检查。不然你的服务器会扛不住的。
最后提醒:KYC和AML不是一次性工作。用户的行为会变,监管政策会变,洗钱手法也会变。我每个季度都会复盘一次规则的有效性,该加的加,该删的删。这套体系才能持续运转。