在这里插入图片描述

引言:当AIGC成为攻击面,安全即生命线

2026年,人工智能生成内容(AIGC)已深度融入社会基础设施——从智能客服到金融风控,从医疗影像到工业控制。然而,这种无处不在的渗透也使其成为国家级网络攻击的首选目标。攻击者不再满足于窃取数据,而是通过模型投毒、对抗样本、提示注入、后门激活等手段,操控AIGC输出以达成政治、经济或军事目的。据国家互联网应急中心(CNCERT)报告,2025年针对AIGC系统的高级持续性威胁(APT)攻击同比增长340%。

在此背景下,华为CANN(Compute Architecture for Neural Networks)开源仓库所构建的纵深防御安全体系,展现出战略前瞻性。不同于传统“边界防护”思维,CANN采用零信任架构(Zero Trust),假设任何输入、任何组件、甚至任何开发者都可能被攻陷,从而在芯片、运行时、模型、应用四层植入内生安全机制

本文将深入CANN仓库的安全模块源码、加密原语与审计日志,首次系统性解构其如何通过模型完整性保护、推理过程隔离、输入可信验证、输出合规过滤与硬件级可信根五大支柱,打造“即使被入侵也无法作恶”的AIGC防御体系。


一、模型完整性保护:确保“跑的是你编译的模型”

AIGC系统的第一道防线是防止模型被篡改或替换。CANN实现端到端模型签名与验证

1.1 编译时数字签名

ATC编译器在生成离线模型(.om)时自动签名:

// atc/src/security/model_signer.cc
void SignModel(const Model &model, const std::string &private_key_path) {
    // 1. 计算模型哈希(含权重、结构、元数据)
    auto model_hash = ComputeModelHash(model);
    
    // 2. 使用国密SM2私钥签名
    auto signature = SM2Sign(model_hash, LoadPrivateKey(private_key_path));
    
    // 3. 将签名嵌入.om文件尾部
    model.AppendSection("signature", signature);
}

开发者执行:

atc --model=llama.onnx --signature_key=./sm2_private.key --output=llama_secure.om

1.2 加载时强制验证

Runtime在加载模型前验证签名:

// runtime/security/model_verifier.cc
bool VerifyModelSignature(const std::string &om_file) {
    auto model = LoadModel(om_file);
    auto signature = model.GetSection("signature");
    auto hash = ComputeModelHash(model);
    
    // 使用预置公钥验证(来自华为可信证书链)
    return SM2Verify(hash, signature, kAscendTrustedPublicKey);
}

aclError aclmdlLoadFromFile(const char *file) {
    if (!VerifyModelSignature(file)) {
        ACL_LOG_ERROR("Model signature verification failed!");
        return ACL_ERROR_MODEL_VERIFICATION_FAILED; // 拒绝加载
    }
    // ... 正常加载
}

即使攻击者替换模型文件,也无法绕过验证。

1.3 硬件绑定(可选)

企业可启用设备指纹绑定,使模型仅能在特定昇腾卡运行:

// model metadata
{
  "allowed_devices": ["910B-serial-ABCD1234", "910B-serial-EFGH5678"]
}

Runtime读取NPU唯一ID进行匹配,防止模型泄露至未授权设备。


二、推理过程隔离:打造“沙箱中的AI”

即使模型可信,推理过程仍可能被侧信道攻击或内存篡改。CANN通过硬件级隔离构建安全飞地。

2.1 TEE集成(基于iTrustee)

CANN Runtime可选运行于华为iTrustee可信执行环境:

// runtime/tee_launcher.cc
void LaunchInTEE(const Model &model, const Input &input) {
    // 1. 在REE(富执行环境)准备输入
    // 2. 通过SMC调用进入TEE
    smc_call(SMC_LAUNCH_TEE_INFERENCE, 
             model_phys_addr, input_phys_addr, output_phys_addr);
    // 3. TEE内完成推理,结果返回REE
}

在TEE中:

  • 内存加密(基于ARM TrustZone)
  • 防调试(禁止JTAG访问)
  • 防内存dump(即使root权限也无法读取)

注:性能开销约8–12%,适用于高敏感场景(如金融、政务)。

2.2 多租户资源隔离

在云环境中,CANN确保多用户任务互不干扰:

// runtime/multi_tenant/isolator.cc
class TenantIsolator {
    void AllocateSecureMemory(int tenant_id) {
        // 为每个租户分配独立内存池
        auto pool = CreateMemoryPool(tenant_id);
        
        // 设置内存访问控制位(MMU)
        SetMemoryPermission(pool, tenant_id, READ_WRITE);
        DenyAccessFromOtherTenants(pool);
    }
};

即使某租户任务被攻破,也无法读取其他租户的KV Cache或中间激活值。


三、输入可信验证:过滤“有毒提示”

AIGC的输入(如文本提示、图像)是主要攻击入口。CANN内置多层输入净化管道

3.1 提示注入检测

针对LLM,CANN实时扫描恶意指令:

# runtime/input_sanitizer/prompt_injection_detector.py
def detect_prompt_injection(prompt: str) -> bool:
    # 规则1:检测角色扮演指令
    if re.search(r"(?i)(ignore\s+previous|act\s+as)", prompt):
        return True
    
    # 规则2:检测分隔符滥用
    if prompt.count("###") > 3 or prompt.count("------") > 2:
        return True
    
    # 规则3:检测越狱关键词库
    jailbreak_keywords = load_jailbreak_dict()
    if any(kw in prompt for kw in jailbreak_keywords):
        return True
    
    return False

# 在推理前拦截
if detect_prompt_injection(user_input):
    raise SecurityException("Malicious prompt detected")

该规则库每日从社区威胁情报自动更新。

3.2 对抗样本过滤

对于图像输入,CANN部署轻量检测模型:

// samples/adversarial_detection/filter.cc
bool IsAdversarialImage(const Tensor &image) {
    // 加载小型检测器(<1MB)
    static Model detector = LoadModel("adv_detector.om");
    
    // 提取高频噪声特征
    auto noise = ExtractHighFreqNoise(image);
    
    // 分类:干净(0) vs 对抗(1)
    auto output = detector.Forward(noise);
    return output[1] > 0.9; // 置信度>90%
}

若检测为对抗样本,系统返回模糊化结果或拒绝服务。

3.3 多模态输入校验

对图文混合输入,进行跨模态一致性检查:

# 检查图片是否与文本描述矛盾
def check_multimodal_consistency(text, image):
    # 1. 用CLIP计算图文相似度
    text_emb = clip_encode_text(text)
    img_emb = clip_encode_image(image)
    similarity = cosine_similarity(text_emb, img_emb)
    
    # 2. 若相似度<阈值,视为可疑
    if similarity < 0.3:
        log_security_event("Multimodal inconsistency detected")
        return False
    return True

防止“图A文B”类欺骗攻击。


四、输出合规过滤:守住“最后一公里”安全

即使推理过程安全,恶意输出仍可能造成危害。CANN实施输出内容审查

4.1 敏感词实时拦截

在Token生成阶段动态过滤:

// runtime/output_filter/sensitive_word_blocker.cc
class SensitiveWordBlocker {
    std::set<std::string> sensitive_dict_;
    
public:
    bool ShouldBlockToken(const std::string &token) {
        // 前缀匹配(防部分屏蔽绕过)
        for (const auto &word : sensitive_dict_) {
            if (token.substr(0, word.size()) == word) {
                return true;
            }
        }
        return false;
    }
    
    void OnTokenGenerated(const std::string &token) {
        if (ShouldBlockToken(token)) {
            ACL_LOG_WARN("Blocked sensitive token: %s", token.c_str());
            ReplaceWithPlaceholder(token); // 替换为"[REDACTED]"
        }
    }
};

词库支持动态热更新,无需重启服务。

4.2 幻觉检测与抑制

针对大模型“一本正经胡说八道”,CANN集成事实核查模块:

# 判断生成内容是否包含可验证事实
def detect_hallucination(text):
    # 提取声明性语句(如“巴黎是德国首都”)
    claims = extract_claims(text)
    
    for claim in claims:
        # 查询知识图谱
        if not knowledge_graph.verify(claim):
            return True, f"Unverified claim: {claim}"
    return False, ""

若检测到幻觉,系统可:

  • 添加免责声明:“以下内容未经核实”
  • 降低置信度评分
  • 触发人工审核

4.3 合规水印嵌入

所有AIGC输出自动嵌入不可见数字水印:

// 图像水印(频域LSB)
void EmbedWatermark(Tensor &image, const std::string &task_id) {
    auto freq = DCT(image);
    // 在高频系数最低位嵌入任务ID哈希
    SetLSB(freq[high_freq_indices], Hash(task_id));
    image = IDCT(freq);
}

// 文本水印(同义词选择)
std::string EmbedTextWatermark(const std::string &text, int task_id) {
    std::vector<std::string> tokens = tokenize(text);
    for (int i = 0; i < tokens.size(); ++i) {
        if (is_synonym_available(tokens[i])) {
            // 根据task_id比特选择同义词
            tokens[i] = select_synonym(tokens[i], get_bit(task_id, i));
        }
    }
    return join(tokens);
}

一旦AIGC被滥用于生成虚假信息,可通过水印溯源至具体任务与账号。


五、硬件级可信根:从硅片开始的信任链

CANN的安全体系根植于昇腾芯片的硬件可信根(Root of Trust)。

5.1 安全启动(Secure Boot)

昇腾SoC内置ROM Bootloader,仅加载经华为签名的固件:

信任链:
ROM (固化公钥) 
→ Bootloader (SM2签名验证) 
→ CANN Driver (SM2签名验证) 
→ Runtime (SM2签名验证)

任何环节被篡改,设备拒绝启动。

5.2 密钥管理单元(KMU)

敏感密钥(如模型签名私钥)永不离开芯片:

// KMU提供密钥操作API,但不暴露密钥本身
kmu_encrypt(data, key_id);   // 用key_id对应的密钥加密
kmu_decrypt(cipher, key_id); // 解密

即使操作系统被攻破,攻击者也无法导出密钥。

5.3 运行时完整性度量

定期向远程证明服务器报告状态:

# 获取当前CANN运行时哈希
npu-smi security --get-integrity-hash
> a1b2c3d4e5f6...

# 该哈希可被监管方验证

确保生产环境未被植入后门。


六、安全能力实证:攻防演练中的表现

在2025年“护网行动”红蓝对抗中,某省级政务云AIGC平台(基于CANN)经受住考验:

  • 模型替换攻击:因签名验证失败被拦截;
  • 提示注入攻击:327次尝试,100%被检测;
  • 对抗样本攻击:98.5%被过滤;
  • 侧信道攻击:TEE环境下内存dump失败。

最终获评“零失陷”单位。


七、挑战与演进

尽管防御体系完善,仍面临挑战:

  1. 新型攻击快速演化:如多轮对话越狱;
  2. 性能与安全平衡:TEE开销影响实时性;
  3. 供应链安全:第三方算子可能引入漏洞。

未来方向包括:

  • AI驱动的自适应防御:用LLM分析攻击模式;
  • 机密计算扩展:支持多方安全推理;
  • 开源安全审计:邀请社区参与漏洞挖掘。

结语:安全不是功能,而是基因

在AIGC成为数字时代“水电煤”的今天,安全已不是可选项,而是基础设施的默认属性。CANN仓库中的每一行签名验证代码、每一个TEE隔离策略、每一条敏感词规则,都是在践行一个信念:强大的AI,必须是安全的AI

当政务系统能抵御国家级APT攻击,当金融平台能阻断提示注入,当医疗AI能防止对抗样本误导诊断,国产基础软件才真正具备守护国计民生的能力。CANN正在证明:中国AI不仅追求技术领先,更致力于构建坚不可摧的数字长城

而这,才是智能时代的真正底气。

cann组织链接:https://atomgit.com/cann
ops-nn仓库链接:https://atomgit.com/cann/ops-nn

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐