Product Design, Manufacturing & Innovation Resources
家 » 产品设计 » 制造业 » 产品设计和制造中的校验和:如何防止标签错误、条形码扫描错误和代价高昂的召回

产品设计和制造中的校验和:如何防止标签错误、条形码扫描错误和代价高昂的召回

产品设计和制造中的校验和
校验和
实施校验和可以增强产品生命周期内的数据完整性。

一个托盘从码头运出,产品本身没问题,但标签贴错了。收货工厂扫描了托盘,ERP系统也接受了条形码。三周后,有人投诉说这个错误源于一个无人知晓的批次。其实零件本身没有任何问题,只是识别零件的数据中有一个数字错了。

校验和是防止此类故障最经济有效的控制手段。它会在记录中添加几个数字或字节,下游任何站点无需查阅数据库即可验证记录。
实体产品的数据会经过许多人、机器和多种格式的处理。CAD 文件会变成物料清单 (BOM),物料清单会变成工单,工单会变成标签。标签会变成扫描件,扫描件会变成发货记录。

本指南将校验和视为一种质量控制工具,而非IT或开发相关主题。它涵盖了从校验位到SHA-256的各种算法,并按阶段应用这些算法:设计、工业化、生产、质量控制、物流和服务。每章结尾都为从事实体产品工作的工程师提供两条实用建议。

 

目录
1. 为什么实体产品依赖于数据完整性
2. 什么是校验和?
3. 核心属性及其对质量指标的意义
4. 校验和及类似技术的简史
5. 校验和在产品生命周期中的位置
6. 奇偶校验位和简单求和
7. 校验位:如何计算 GS1 校验位以及它为何重要
8. 条形码扫描错误:原因、验证和解决方法
9. 如何防止贴错标签
10. 网络和现场总线校验和
11. 什么是 CRC 错误校验?
12. 非加密哈希函数
13. 加密哈希以及如何验证 SHA-256 校验和
14. 密钥校验和、签名和真实性
15. 纠错码
16. 算法比较
17. 设计与工程
18. 工业化和制造,包括如何验证固件刷新
19. 质量管理与合规性
20. 精益六西格玛视角
21. 物流:如何减少仓库拣货错误
22. 服务、售后市场和报废
23. 意外腐败与恶意腐败
24. 如何选择正确的校验和
25.实施指南
26. 按角色划分的最佳实践清单
关于校验和及类似问题的结论
常问问题
附录

笔记: 本文中提及的监管日期,例如欧盟《网络弹性法案》、数字产品护照和美国《数字供应链安全法案》的生效日期,均已于 2026 年 11 月核实。在制定合规计划之前,请再次确认这些日期。

要点总结

  • 校验和用于检测意外错误。阻止蓄意更改需要签名或密钥。
  • 校验位用于保护人员和扫描仪处理的标识符。CRC校验码用于保护帧和固件映像。加密哈希值用于保护文件和记录。
  • GS1校验位可以检测出所有个位数错误。但它会漏掉大约11%的相邻数字互换错误,即两个数字相差5的错误。
  • 在创建时和使用时都要进行验证。只在一个阶段进行一次检查,会导致其他所有阶段都存在疏漏。
  • 将检验本身视为一个测量系统。用已知不合格的样本对其进行挑战,校准验证人员,并跟踪结果。

 

1. 为什么实体产品依赖于数据完整性

产品是指有形物体及其数据。

这些数据包括CAD模型、图纸、物料清单、固件镜像、校准表、标签、批次记录、测试结果和发货单据。其中任何一项数据错误都可能导致生产线停工、向客户发送错误的商品,或者引发产品召回。

数据错误进入链条的位置

错误通常来自以下五个方面:

  • 人们会输错数字或读错数字。
  • 机器会误读损坏的标记。
  • 存储和传输过程中会翻转位。
  • 流程变更会将正确的版本替换为过时的版本。
  • 最后,也可能有人故意篡改数据。
数据错误
识别产品设计和工程过程中的数据错误来源。
错误源 例子 典型后果 典型控制
键控 零件编号中的数字颠倒了 发往生产线的组件错误。 校验位
阅读 模糊的一维条形码解码成另一个数字 记录的批次错误 符号检查、验证等级、纠错
传播 现场总线帧上的位翻转 设定点或传感器值损坏 结直肠癌
贮存 现场闪光电池性能下降 固件或校准数据损坏 CRC,纠错码
版本 打印机上遗留的旧标签模板 已发货货物的过时数据 已发布文件的哈希值
篡改 修改后的固件映像 安全或安保故障 签名,密钥代码

 

劣质产品的代价

低质量造成的成本可分为预防成本、评估成本、内部故障成本和外部故障成本。校验和在前两类成本中发挥作用。它能自动评估数据,阻止错误进一步扩散。节省成本的关键在于将检测环节提前到上游。

标签打印机出错只需重印一次。而客户处出错则可能导致控制、分拣、召回,甚至失去客户信任。

诸如1-10-100法则之类的经验法则充其量只能起到辅助说明的作用。您自己的废料、返工和投诉记录才能真正反映实际情况。

给工程师的专业建议

  • 从CAD图纸发布到发货标签,记录下每一个人员重新录入数据或工具重新格式化数据的交接环节。对这些交接环节进行初步检查。
  • 根据您自身的故障记录(投诉、报废标签和返工记录)对交接环节进行排序。从每次故障成本最高的地方开始,通常是产品离开工厂之后。
校验和
校验和是一种快速验证方法,用于确保产品设计和工程中的数据完整性。

2. 什么是校验和?

校验和是由特定算法从数据块计算出的一个很小的值。发送方将其与数据一起存储或传输。接收方根据接收到的数据重新计算校验和,并将两次计算结果进行比较。如果结果不同,则说明两次计算之间数据发生了变化。

想象一下合格/不合格的测量仪:你无需测量数据的全部维度,只需进行快速、可重复的测试,即可得出合格或不合格的结果。

 

校验和世界的术语

在工厂和软件团队中,一些术语的使用并不统一。下表根据每个术语所回答的问题对其进行分类。

学期 它是什么 它回答的问题 典型用途
校验位 使用模运算公式计算,附加到标识符上的一个或两个数字。 这个号码输入或扫描正确吗? GTIN、SSCC、VIN、IBAN
简单校验和 消息字节的总和或异或 短信是否完整送达? NMEA 0183 语句,Intel HEX 记录
结直肠癌 Remainder of a polynomial division over [latex]\mathrm{GF}(2)[/latex] 该帧、块或图像中是否存在比特翻转? CAN、Modbus RTU、以太网、固件
哈希或摘要 任意数据的固定大小指纹 这个文件和那个文件一样吗? 发布包、下载、去重
MAC 或 HMAC 哈希或密码算法与密钥结合使用 这是掌握关键信息的人制造的吗? 已验证消息、设备标签
数字签名 基于哈希计算的非对称原产地证明 这是谁发布的?内容是否未经修改? 固件、证书、受监管记录
纠错码 冗余机制允许修复损坏的数据 这种损坏可以修复吗? DataMatrix、二维码、ECC存储器

检测与纠正

大多数校验和只能检测错误。它们告诉你哪里出了问题,但不会告诉你具体是什么问题。这在生产线上已经足够了,正确的做法是停止生产、重新打印、重新扫描或重新传输。纠错码更进一步,可以修复数据,这适用于容易磨损的标签或会老化的存储器。第15章将详细介绍这些纠错码。

专业提示

  • 为每一项检查编写一行简要说明:包括其保护的数据、所假设的错误模型、算法及其参数。没有错误模型的检查无法在失效模式及影响分析 (FMEA) 中进行评估。
  • 在每个已存储的校验值旁边存储一个算法标识符,例如 sha256 名称后跟摘要。这样,后续的迁移就不会使已归档的记录失效。

3. 核心属性及其对质量指标的意义

校验和的每个属性在质量工程词汇中都有对应的概念。通过映射这些属性,无需转换即可将校验和写入失效模式及影响分析 (FMEA) 或控制计划中。

财产 意义 质量对应物
决定论 相同的输入总是得到相同的值 检查的可重复性
固定输出尺寸 无论输入长度如何,该值都由 n 位组成。 每张支票的成本固定,标签上的字段长度已知
检测概率 改变值的损坏输入所占比例 [latex]1 – P_{\mathrm{escape}}[/latex], input to the FMEA detection rating
碰撞 两个不同的输入产生一个值 逃逸,也称为虚假接受
汉明距离 能够不被察觉的最小比特错误数 保证检测深度
突发长度 最长的连续损坏位始终能被检测到 适应实际噪声环境,例如驱动装置附近的电磁干扰。
雪崩效应 在一个好的哈希算法中,输入位翻转大约会改变一半的输出位。 使意外匹配的影响可以忽略不计

检测概率(以数字表示)

For an arbitrary corruption pattern, an [latex]n[/latex]-bit check lets the error through with this probability:

[latex]\displaystyle P_{\mathrm{escape}} = 2^{-n}[/latex]

A mod-10 check digit lets about one random error in ten through. A 16-bit CRC lets one in 65,536 ([latex]2^{-16}[/latex]) through. A 32-bit CRC lets one in roughly 4.3 billion ([latex]2^{-32}[/latex]) through.

保证的性能比统计数字更强。一个好的CRC校验码能够检测到每一个单比特错误以及长度不超过其自身长度的每一个突发错误。工程师正是出于这个原因选择特定的多项式。

逃逸率计算

数据错误的逃逸率等于错误发生的概率乘以检查漏检的概率。

[latex]\displaystyle P_{\mathrm{escape}} = P_{\mathrm{error}} \times P_{\mathrm{miss}}[/latex]

Take an error rate of 1 in 1,000 keyed entries and a mod-10 check digit. Then [latex]P_{\mathrm{escape}} = 10^{-3} \times 10^{-1} = 10^{-4}[/latex]. About 1 entry in 10,000 still passes with a wrong random value. State such numbers in the FMEA instead of rating detection by feel.

FMEA检测等级

在2019年AIAG-VDA FMEA手册中,检测控制的等级从1到10,10表示完全无法检测。该手册用行动优先级表取代了风险优先级编号,该表首先考虑严重性,其次考虑发生率,最后考虑检测能力。能够阻止后续操作的自动化检查,其检测等级可能远高于目视检查。保留证据,例如使用已知不良样品进行的挑战性测试。

错误接受
平衡数据验证中的错误类型,以确保产品设计的准确性和效率。

错误接受和错误拒绝

任何校验都存在两种错误类型。错误接受(False Accept)允许错误数据通过,这相当于逃逸。错误拒绝(False Reject)会阻止正确数据通过,并造成线路时间损失。正确实现的校验位或 CRC 校验码永远不会拒绝正确数据,因为其规则是精确的。错误拒绝通常发生在读取步骤,例如扫描器无法识别有效但打印质量差的条形码。

尖端

  • 在 FMEA 中,引用 n 位校验对随机损坏的逃逸概率,以及结构化故障的保证突发长度和汉明距离作为检测证据。
  • 除非两个检查的故障相互独立,否则不要将它们的逃逸率相乘。读取相同损坏源代码、共享同一个运算符或同一个软件库的两个检查会同时失败。

4. 校验和及类似技术的简史

本文介绍的技术虽然年代久远,但这恰恰是它们的优势所在。每项技术都经过数十年的实践检验,每一种失效模式也都有详细的记录。

年 发展 为什么这很重要
20世纪50年代初期 电报和早期计算机存储器中的奇偶校验位 首次实际误差检测
1954 IBM公司的汉斯·彼得·卢恩申请了一项校验位方法的专利。 支付卡上 mod-10 校验的起源
1961 Peterson 和 Brown 发表了循环冗余检查 总线和固件中CRC的基础
1969 Verhoeff 发布了一个十进制方案,可以捕获所有相邻的换位 这表明存在比 mod 10 更好的校验位。
1974 零售店扫描的第一件带有 UPC 条形码的商品 条形码溯源的开始
1995 FIPS 180-1 中规定的 SHA-1 基于哈希的文件验证时代拉开帷幕
2002 SHA-2 系列已在 FIPS 180-2 中发布 SHA-256 成为默认摘要算法
2004 Damm 发布了一个基于准群的校验位 具有完整转位检测功能的简单方案
2015 SHA-3 标准已在 FIPS 202 中制定 独立的第二类哈希函数
2017 首次实际应用的 SHA-1 碰撞检测,被称为 SHAttered。 SHA-1 在涉及篡改的任何地方都不适用。
2022 美国国家标准与技术研究院(NIST)宣布将于2030年12月31日之前停用SHA-1标准。 长寿命产品的规划周期

专业提示: 集成旧版接口时,请保留其对该链接的原始检查,并在应用层添加更严格的端到端检查。更改旧版帧格式的风险通常不值得承担。

5. 校验和在产品生命周期中的位置

请将此表作为本文后续内容的参考框架。它展示了每个阶段适用的检查类型以及通常情况下故障会出现在哪里。

阶段 数据面临风险 典型保护 典型故障 它出现的地方
设计 CAD、BOM、固件源代码、零件编号 已发布软件包的哈希值、部件号中的校验位、固件头中的 CRC 校验值 发布版本错误,零件编号拼写错误 工程变更审查,首次构建
工业化 配方、PLC参数、标签模板、测试程序 哈希值或 CRC 与黄金记录进行比较 已加载旧配方或模板 第一篇文章,试行
生产 标记、序列号、固件、站点数据 验证等级、回读哈希、总线CRC 标记无法读取、闪光灯故障、帧损坏 在线扫描,生产线末端测试
质量 考试记录、证书、族谱 哈希链、签名、审计跟踪 记录被篡改或缺失 审计、客户投诉
后勤 GTIN、SSCC、GLN、ASN、EPCIS 事件 GS1校验位,消息控制总计 选错、收货地址错误、序列号重复 拣货确认,收货
服务和临终关怀 更新、备件 ID、护照 签名更新、已验证部件、唯一标识符 损坏的更新,伪造部件 现场故障,保修索赔

专业提示

  • 构建一个包含生命周期阶段、数据对象、现有检查项和已保存证据的矩阵。每个空白单元格代表一个缺口,该矩阵即成为您的改进待办事项清单。
  • 在源系统中生成检查,并在接收系统中使用独立编写的例程进行验证。两种实现方式会暴露出共享库所隐藏的参数和字节顺序错误。

6. 奇偶校验位和简单求和

奇偶校验位是一个额外的位,它使一个字中 1 的个数为偶数或奇数。它可以检测奇数个翻转的位,但会漏掉偶数个翻转的位。两个翻转位相互抵消,该字仍然通过校验。

二维奇偶校验将数据按行和列排列,并在每一行和每一列中添加一个奇偶校验位。它可以定位单个翻转的位,从而纠正它。它可以检测所有两位或三位的错误。但位于矩形四个角上的四个翻转位仍然无法被检测到。

加法校验和与异或校验和

下一步是将所有字节相加(或进行异或运算),然后发送结果。这些检查开销很小,可以安装在最小的微控制器上。它们存在两个在实际应用中很重要的缺陷。它们忽略字节顺序,因此交换的字节也会被通过。错误也可能导致结果改变:一个字节加一,而另一个字节减一,总和保持不变。

异或校验和还会漏掉不同字节中同一位位置上偶数次翻转的情况。Maxino 和 Koopman 在 2009 年评估了此类校验和在嵌入式控制网络中的有效性,发现相同宽度的 CRC 校验和在处理结构化错误方面优于异或校验和。

它们仍然出现

地方 方案 评论
NMEA 0183 语句(GPS、船舶电子设备) 美元符号和星号之间的字符进行异或运算,结果以两个十六进制数字的形式发送。 能检测单比特错误,但对成对错误检测能力较弱。
固件文件中的 Intel HEX 记录 记录字节之和的二进制补码 仅保护每条记录,而非整个映像。
传统串行链路和简单传感器 8 位和或异或 阅读数据手册,如果数据至关重要,则添加应用级检查。

固件的 Intel 十六进制大小写很重要。一个文件可能通过了所有记录检查,但仍然不完整,因为缺失的记录不会在其他记录中留下任何痕迹。如第 18 章所述,需要添加映像级 CRC 校验或哈希值。

仍然使用奇偶校验和简单求和的物理设备

磁条卡

每个字符都带有一个奇校验位,结束符之后是一个纵向冗余校验字符。读卡器会拒绝任何一项校验失败的刷卡操作。

串行仪器和PLC外围设备

RS-232 和 RS-485 链路可以为每个字符添加一个奇偶校验位,以捕获由电噪声引起的单比特翻转。

平价
在物理设备中利用奇偶校验位和校验和进行错误检测和数据完整性维护。

闪存编程器和引导加载程序

它们读取 Intel HEX 和 Motorola S 记录文件,每个记录都包含一个总和,该工具通常会拒绝不匹配的记录。


IT专家建议

  • 绝不能让已擦除或清零的块通过验证。求和时应从非零值开始,或者存储其补码,这样,一个完全空白、包含 0xFF 或 0x00 字节的闪存块就无法通过验证。
  • 求和与异或运算忽略字节顺序。如果旧版链接强制要求字节顺序,则添加长度字段和序列号,以便捕获交换、丢弃或重复的帧。

7. 校验位:如何计算 GS1 校验位以及它为何重要

校验位是工业界历史最悠久、应用最广泛的校验和机制。它们位于人工输入和机器扫描的标识符末尾。校验位构成了可追溯性的基石,因为每个批次、序列号、位置和发货都通过标识符进行关联。

如何计算GS1校验位

GS1 要求所有固定长度的数字识别码(包括 GTIN-8、GTIN-12、GTIN-13、GTIN-14、GLN 和 SSCC)都包含校验位。校验位算法为模 10 的加权和。权重在 3 和 1 之间交替,校验位旁边的数字始终权重为 3。

  1. 写出密钥的数字,不包括校验位。
  2. 从右边开始,将数字交替乘以 3 和 1。
  3. 将所有数字的乘积相加。
  4. 校验位是使总和达到下一个 10 的倍数的数值。如果总和已经是 10 的倍数,则校验位为 0。

Written as a formula, the check digit [latex]C[/latex] uses the digits [latex]d_i[/latex] of the body, counted from the right. The weight is [latex]w_i = 3[/latex] for odd [latex]i[/latex] and [latex]w_i = 1[/latex] for even [latex]i[/latex].

[latex]\displaystyle C = \left(10 – \left(\sum_{i=1}^{n} w_i d_i \bmod 10\right)\right) \bmod 10[/latex]

GTIN-13 主体 400638133393 的工作示例。从左数起,权重为 1、3、1、3,依此类推,因为最右边的主体数字从右数起是奇数位。

数字 4 0 0 6 3 8 1 3 3 3 9 3
重量 1 3 1 3 1 3 1 3 1 3 1 3
产品 4 0 0 18 3 24 1 9 3 9 9 9

The products add up to 89. The next multiple of 10 is 90, so the check digit is [latex]C = (10 – (89 \bmod 10)) \bmod 10 = 1[/latex] and the complete GTIN-13 is 4006381333931. The same rule applies to an SSCC. The 17-digit body 34012345000000001 sums to 43, which gives [latex]C = (10 – (43 \bmod 10)) \bmod 10 = 7[/latex] and the SSCC 340123450000000017.

校验位捕捉到什么

该表将 GS1 方案与三种替代方案进行了比较。GS1 和 Luhn 的结果已通过随机密钥的模拟验证。Verhoeff 和 Damm 的特性已在其原始出版物中有所记载。

错误类型 GS1 mod 10(配重 3 和 1) 卢恩对阵10 弗霍夫 该死
一位数替换 全部检测到 全部检测到 全部检测到 全部检测到
邻位转位 除了相差 5 的数字对之外,其余数字互换约占 11%。 除09和90之外的所有数字 全部检测到 全部检测到
随机多位数垃圾 检测到的约90% 检测到的约90% 检测到的约90% 检测到的约90%

GS1加权方案并非最强方案,但它是GS1密钥必须使用的方案。对于您自行定义的标识符,请选择更强的方案。

有效的校验位并不能说明该商品是否存在。它仅表明该数字格式正确,并不表示该 GTIN 已被分配、属于此产品或已在您的主数据中激活。请将主数据验证与算术校验一起保留。

车辆识别码(VIN)第 9 位校验位

在北美,美国联邦法规49 CFR 565要求在17位车辆识别码(VIN)的第9位添加校验位。每个字符都被转写成一个数字,并乘以一个位置权重:8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2。然后将所有乘积相加。除以11后的余数即为校验位,余数为10则用字母X表示。

[latex]\displaystyle C = \left(\sum_{i=1}^{17} t_i w_i\right) \bmod 11[/latex]

Here [latex]t_i[/latex] is the transliterated value and [latex]w_i[/latex] is the weight of position [latex]i[/latex].

许多欧洲车辆识别码 (VIN) 没有有效的校验位,因此北美验证规则不应自动拒绝它们。您可以快速测试一下:由 17 个 1 组成的 VIN 必须包含校验位 1。规则文本如下: 49 CFR 565.15.

您将遇到的其他方案

  • 书籍上的EAN-13条形码带有ISBN-13,并使用GS1算法。旧版ISBN-10采用的是模11编码方案。
  • 支付卡号和 IMEI 号使用 Luhn 算法,该算法由 IBM 的 Hans Peter Luhn 在 1954 年的专利申请中描述。
  • IBAN 使用 ISO/IEC 7064 中的 MOD 97-10。
  • 根据 ISO 6346 标准,货运集装箱编号以校验位结尾。

为内部零件号和序列号设计校验位

许多工厂会自行设计标识符,然后添加自制的校验方法。自制的校验方法通常会忽略换位错误,而换位错误是常见的录入错误。除非有充分的理由,否则请使用已发布的校验方法。

  • 选择一种成熟且已发布的算法。Damm 算法或 Verhoeff 算法适用于数字标识符。ISO/IEC 7064 定义了用于数字、字母和字母数字字符串的纯系统和混合系统,其中包括 MOD 11-2、MOD 37-2 和 MOD 97-10。
  • 固定标识符的长度,并将校验字符放在最后。
  • 从字母表中移除 O 和 0 或 I 和 1 等相似的字符,或者在方案中显式地处理它们。
  • 在包含测试向量的受控文档中定义算法,以便每个系统都实现相同的规则。
  • 针对您关心的错误类别测试该方案:单次替换、相邻转位、双重错误以及存在语音输入的语音错误。
  • 对于新的分类方案,可以考虑使用非显著性数字。这样可以避免在分类发生变化时重新编号。
  • 在每个入口点进行验证,包括ERP、MES、标签软件和PLC脚本。一个系统中存在的检查会被其他系统绕过。

用于验证校验位的设备和工具

设备或工具 它检查什么 它为何有用
条形码扫描器和解码器 解码时的EAN或UPC校验位 误读数据会被丢弃,永远不会到达主机系统。
标签软件和打印服务器 标签打印前密钥的校验位 错误输入的GTIN或SSCC永远不会变成实体标签。
支付终端 卡号的 Luhn 数字 在任何网络调用之前,输入错误都会被拒绝。

尖端

  • 使用一个经过测试的库函数生成校验位,并在所有系统中重复使用该函数。切勿手动输入校验位,并将下文附录 A 中的测试向量与库一起发布。
  • 将标识符存储为固定长度的文本,以便在 GTIN-14 和 SSCC 密钥中保留前导零。在每个入口点验证校验位:标签打印、收货扫描和 ERP 导入。

8. 条形码扫描错误:原因、验证和解决方法

条形码扫描错误分为三类。未读取会导致流程停止并浪费时间。误读会返回看似有效但实际错误的值。错误读取会从错误的商品(例如相邻标签)返回有效值。误读是最危险的一类错误,条形码符号体系中内置的检查机制正是为了尽可能减少此类错误发生。

符号系统中内置的检查

符号学 内置检查 评论
EAN-13、UPC-A、ITF-14 GS1 mod 10 校验位 部分编码数据
Code 128 和 GS1-128 强制性 mod 103 检查字符 保护符号,读卡器将其移除。内部的 GS1 密钥仍然带有其自身的 10 位调制数字。
代码 39 可选的 mod 43 检查字符 当您同时控制打印机和读卡器时,请启用此功能。
交错式 2/5 可选模块 10 修正读取器中的预期长度,以避免部分读取。
数据矩阵和二维码 里德-所罗门纠错 修复损坏的模块,参见第15章

阅读并不等同于质量

扫描仪能够解码符号并不代表该符号有效。边缘符号目前可以解码,但标签在运输过程中磨损后就会失效。验证器会根据标准测量打印质量并给出等级。

符号类型 评分标准 评论
标签上的线性符号 ISO/IEC 15416,2025版 成绩从 4.0 到 0.0,也写作 A 到 F。
标签上的二维符号 ISO/IEC 15415,2024版 A至F级
直接零件标记(点阵、激光、蚀刻) ISO/IEC 29158,前身为技术报告 ISO/IEC TR 29158 采用不同的照明方式。其等级与 ISO/IEC 15415 等级不具可比性。

验证器需要使用合格评定标准测试卡进行校准。应用标准或客户规定了最低可接受等级。请查阅最新的 GS1 通用规范以及适用于您符号类型的任何行业规则。

原因及解决方法

原因 症状 使固定
印刷对比度低或承印物不合适 低质量、间歇性无读取 更换色带或承印物,调整打印浓度,并在打印机处进行验证。
违反静音区规定 标签边缘有瑕疵 修正标签布局,添加模板检查
X 尺寸与打印机分辨率不匹配 条形合并或间隙消失 选择一个X尺寸,该尺寸应为打印点数的整数倍。
读取器配置 已启用但未使用的符号体系的误读 仅启用所需的符号体系,固定长度,验证校验位
直接标记上的眩光或低调制 不稳定的读取 使用适合该标志的照明,并按照 ISO/IEC 29158 标准进行验证
运输途中损坏 接收器故障 使用校正级别更高的二维符号,并用覆膜保护标签。

在每个扫描站应用一条规则:解码、验证校验位、根据预期密钥验证格式,然后才接受该值。任何步骤失败的扫描都会触发预设的处理流程。绝不能触发无人问津的重试循环。

实际应用技巧

  • 将最低验证符号等级、测量标准和验证器设置写入标签规范。在您的生产线上可以扫描的符号仅表明它可以扫描,并不代表它具有足够的余量。
  • 在标签模板中,将静音区视为硬性布局约束。在实际工作站的照明和阅读角度下,按照 ISO/IEC 29158 标准测试直接零件标记。

9. 如何防止贴错标签

标签错误是最常见、最容易发现的数据错误之一。它有多种不同的成因,而校验和只能解决其中一部分。在选择控制措施之前,请先区分这些成因。

故障模式 例子 控制 校验和的作用
打印的数据有误 打印作业完成后,订单数据发生了更改。 从已发布的源打印,并将打印的有效载荷与预期记录进行比较。 校验位用于验证密钥,通过比对可以检测出错误的密钥。
模板或版本错误 过时的版式和过时的法规文本 发布文档控制下的模板,并通过哈希值加载它们。 发布记录中存储的模板文件的哈希值
标签贴错了产品,标签也贴对了。 卷筒更换时,打印机里会留下其他产品的标签。 线路清理、卷册核对、应用扫描匹配 校验位与预期的GTIN或序列号进行匹配
标签缺失或错放 涂抹器跳过了标签 存在检测,视觉检查 不需要,需要不同的控制方法。
重复序列号 重印版重复使用了连载版 中央串行分配,唯一性约束 没有,校验位无法检测重复项。
无法识别的符号 低对比度印刷 在线验证器最低等级 符号学检查和分级

闭环标签流程

  1. 将标签模板及其数据源纳入变更控制流程。将模板文件的哈希值存储在发布记录中。
  2. 作业开始时,打印机或标签服务器会计算已加载模板的哈希值,并将其与发布记录进行比较。如果哈希值不匹配,则作业将无法打印。
  3. 从唯一的权威记录构建有效载荷。使用经过测试的库在软件中生成校验位,切勿手动输入。
  4. 打印后,请在线验证符号。低于规定最低标准的等级将导致标签无效。
  5. 扫描打印标签,并将其解码内容与该设备的预期记录进行比较。拒绝任何标签不匹配的设备。
  6. 应用完成后,请在包装或发货站再次扫描。第二次检查可以发现打印后可能出现的错误。
  7. 每次运行结束后都要核对数量。已发放、已贴、已报废和已退回的标签数量必须相等。

该序列使用了三种检查。哈希值验证模板是否正确。校验位和格式验证密钥格式正确。与预期记录的比较验证密钥是否为该单元的正确密钥。只有第三种检查会检测出格式正确但错误的标签。

尖端

  • 每次更换标签前都要进行生产线清空。 移除旧纸卷、打印剩余物和之前的模板,并且只有在模板哈希值与发布记录匹配后才允许打印作业开始。
  • 使用硬停止功能,将每个打印标签与订单记录进行比对。在每个班次开始时插入一个已知无效的标签,以验证该停止功能仍然有效。

10. 网络和现场总线校验和

机器通过协议中定义的检查机制来保护数据。这些检查机制逐跳保护链路。但一旦数据存储在PLC内存或数据库中,这些检查机制就无法保护数据了。

互联网校验和

IP 报头、TCP 和 UDP 都使用 RFC 1071 中描述的 16 位 1 的补码校验和。这种校验和计算成本低,但安全性较弱。它会漏掉交换的 16 位字以及一些补偿错误。链路层在其底层添加了更强大的 CRC 校验,这也是这种弱校验和得以保留的原因。

Fletcher 和 Adler-32 都是使用两个累加器的简单求和算法,因此比普通求和能捕获更多排序错误。Adler-32 算法包含在 zlib 库中。它处理短消息的能力较弱。

Modbus RTU

Modbus RTU 帧以 16 位 CRC 校验码结尾。该校验码的多项式为 0x8005,以反射形式 0xA001 使用,初始值为 0xFFFF。CRC 校验码的低字节首先发送。Modbus ASCII 则使用更简单的 8 位纵向冗余校验码。

这是一个完整的 RTU 请求,它从从设备 1 读取 10 个保持寄存器,从地址 0 开始。CRC 值为 0xCDC5,通过线路传输时显示为 C5,后跟 CD。

01 03 00 00 00 0A C5 CD

CAN 和 CAN FD

传统 CAN 使用 15 位 CRC 校验码,其多项式为 0x4599。对于固定帧长度,其汉明距离为 6,因此可以检测到任意五个随机分布的比特错误。CAN FD 对有效载荷不超过 16 字节的数据使用 17 位 CRC 校验码,对超过 16 字节的数据使用 21 位 CRC 校验码,两者均保持相同的汉明距离 6。

位填充使情况变得复杂。《CAN自动化》指出,填充会降低经典帧中某些位模式的有效汉明距离,而《CAN FD》增加了一个填充位计数器来弥补这一差距。详情请参见…… CiA 对 CAN 帧中 CRC 的解释.

基于以太网的总线

PROFINET、EtherCAT、EtherNet/IP 和 Modbus TCP 都使用标准以太网帧传输数据。每个帧的末尾都有一个 32 位帧校验序列(CRC-32),设备在每次传输过程中都会对其进行校验。校验序列错误的帧将被丢弃。

其他总线,例如 PROFIBUS 和 IO-Link,都定义了自己的帧检查规则。请阅读协议规范,并将检查规则记录在您的 FMEA 中,而不是想当然地认为它已经存在。

基于以太网的总线
基于以太网的总线利用带有 CRC 校验的标准以太网帧,以实现工业应用中可靠的数据传输。

巴士顶部的安全规程

PROFIsafe、CIP Safety 和 Fail Safe over EtherCAT 等安全协议将底层总线视为一条黑通道。该通道可能会损坏、延迟、重复或重排序消息。安全层会添加自己的 CRC 校验、序列计数器和看门狗,从而使安全功能不依赖于链路的校验。

将此教训应用到您自己的设计中。链路级 CRC 校验无法保护配方在内存中或通过 OPC UA 服务器和 MES 传输时的安全。对于每个影响安全性或质量的参数集,都应在应用层添加端到端校验。

提示: 一个 网关会在远端重新计算 CRC 校验码,因此其内存中的数据损坏不会被检测到。对于每个与安全相关的信号和设定值,都应添加一个跨网关的端到端 CRC 校验码,并配备计数器。

 

11. 什么是 CRC 错误校验?

A cyclic redundancy check treats the message as a long binary number, which is a polynomial over [latex]\mathrm{GF}(2)[/latex]. It divides that polynomial by a fixed generator polynomial and keeps the remainder. The remainder is the CRC, usually 8, 16 or 32 bits long. The sender appends it, the receiver divides again, and any mismatch signals corruption.

一个实例

Take the 3-bit generator 1011, which stands for [latex]x^3 + x + 1[/latex], and the message 1101. Append three zeros to get 1101000. Then divide by repeated XOR with the generator.

1101000
1011
-------
0110000
 1011
-------
0011100
  1011
-------
0001010
   1011
-------
0000001

余数为 001,因此传输的字是 1101001。将该字除以 1011 得到余数 000。翻转任意一位,余数就会变为非零值。实际的 CRC 校验使用 8 到 32 位的校验生成器,并在硬件或查找表中运行,但原理相同。

CRC保证什么

  • 只要生成器有多个项,就会出现单个比特错误。
  • 每次突发错误持续时间不超过 CRC 校验宽度。
  • Every odd number of bit errors, for generators that contain the factor [latex]x + 1[/latex]. The common 16-bit polynomials qualify. The Ethernet CRC-32 does not.
  • Longer bursts and random patterns pass with a probability of roughly [latex]2^{-n}[/latex].
  • 汉明距离取决于多项式和消息长度。

必须匹配的参数

只有当双方对六个参数达成一致时,才能计算出相同的 CRC 值:宽度、多项式、初始值、输入反射、输出反射和最终异或运算。诸如 CRC-16 或 CRC-32 之类的名称容易产生歧义。 Reveng CRC目录 列出常用的参数集。使用 ASCII 字符串 123456789 的校验值确认实现。

变体 多项式 热 反思内外 最终异或 检查值 典型用途
CRC-8 0x07 0x00 不 0x00 0xF4 通用 8 位校验和,ATM 报头
CRC-8/最大值 0x31 0x00 是的 0x00 0xA1 Dallas 和 Maxim 1-Wire 设备
CRC-16/MODBUS 0x8005 0xFFFF 是的 0x0000 0x4B37 Modbus RTU
CRC-16/CCITT-FALSE 0x1021 0xFFFF 不 0x0000 0x29B1 串行协议、引导加载程序
CRC-16/XMODEM 0x1021 0x0000 不 0x0000 0x31C3 XMODEM,某些引导加载程序
CRC-32 0x04C11DB7 0xFFFFFFFF 是的 0xFFFFFFFF 0xCBF43926 以太网、ZIP、PNG
CRC-32C 0x1EDC6F41 0xFFFFFFFF 是的 0xFFFFFFFF 0xE3069283 iSCSI、存储、硬件指令

通过消息长度选择多项式

CRC校验码的强度取决于多项式和消息长度。Koopman在一项研究中证明了这一点。 32 位 CRC 算法研究 IEEE 802.3 多项式在最大长度的以太网消息上仅达到汉明距离 4,而其他多项式达到 6。使用短消息的嵌入式网络显示出更大的差距,一些广泛使用的 16 位多项式在它们使用的长度上表现不佳。

  • 在选择多项式之前,先确定消息长度的范围。
  • 确定最大长度下所需的汉明距离。安全关键型应用通常需要 6 的距离。
  • 从已发表的详尽搜索结果中选取多项式,而不是从民间传说或代码示例中选取。

CRC校验的局限性

CRC校验码是消息长度的线性函数。给定一条消息及其CRC校验码,任何人都可以修改消息并计算出与之匹配的CRC校验码,而无需任何秘密信息。因此,CRC校验码无法证明消息的来源,也无法阻止蓄意篡改。第13章和第14章将介绍能够阻止篡改的工具。

带有CRC校验码的设备

设备 CRC 的位置 评论
超高频射频识别标签(EPC Gen2) 标签回复上的 16 位 CRC 校验 检测装卸货平台门和传送带上的读取错误。
USB设备 令牌包采用 5 位 CRC 校验,数据包采用 16 位 CRC 校验。 主机重试失败的数据包
SD 和 microSD 卡 命令采用 7 位 CRC 校验,数据块采用 16 位 CRC 校验。 嵌入式产品中日志和固件的通用存储

提示: CRC校验应覆盖数据包头部、地址字段、长度字段以及有效载荷。仅对有效载荷进行CRC校验会导致地址或长度信息损坏的数据也能通过。

12. 非加密哈希函数

诸如 xxHash、MurmurHash、CityHash 和 FNV 之类的非加密哈希函数以牺牲安全性为代价来换取速度。它们在现代 CPU 上的运行速度接近内存速度,并生成 32 位、64 位或 128 位的值,从而均匀地分散输入数据。

它们无法防止有人故意构建冲突的输入:

他们会在产品数据方面提供帮助

  • 在PLM和PDM同步过程中检测已更改的文件,而无需传输文件。
  • 对来自检测系统的大型测试数据集和图像存档进行去重。
  • 将导出的配置与已存储的配置进行比较,查看是否有任何更改。
  • MES 和分析管道中的键控缓存和查找表。

碰撞风险

The birthday bound sets the risk. For [latex]k[/latex] items and a [latex]b[/latex]-bit hash, the probability of at least one collision is approximately:

[latex]\displaystyle p \approx 1 – e^{-k^2 / 2^{b+1}}[/latex]

使用 64 位哈希值和一百万个不同的项目,任意两个项目发生碰撞的概率约为 2.7/1 亿。使用 32 位哈希值和 10 万个项目,发生碰撞的可能性很大,约为 69%。

对于库存数据,请选择 64 位或更高位数。将匹配结果视为重要线索,并在结果至关重要时通过比较完整数据来确认。切勿使用这些函数来证明文件的真实性。

给工程师的建议

  • 仅在系统内部进行变更检测和查找时才使用非加密哈希值。库存信息保留 64 位或更多位,并在需要做出决策时比较完整数据。
  • 永远不要存储编程语言内置哈希函数生成的值。有些哈希函数,例如 Python 的字符串哈希,每次运行都会发生变化。应该使用带有固定种子的命名算法来保存摘要。
六-256
了解加密哈希函数及其抗干扰特性,以实现安全的产品设计。

13. 加密哈希以及如何验证 SHA-256 校验和

本章我们将深入探讨技术上的实际细节。

加密哈希函数必须能够抵御三种攻击:

  • 原像抗性意味着没有人能找到给定摘要的输入。
  • 第二原像抗性意味着没有人能找到与给定输入的摘要相匹配的其他输入。
  • 抗碰撞性意味着任何人都找不到具有相同摘要的两个输入。
算法 输出 地位 使用
MD5 128 位 实际中可能会发生碰撞。 仅适用于检测意外损坏。新设计中应避免使用。
SHA-1 160 位 《实用碰撞模型》于2017年发布。美国国家标准与技术研究院(NIST)计划在2030年12月31日之前将其停用。 仅限旧系统
SHA-256、SHA-384、SHA-512 256、384、512 位 目前尚无已知的实际攻击 发布哈希值、固件摘要和签名的默认值
SHA-3(FIPS 202) 224 至 512 位 与 SHA-2 不同的内部设计 另类家庭,渴望多元化
布莱克2,布莱克3 最高支持 512 位,默认 256 位 现代且快速,但并非 FIPS 认证算法 处理速度至关重要且无需审批的大文件

NIST在其网站上描述了SHA-1退役计划。 SHA-1 公告页面SHA-256 摘要可提供约 128 位抗碰撞性,远远超过任何实际攻击。

如何验证 SHA-256 校验和

你需要两样东西:来自可信来源的预期摘要和文件本身。在本地计算摘要,然后与整个字符串进行比较。只比较前几个字符会破坏大部分保护机制。

# Linux sha256sum firmware.bin sha256sum -c SHA256SUMS # macOS shasum -a 256 firmware.bin # Windows PowerShell Get-FileHash .\firmware.bin -Algorithm SHA256 # Windows 命令提示符 certutil -hashfile firmware.bin SHA256

SHA256SUMS 文件每行包含一个文件,内容为摘要、两个空格和文件名。命令 `sha256sum -c` 会读取该文件,并为每个文件输出 OK 或 FAILED。在使用任何工具之前,请务必使用附录 B 中的测试向量进行验证。

文件旁边的摘要说明不了什么。

攻击者如果能够替换文件,就能替换其旁边的摘要。已发布的摘要可以防止下载失败,但无法抵御恶意镜像或被入侵的 Web 服务器。为了确保真实性,请使用上述方法之一。

  • 通过单独的、可信的渠道获取摘要,例如通过 HTTPS 访问供应商门户网站或签署的采购文件。
  • 验证使用您独立获得的密钥的指纹签名的摘要文件,例如使用 gpg –verify SHA256SUMS.asc SHA256SUMS。
  • 让设备或安装程序检查代码签名,这样就无需任何人比较字符串。

用于批处理记录和审计跟踪的哈希链

哈希链使日志具有防篡改功能。每条记录都存储了前一条记录的哈希值,而它自身的哈希值则包含了它的内容以及该哈希值。

[latex]\displaystyle H_n = \mathrm{SHA}\text{-}256(H_{n-1} \parallel r_n)[/latex]

Here [latex]r_n[/latex] is record number [latex]n[/latex].

任何记录一旦更改,后续所有哈希值都将不再匹配。只有当链的最新哈希值锚定在日志系统之外时,该链才能证明其顺序和完整性。可行的方案包括定期签名、根据 RFC 3161 进行可信时间戳标记,或者将哈希值发送给客户或审计员。如果没有锚定,任何拥有写入权限的人都可以重新计算整个链。

14. 密钥校验和、签名和真实性

目前所有信息都是公开的。任何人都可以计算修改后消息的 CRC 或 SHA-256 校验码。为了防止蓄意篡改,校验必须依赖于秘密信息或私钥。

机制 工作原理 证明 处理 典型用途
HMAC(RFC 2104) 哈希值与共享密钥结合使用 信息未作更改,且由密钥持有者发出。 双方共同的秘密 系统和设备之间的认证消息
CMAC(NIST SP 800-38B) 基于分组密码(通常是AES)构建的MAC 与 HMAC 相同 共享密钥,适用于配备 AES 引擎的硬件 嵌入式设备、安全元件
AEAD 标签(AES-GCM,ChaCha20-Poly1305) 加密与身份验证标签相结合 保密性、完整性和出处 每个消息都有一个共享密钥和一个唯一的随机数。 加密遥测和更新
数字签名(ECDSA、Ed25519、RSA) 私钥对哈希值进行签名,公钥进行验证。 完整性和来源,任何拥有公钥的人都可以验证。 硬件安全模块中的私钥,设备中的公钥 固件、证书、受监管记录

共享密钥方案将密钥放在每个验证器中。密钥分散在数十个测试站或数千台设备中,难以保护,也难以轮换。签名方案则扭转了这一局面。测试站和设备仅持有公钥,而私钥则保存在发布机构的硬件安全模块中。

不要使用 SHA-256 算法对密钥和消息进行哈希运算来构建消息认证码 (MAC)。SHA-2 算法允许对这种构造进行长度扩展攻击。HMAC 的存在正是为了避免这种情况。

安全启动
安全启动和签名固件增强了工程产品的完整性和安全性。

产品环境中的使用案例

    • 固件已签名并支持安全启动。启动 ROM 会验证引导加载程序的签名,而引导加载程序又会验证应用程序。CRC 校验在确保闪存和 RAM 运行时完整性方面仍然发挥着作用,但它永远无法取代固件签名。
  • 备件的真伪鉴别是另一个问题。序列号加上有效的校验位并不能证明其真伪,因为任何人都可以计算出校验位。真正的认证需要一个秘密信息,例如安全元件中的加密标签,或者服务器可以验证且任何人都无法从序列号推导出的代码。
  • 标签可以承载防伪数据。GS1 定义了一个应用标识符 AI 8030,用于标识与密钥一起承载在数据载体上的数字签名。
  • 受监管的记录需要格外注意。加密签名支持电子记录,但并不等同于《美国联邦法规》第21篇第11部分所定义的电子签名。该法规还要求进行身份验证,明确签名的含义及其与记录的关联。

锁具、钥匙和门禁设备

机械锁和电子锁体现了错误检测和身份验证之间的区别。

  • 弹子锁:钥匙的齿形必须与弹子的高度相匹配,因此锁是通过验证物理形状来打开的。这个形状实际上是一个共享的秘密,因为任何复制它的人都能打开锁。
  • 低成本的非接触式凭证:读取帧包含用于防止无线电错误的 CRC 校验码,但这并不能证明身份。基于已损坏的专有加密算法(例如 MIFARE Classic)的旧卡可以被克隆。现代凭证采用挑战-响应机制,并使用 AES 等标准加密算法。
  • 蓝牙低功耗智能锁:链路层使用 AES-CCM 保护每个数据包,其消息完整性代码是一种密钥校验。
  • 经过认证的耗材和配件:一些打印机墨盒、电池组和传感器带有芯片,可以回答来自主机设备的加密挑战。

两条专业建议

  • 在选择算法之前,先规划密钥管理。每个产品系列使用不同的密钥,在安全站点注入密钥,将密钥保存在硬件安全模块中,并按序列号记录注入情况。
  • 为每条经过认证的消息添加一个计数器或随机数。否则,攻击者可以重放已录制的有效消息。

15. 纠错码

检测功能表明数据有误,纠错功能则负责修复错误。代价是数据冗余增加,但好处是无需重新扫描、重新传输或返工即可继续进行流程。

代码 原则 你在哪里遇到它
带额外奇偶校验位的汉明码(SECDED) 能够纠正任何单比特错误并检测双比特错误 工业PC和微控制器中的ECC存储器、RAM和闪存
里德-所罗门 能够很好地处理突发信号的基于符号的校正 二维码、Data Matrix ECC 200、光盘、存储系统
BCH 二进制多位校正 NAND闪存控制器
低密度脂蛋白胆固醇 迭代解码接近理论极限 SSD 控制器、无线标准

损伤后留下的痕迹

二维码提供四个纠错级别:L、M、Q 和 H,分别可恢复约 7%、15%、25% 和 30% 的码字。Data Matrix ECC 200 采用里德-所罗门纠错算法,每个符号尺寸具有固定的冗余度。激光标记、脏污或磨损的零件以及在供应链中流通的标签都能直接受益。

纠错功能使标记更加可靠,但也可能掩盖质量下降。损坏的数据矩阵符号可能仍能完美解码,但其剩余纠错容量却会逐渐减少至接近于零。根据 ISO/IEC 15415 标准进行的验证会将未使用的纠错容量作为分级参数进行报告。应监控验证器的等级,而非读取结果,以监测打印和标记质量。

嵌入式产品中的ECC存储器和闪存

用于汽车和工业领域的微控制器通常使用 ECC 来保护闪存和 RAM。硬件会纠正单比特翻转并进行计数。读取并记录已纠正错误计数器的值。计数上升表明存储单元性能下降、电源供应不足或受到辐射干扰。纠正后计算的 CRC 校验码显示数据正常,因此该计数器是唯一能获取的早期信号。

Ecc内存
ECC存储器通过检测和纠正闪存和RAM中的错误来提高嵌入式产品的可靠性。

依赖纠错功能的设备和媒体

  • 激光标记和点阵喷丸处理的零件带有 Data Matrix ECC 200 符号,使用里德-所罗门码,因此即使有磨损的标记仍然可以解码。
  • 服务器、控制器和汽车微控制器:ECC 存储器通常纠正单比特错误并检测双比特错误。
  • SSD、eMMC 和 SD 卡:控制器将 BCH 或 LDPC 代码应用于闪存页,其校正位计数器可用作磨损指示器。

尖端

  • 根据评分方法和环境选择纠错级别。通过故意损坏(例如磨损和部分遮盖)来测试所选级别,并对结果进行评分。
  • 记录ECC存储器、闪存和符号解码的纠错次数。纠错次数呈上升趋势是一个早期预警信号,因为即使设备仍然正常工作,也可能已经没有纠错能力了。

16. 算法比较

表格总结了各个系列及其在本文中的定位。速度数据取决于平台,因此请在您自己的目标硬件上进行测试。

算法 输出大小 检测 相对速度 防范蓄意变更的安全措施 此处典型用法
奇偶校验位 1 位 抛掷次数为奇数 最快 没有任何 传统串行链接
8 位和或异或 8 位 简单错误,结构性错误较弱 速度非常快 没有任何 NMEA语句,Intel HEX记录
GS1 mod 10 校验位 1 位数字 所有个位数错误,大部分换位 立即的 没有任何 GTIN、SSCC、GLN
维尔霍夫,达姆 1 位数字 所有个位数错误和相邻数字的换位 立即的 没有任何 内部标识符
ISO/IEC 7064系列 1 或 2 个字符 取决于系统 立即的 没有任何 IBAN,内部标识符
CRC-16 16 位 突发传输最高可达 16 位,汉明距离由多项式和长度决定 速度非常快,硬件支持常见 没有任何 Modbus RTU,短帧
CRC-32、CRC-32C 32 位 突发传输最高可达 32 位,汉明距离由多项式和长度决定 非常快的硬件说明 没有任何 以太网、固件映像、存储
xxHash64,xxHash128 64 位或 128 位 偶然差异 接近内存速度 没有任何 去重、变更检测
SHA-256 256 位 任何变更,出于实际目的 快速,多种CPU均支持硬件加速 大约128比特的抗碰撞能力 发布哈希值、固件摘要、审计跟踪
SHA-3-256、BLAKE2、BLAKE3 256 位或更多 任何变更,出于实际目的 快速地 与 SHA-256 属于同一类 SHA-256 的替代方案
HMAC-SHA-256、CMAC 128 至 256 位 变化与起源 快速地 取决于密钥保密性 已验证消息
ECDSA,Ed25519 签名 典型值 64 字节 变化与起源 签名速度较慢,验证速度较快 私钥安全无虞,且功能强大 固件、记录、证书
里德-所罗门 大约 10% 到 30% 的数据存在冗余。 检测并纠正 缓和 没有任何 二维码、数据矩阵、存储

17. 设计与工程

校验和在产品第一部分制造之前就已输入。它们属于发布流程和数据模型的一部分。

CAD图纸、设计图和物料清单正在发布中

PLM 或 PDM 系统通过版本号来识别版本发布。版本号说明发布者计划发布的版本。已发布软件包的哈希值则说明发布了哪些字节。两者都应存储在发布记录中。这样,任何用户都可以验证自己收到的内容,从而弥补了版本号说明留下的漏洞:即发布后文件可能被替换或编辑。

  • 计算每个已发布文件的 SHA-256 摘要,例如 STEP 模型、图纸 PDF 和 BOM 导出文件。
  • 对列出所有文件及其摘要的清单再计算一次摘要,以便用一个值表示整个软件包。
  • 将清单摘要放入 ECO 或 ECN 记录中,并放入发送给供应商的传输文件中。
  • 收到货物后,让供应商门户网站或制造系统重新计算并进行比较。
  • 通过哈希值比较设计配置和实际制造配置的物料清单导出文件。不匹配项会标记出差异,然后由人工审核解释该差异。

零件编号和连接器防错

设计决定了日后出错的难易程度。零件编号中的校验位可以在每个录入点检测出输入错误。采购零件、图纸和组件采用不同的编号格式,可以防止不同类别混淆。带键连接器和非对称标签格式在物理层面也发挥着同样的作用。

嵌入式固件和校准数据

固件镜像应具备自描述和自检功能。常见的布局是在已知地址处放置一个固定的头部。

标题字段 目的
神奇数字 识别图像类型并检测加载错误的文件
格式版本 允许引导加载程序解析未来的头部布局
产品和硬件标识符 阻止另一个产品的有效图像运行
软件版本 支持可追溯性和回滚保护
图像长度 定义检查范围。
图像的 CRC-32 校验和 每次启动时或按需检测意外损坏
SHA-256摘要或签名 首次执行前证明完整性和来源。
定义填充字节 保持未使用的闪存区域不变,从而确保构建结果可复现。

对EEPROM或闪存中的校准和配置块应用相同的规范。每个块都存储一个CRC校验码。定义校验失败时的处理方式:回退到默认值、引发故障,并且绝不静默使用数据。保留冗余副本,并以断电后数据仍然保留的方式写入块。

功能安全背景

功能安全标准将内存损坏和通信错误视为需要采取诊断措施的故障模式。道路车辆的 ISO 26262、工业系统的 IEC 61508 和医疗设备软件的 IEC 62304 都要求您说明如何检测此类故障。典型的措施包括对代码和数据存储器进行 CRC 校验、使用序列计数器进行保护性通信以及采用冗余存储。

分析必须说明诊断覆盖率,即某项措施能够检测到的故障比例。32 位 CRC 校验并不能自动提供 99% 的系统覆盖率。覆盖率取决于 CRC 校验的覆盖范围、运行频率以及系统在发生故障时的处理方式。

硬件内置机械防错功能

实体产品早在计算机出现之前就运用了校验的概念。在这些设计中,零件的形状就是校验值。

编码连接器:M12 连接器采用 A、B、D 和 X 编码,因此传感器电缆无法与以太网端口连接。出于同样的原因,D-sub 连接器外壳采用梯形设计。医用气体接头:针脚索引安全系统将插针放置在轭架上,每个气体的插针位置都不同,因此错误的气体钢瓶无法插入。小口径医用连接器:ISO 80369 系列标准定义了具有不同几何形状的连接器,用于不同的应用,例如肠内和神经轴输液,以防止误连接。燃油喷嘴:在许多市场,柴油喷嘴对于汽油加注口来说太大。定位销和夹具:采用非对称排列的不同直径的定位销,使零件只能以一种方向放置。通止规:塞规用于检测孔径是否在公差范围内,如果超出公差则表示不合格。这是一种物理上的合格/不合格测试,类似于校验和。

工程中校验和的专业技巧

  • 预防先行,检测后行动。 在设计 FMEA 中使用几何形状、键控连接器和非对称特征作为预防控制措施,并添加电子身份验证作为第二层。
  • 每个固件和校准镜像都应包含一个带有版本号、长度和 CRC 校验值的头部,并指定启动检查失败时的行为。安全状态是一种设计决策,而非默认设置。

18. 工业化和制造,包括如何验证固件刷新

工业化将设计数据转化为运行流程。大多数进入生产环节的数据错误都源于此:错误的配方、错误的标签模板、不匹配的测试限值。

标记和扫描站防错

  • 在标记点和首次需要标记的位置分别核对标记。ISO/IEC 15415、15416 和 29158 标准定义了等级评定。
  • 将扫描站设置为门控。只有当解码、校验位、格式和预期值测试全部通过时,PLC 才会释放下一个操作。
  • 在生产线生成的序列号上添加校验位,以便返工站的手动输入也能得到保护。
  • 记录每次扫描失败的情况,包括站点、时间以及(如果可能)符号图像。这些信息将用于第 20 章的 DMAIC 工作。

配方和参数

机器配方、扭矩程序、焊接计划和测试限值都以文件或数据库行的形式存储。错误的或过时的参数集会导致隐性缺陷,因为机器在错误的指令下也能正常运行。

在MES或PLM系统中维护一份包含哈希值的黄金记录。每次下载配方以及每个批次开始时,工作站软件都会重新计算当前配方的哈希值并进行比较。如果哈希值不匹配,则该批次的生产将被阻止。对于通过总线发送到控制器的参数,在数据块中添加CRC校验码,以防止接收控制器使用损坏的值。

如何验证线路末端的固件刷写情况

闪光加工是一种工艺步骤,类似于焊接或扭矩拧紧。它需要明确的方法、验收标准以及每个序列号的记录。如果编程器报告成功,那仅仅意味着它的命令已完成。

  1. 如果设备和工具支持,请启用编程器的验证选项对映像进行编程。
  2. 读取已编程的区域,并对控制计划中定义的每个区域计算 SHA-256 或 CRC-32 校验和。将结果与发布记录中的黄金摘要进行比较。
  3. 将单元特定数据单独处理。序列号、MAC 地址和校准值因单元而异。将这些数据从整幅图像摘要中排除,并根据其自身记录进行验证,或者在将单元数据补全后计算预期摘要。
  4. 检查选项字节、熔丝位和锁定位。如果应用程序正确但启动配置错误或缺少读取保护,则该设备存在缺陷。
  5. 向运行中的设备询问其软件版本以及通过应用层协议获取其自身镜像的摘要信息。许多产品会使用硬件外设计算其闪存的 CRC 校验值并上报。这也能测试通信路径。
  6. 将结果连同图像摘要和刀具版本一起写入MES系统,并与设备序列号对应。未通过记录的设备不得继续运行。
  7. 每隔一段时间,用已知有问题的样本(例如,一张只有一个比特位翻转的图像)来挑战检测站。这证明检测站仍然会拒绝该样本。
方法 力量 时间成本 限制
程序员验证 将闪存图像与刚刚写入的源图像进行比较。 低的 不包括选项字节,具体取决于工具的实现方式。
站点上的回读和哈希 对实际内容进行独立核查 对于大型图像,性能要求中等到高,因为读取速度通常比编程速度慢。 需要允许回读,而读取保护可能会禁止回读。
设备计算的CRC校验值通过总线上报。 速度快,并测试应用程序路径 低的 仅防止意外错误,并且依赖于计算错误的固件。
引导加载程序在首次启动时进行签名检查 证明其完整性和来源 低的 接受错误但签名有效的镜像,因此需要结合版本检查使用。

注意步骤顺序:一旦启用读取保护,之后将无法进行回读。先进行验证,然后锁定,最后检查锁定位是否已设置。

测试站和工具记录

扭矩、视觉、泄漏和电气测试结果可作为商业证据,有时也可作为法律证据。以普通文件或行形式存储的记录可能被篡改或丢失而无法追踪。

  • 计算序列号、站点、时间、结果和测量值的记录哈希值。
  • 将记录写入仅追加存储,或按照第 13 章所述的方式将它们链接起来,并进行周期性锚定。
  • 将站点时钟与可信时间源同步,以便时间戳具有意义。

机器对机器通信

OPC UA 通过其 Sign 和 SignAndEncrypt 安全模式提供消息签名和加密功能。这些模式可在工作站、PLC 和 MES 之间使用。传输安全机制可保护传输中的数据。但它并不能取代应用层对关键参数的检查,这些参数必须在存储、转换和导出过程中保持有效。

能够防止流程出错的工作站设备

某些物理量起到校验和的作用。例如,套件的重量就是一个冗余属性,它必须与预期值相符。

设备 它验证了什么 典型的硬停止
固定式扫描仪或视觉阅读器 解码后的标签或标记内容与工单对应 PLC联锁装置控制传送带
扭矩和角度控制器,带夹具识别功能 正确的程序适用于正确的关节,以及窗口内的扭矩和角度。 该工具已禁用,直到正确的程序激活为止。
检重秤 组件或套件的质量与预期质量的比较 如果零件缺失或过多,则拒绝该门。
部件存在传感器和钥匙式灯具 部件的存在、类型和方向 循环启动未发布
带回读功能的编程夹具 从设备本身读取的已编程区域的摘要 该设备被标记为故障并已送修。
通止规或气压表 尺寸公差 部分零件自动或由操作员分离。
图像验证
对产品更新实施安全的图像验证。

专业提示

  • 工作站只能从发布服务器加载指定版本的镜像,并在刷写前验证其哈希值或签名。拒绝任何与工单不符的镜像。
  • 将每次绕过硬限位的操作都置于钥匙开关或授权登录之后,并跟踪每行和每个班次的绕过次数。绕过次数的上升表明控制薄弱,甚至在逃逸机制生效之前就已存在。

19. 质量管理与合规性

质量体系要求达到一些结果,而校验和有助于实现这些结果:识别、可追溯性、受控文件和可信记录。标准很少提及校验和,而是强调结果,而校验是证明结果的一种方法。

框架 相关要求 校验和如何支持它
ISO 9001:2015 第 8.5.2 条关于识别和可追溯性以及文件信息的控制 标识符校验位、受控文件的哈希值
IATF 16949 可追溯性、防错、控制计划、PPAP PPAP数据包中的防错机制,包括校验位和验证、哈希值
AS9100 配置管理、产品识别、防止假冒零件 发布配置基线哈希值,部件认证
ISO 13485:2016 可追溯性(第 7.5.9 条)、UDI、软件验证 UDI校验位、标签和固件的验证
21 CFR 第 11 部分和欧盟附件 11 电子记录、审计追踪、电子签名 审计跟踪上的哈希链,记录签名
体育 5 基于风险的计算机系统验证 对检查功能本身的验证

数据完整性和ALCOA+

监管机构使用 ALCOA 原则来描述数据完整性:可归属性 (Attribuable)、可读性 (Learble)、同期性 (Cotent-overtime)、原始性和准确性 (Original) 五项。扩展的 ALCOA+ 原则在此基础上增加了完整性 (Complete)、一致性 (Consistent)、持久性和可用性 (Available) 五项。校验和 (checksum) 对应于其中的几项原则。它表明记录自创建以来准确且未发生任何更改。哈希链则表明记录完整且顺序正确。

校验和不会显示记录的创建者或创建时间。它是对审计跟踪和访问控制的补充,而不是替代。

可追溯性和召回准备

可追溯性依赖于从组件接收到发货始终保持正确的标识符。校验位确保标识符在经过扫描仪和键盘输入时保持准确。溯源信息将批号、批次号和序列号关联起来,向上追溯一级,向下追溯一级。

通过模拟召回来评估准备情况。该指标是指从触发事件(例如供应商批号)到获得受影响成品及其位置的完整清单所需的时间。检查失败和重复标识符是导致模拟召回耗时数天而非数小时的常见原因。

校准
在产品设计和工程中实施健全的校准和供应商数据验证流程。

校准、测试设备和供应商数据

  • 将校准证书与带有校验位的设备标识符关联起来,并保存每个证书文件的哈希值。
  • 对于供应商提供的合格证书(例如CoC、CoA和材料测试报告),请索取签名文件或结构化数据。系统会自动将批号和零件号与采购订单和收货记录进行比对。
  • 对于供应商的 CAD 文件、固件和测试程序,在任何人使用该文件之前,请将摘要与传输文件进行核对。

额外奖励:验证支票本身

在受监管的环境中,检查功能是计算机系统的一部分,需要根据 GAMP 5 原则进行验证。应根据风险程度规划安装、运行和性能确认 (IQ、OQ 和 PQ)。

OQ(运行确认)必须包含否定测试。输入错误数据进行检查,并证明系统会拒绝测试结果。将测试向量保存在验证文件中,并在软件、读卡器固件或标签模板发生任何更改后重新运行测试。

提示: 在将检查作为流程的一部分。包括阴性测试,将测试向量存储在验证文件中,并在扫描仪固件、打印机、库或操作系统发生任何更改后重新运行这些测试。

20. 精益六西格玛视角

防错法
将防错法和自働化相结合,通过确保工程流程中内置的质量和错误预防,增强了产品设计。

防错法和自律

与校验和有很多共同之处:新乡重夫在丰田工作期间正式提出了防错法(poka-yoke)。他将控制功能(防止错误发生或停止流程)与警告功能(仅发出错误信号)区分开来。自働化(Jidoka,内置质量)在此基础上增加了停止功能:机器在检测到异常时会自动停止运行。

扫描站的校验位(带有硬性限制)是一种控制功能。如果扫描失败但设备仍然通过,则仅是一种警告。请检查您的各个扫描站是否存在这种差异。

失效模式及影响分析

诚实地评估每项控制措施的检测效果。一项设有硬性停止机制、使用已知不良样本进行测试并能涵盖失效原因的检查,其评分高于操作员可以绕过的同类检查。将证据记录在PFMEA中。

AIAG-VDA行动优先级方法也敦促您首先改进预防措施。这里的预防措施指的是设计流程,避免出现错误数据,例如,通过从单一来源生成标识符和标签,而不是手动输入。

DMAIC应用于数据错误

阶段 活动 错贴标签产品示例
定义 问题、范围、关键质量特性 过去 12 个月内,客户 A 收到了贴错标签的产品。关键质量特性 (CTQ) 要求所有产品的标签内容与产品本身完全一致。
措施 基线和测量系统 统计每百万个标签中的缺陷数,并对验证器与参考标签进行属性一致性分析。
分析 根本原因 帕累托图原因分析:模板版本、卷宗变更、手动录入、重印
提升 控件 模板哈希校验、扫描匹配、中央序列号服务、校验位(无论何时需要输入)
控制 保持收益 扫描失败率控制图、控制计划、审核、应对计划

The defects per million opportunities follow from the number of defects [latex]D[/latex], the units [latex]N[/latex] and the opportunities per unit [latex]O[/latex]. The sigma level adds the conventional 1.5 sigma shift to the normal quantile.

[latex]\displaystyle \mathrm{DPMO} = \frac{D}{N \times O} \times 10^{6}[/latex]

[latex]\displaystyle \sigma_{\mathrm{level}} = \Phi^{-1}\left(1 – \frac{\mathrm{DPMO}}{10^{6}}\right) + 1.5[/latex]

A worked example with illustrative numbers shows the arithmetic. 36 wrong-label defects in 480,000 labels, counting one opportunity per label, give [latex]\mathrm{DPMO} = 36 / 480000 \times 10^{6} = 75[/latex]. With the conventional 1.5 sigma shift, that is a sigma level of about 5.3. After the improvements, 6 defects in the next 480,000 labels give 12.5 per million and about 5.7 sigma. The figures illustrate the calculation. They are not a benchmark.

测量系统分析和统计过程控制

将扫描仪和验证器视为测量系统。验证器需要可追溯至合格标准的校准。对于合格/不合格数据,运行操作员、扫描仪和参考标准之间的属性一致性分析,以量化一致性和偏差。

然后使用控制图进行监控。p 图适用于每批次扫描失败率,u 图适用于单位缺陷率。首次读取失败率上升通常预示着打印头磨损、色带磨损或基材更换,而此时验证等级远未低于限值。

浪费和投资回报

Data errors create classic wastes: defects, rework, waiting for corrected data, motion to find the right item, and excess inventory held as a buffer against bad data. A simple model sums, over all stages [latex]s[/latex], the number of errors [latex]n_s[/latex] times the cost per error [latex]c_s[/latex].

[latex]\displaystyle C_{\mathrm{total}} = \sum_{s} n_s c_s[/latex]

将该数字与实施成本进行比较,实施成本主要包括软件配置、扫描仪和验证器硬件以及培训。

参考您自身的成本核算,计算每次错误造成的成本。印刷厂发现的错误和客户发现的错误,其成本可能相差很大。

控制计划示例

特征 方法 频率 验收 应对方案
标签模板标识 与发行记录相比的哈希值 每份工作的开始 匹配 阻止该作业,并通知工程部门
符号打印质量 在线验证器 100% 或每个批次抽取一个样品(如果风险允许)。 成绩达到或高于规定的最低要求 拒收标签,检查打印头和色带。
标签内容与单元记录对比 扫描并比较 100% 完全匹配 隔离单元,调查滚动和数据
固件摘要 回读哈希 生产线末端100% 与黄金文摘匹配 重新刷机一次,然后清除所有数据并找出根本原因。
检查功能的健康状况 已知糟糕的挑战 每个班次 拒绝记录 停止生产线,重新校准或维修
可追溯性 从批次到单元的模拟召回 每年或按审计计划 目标时间已达成 填补家谱数据中的空白

三类防错装置

新乡将防错方法分为三大类。本指南中的每一项检查都与之相对应:

联系方式
通过触摸或传感器(例如限位开关或键控装置)检测形状、大小或颜色。相应的数据是格式或校验位测试。
固定值法
当零件或动作的数量未达到设定值时,例如托盘上的计数位置,会发出错误信号。对应的数据字段是长度字段或段数。
运动步进法
检查步骤是否按正确顺序执行,例如,通过联锁机制阻止后续步骤,直到前一个步骤完成。对应的数据是序列号或扫描发布流程。

尖端

  • 将检查站的废品数据输入统计过程控制(SPC)系统,例如按生产线生成平均废品率(au)图表,并按班次、打印机或工装进行分组。即使废品率看似稳定,也可能掩盖了会消耗产能的返工循环。
  • 如果检查环节出现不合格情况,应将其视为前一工序的缺陷,而非检查环节的成功。查明原因并从源头入手,形成闭环。

21. 物流:如何减少仓库拣货错误

拣货错误是物流领域中代价最高的基于数据的故障之一。每一次拣货错误都会引发一系列退货、重新发货和投诉。

GS1 鉴定

GTIN(全球贸易项目代码)用于识别特定包装级别的产品。SSCC(标准供应链编码)用于识别物流单元,例如托盘,由18位数字组成。GLN(全球物流编号)用于识别地点或参与方。GRAI(可回收资产识别码)用于识别可回收资产。所有这些编码都带有校验位,GS1物流标签标准定义了它们在单元上的显示方式。

基于扫描的防错

  1. 首先扫描位置标签。校验位和格式验证会立即检测出错误的位置代码,WMS 会确认这是否是预期的位置。
  2. 扫描商品或箱子的GTIN码。系统会将其与拣货任务进行比对,并在输入数量之前拒绝错误的商品。
  3. 通过扫描计数确认数量,或者在无法逐件扫描的情况下通过称重确认数量。
  4. 关闭设备时扫描目标容器或 SSCC,并将内容物与其关联。
  5. 装货时,将 SSCC 与货物清单进行核对。
拣货错误的原因 典型疗法
相邻槽位中外观相似的物品 扫描确认GTIN码,并遵守配货规则
手动输入位置或物品代码 从输入过程中移除键盘,并在不可避免地需要输入字符时使用校验位。
计量单位混淆(每个、内包装、箱) 使用 GTIN-14 指示数字,每个包装级别使用不同的 GTIN。
标签破损或无法辨认 标签验证、带纠错功能的二维条码、重新贴标站
主数据错误 导入时验证 GTIN 校验位,并与供应商的源数据进行比较。
重复的 SSCC 中心分配和唯一性约束

Quantify accuracy as defects per million lines picked. A line accuracy of 99.9 percent sounds high, yet it equals [latex](1 – 0.999) \times 10^{6} = 1000[/latex] errors per million lines, far from six sigma. State targets in DPMO, so that they connect to your Lean Six Sigma metrics.

EDI、ASN 和 EPCIS 消息完整性

业务消息本身就包含完整性字段。例如,EDI 标准包含控制号和段计数,例如 EDIFACT 消息或 X12 事务集的结束段中就包含这些字段。接收方使用这些字段来检测数据是否被截断或丢失。EPCIS 事件包含相关单元的标识符,事件的值取决于校验位以及这些标识符的唯一性。

收到消息后,按以下顺序进行验证:检查计数、标识符校验位和格式,然后检查业务规则,例如高级发货通知 (ASN) 是否与采购订单匹配。拒绝或隔离不合格的消息,并按交易伙伴跟踪拒绝率。

受控链中的序列化

药品和医疗器械供应链增加了序列化规则。在美国,《药品供应链安全法案》要求在每个包装上以二维数据矩阵的形式包含产品标识符,包括国家药品代码 (NDC)、序列号、批号和有效期。这些加强的分销安全要求分阶段生效。最初的生效日期是 2023 年 11 月 27 日,稳定期于 2024 年 11 月 27 日结束,FDA 给予小型分销商豁免,豁免期至 2026 年 11 月 27 日。FDA豁免通知).

律师事务所的摘要报告称,FDA 于 2026 年 8 月将某些小型药房的豁免期限延长至 2027 年 11 月 27 日(布坎南概要请查看FDA网站了解最新情况。

在欧盟,《假药指令》框架要求在包装上添加唯一标识符和防篡改装置。医疗器械的唯一标识符(UDI)遵循同样的逻辑。诸如GS1之类的签发机构定义标识符结构,校验位用于验证其有效性。

冷链和物联网数据

温度记录仪和物联网传感器能够提供货物运输始终在安全范围内的证据。选择使用 CRC 校验或签名存储读数的设备,并优先选择已签名的下载版本。使用经过认证的加密技术保护运输安全。如果没有这些措施,日志文件就只是一个可编辑的电子表格。

防伪和追踪溯源

带有有效校验位的序列号很容易伪造。追踪溯源系统会在服务器端记录哪些序列号已被签发以及它们出现在哪里。在两个地点重复出现的序列号,或者从未签发过的序列号,都是可疑信号。对于高价值商品,应添加签名或安全元件,如第14章所述。

区块链和分布式账本

分布式账本可以锚定供应链事件的哈希值,从而防止任何人悄悄篡改历史记录。它们并不验证事件是否真实发生,也不验证扫描的物品是否为真品。错误数据将永远错误,并带有永久时间戳。

使用外部锚定的签名哈希链可以提供大多数恶意程序所需的防篡改证据,而无需额外的运维开销。只有当多个互不信任的参与方需要一条共同记录时,才应考虑使用共享账本。

 

仓库设备和工具示例

  • 语音拣货耳机:系统会要求拣货员说出拣货位置上张贴的校验码。如果位置错误,系统会在拣货前拒绝该位置。
  • 拣货指示灯和上架指示灯模块:指示灯和数量显示屏标记货位,操作员通过按钮确认。在错拣成本高昂的情况下,增加物品扫描功能。
  • 手持式和环式扫描仪:扫描以确认托盘标签的位置、物品和 SSCC。
  • 称重和尺寸测量站:将测量重量与主数据进行比较,以便标记错误的物品或损坏的纸箱。
  • 码头门上的 RFID 门户:读取托盘内的标签与预先发货通知进行比较。

22. 服务、售后市场和报废

无线更新
产品设计中稳健的更新流程通过多层防御来防止潜在故障,从而确保安全性和可靠性。

空中和现场更新

更新过程可能以三种方式失败:传输文件损坏、镜像文件与设备不兼容,或者镜像文件包含恶意代码。应采取多层防御措施来应对这些失败情况。

  • 每个数据块或每个数据块都进行 CRC 校验,可以及早发现传输错误。
  • 安装前检查的整个镜像的哈希值,可以确认其完整性。
  • 通过与设备中存储的公钥进行签名比对来确认来源。
  • 产品和硬件标识符匹配成功后,将无法安装原本用于其他设备的镜像。
  • 带有回滚保护的版本检查功能可防止降级到存在漏洞的版本。
  • 双分区并带有启动时确认功能,即使新镜像失败,旧镜像也能继续运行。

备件、保修和退货

  • 备件编号带有校验位,保修登记的网络表格会对其进行验证,从而从源头上发现输入错误。
  • 序列号将现场故障与生产历史记录联系起来,包括生产线末端记录的固件摘要。
  • 逆向物流需要与正向物流相同的标识符和相同的检查。

数字产品护照

《可持续产品生态设计条例》(EU) 2024/1781 于 2024 年 7 月 18 日生效,引入了数字产品护照:护照将标准化的生命周期数据与产品上的数据载体(通常是二维码)关联起来。

欧盟委员会于2026年7月20日启动了DPP注册系统及其测试环境。首个强制性通行证将于2027年2月18日起根据欧盟电池法规适用于特定电池。其他产品类别将随着相关授权法案的通过而陆续纳入。参见…… 电池委员会页面 和 注册公告.

数据完整性面临的风险是直接的。产品唯一标识符必须在产品整个生命周期内保持唯一性、持久性和准确性,这就需要校验位和集中分配流程。护照数据应可验证,这涉及到基础文件的哈希值和经济运营者的签名。数据载体也必须保持可读性,这就引出了标记质量和纠错机制的问题。

23. 意外腐败与恶意腐败

正确的检验方法取决于错误是由谁或什么原因造成的。噪音、磨损和人为失误都是随机的。而攻击者或造假者则不然,他们会选择检验方法无法发现的篡改点。

威胁 例子 有助于检查 无效的检查
意外错误 位翻转、输错数字、部分下载 校验位、CRC、哈希 除此之外,无需其他任何措施。
故意修改 修改过的固件,篡改过的测试记录 签名,HMAC CRC校验码、纯哈希值、校验位
替补 带有复制序列号的假冒零件 认证标签,追踪溯源 校验位
重播 再次发送有效的旧消息 受 MAC 保护的序列计数器或时间戳 任何静态校验和
回滚 重新安装了已签名但存在漏洞的旧固件。 带防回滚计数器的版本检查 仅签名

碰撞攻击在任何一方信任一方准备的文件而非另一方提供的摘要信息的情况下都至关重要。MD5 和 SHA-1 无法通过此测试。对于消息认证,应使用 HMAC,切勿使用密钥前缀哈希,因为后者会扩展哈希长度。

工业网络安全与监管

IEC 62443系列标准定义了系统完整性的基本要求。它涵盖了工业自动化和控制系统中的通信完整性以及软件和信息的完整性。对固件、配置和配方的检查是其直接体现。

欧盟网络安全韧性法案((EU) 2024/2847 号条例)于 2024 年 12 月 10 日生效。自 2026 年 9 月 11 日起,对于已被积极利用的漏洞和严重安全事件,包括已上市产品,均须履行报告义务。制造商须在知悉漏洞后 24 小时内进行首次报告。全面实施,包括基本要求和 CE 标志,将于 2027 年 12 月 11 日开始。违反报告义务的罚款最高可达 1500 万欧元或全球年营业额的 2.5%。 马瑟森总结 涵盖时间线。

基本要求包括保护数据、程序和配置的完整性,防止未经授权的修改,以及安全的更新机制。因此,签名固件和经过验证的更新不仅是工程方面的考量,更是合规性问题。NIS2 指令 (EU) 2022/2555 为众多机械、电气设备、车辆和医疗器械制造商增加了安全和报告义务。

假冒伪劣产品、灰色市场和供应链攻击

  • 假冒商品会复制标签和序列号。其防御手段是使用秘密的认证方式,而不是使用更高的校验位。
  • 水货是真品,但来源不明。追踪溯源规则一旦发现序列号出现在错误的地区,就能将其曝光。
  • 供应链攻击的目标是构建服务器、更新渠道或供应商提供的组件固件。建议使用已签名的构建版本,保留包含摘要信息的软件物料清单,并通过第二渠道验证供应商固件摘要。

24. 如何选择正确的校验和

先确定威胁,再确定数据类型,最后确定约束条件。 按顺序回答问题,找到第一个合适的机制后就停止,如果后面问题的答案也是“是”,则添加下一个机制。

  1. 是否有人会故意篡改数据并从中获利?如果答案是肯定的,请使用数字签名或HMAC。CRC校验码或哈希值仅用于应对意外错误。
  2. 该值是由人输入、读取还是扫描?如果是,则在标识符上使用校验位,在扫描仪处进行验证,并使用具有纠错功能的二维条码以防止物理损坏。
  3. 数据是通过总线传输还是存储在小型内存中?如果是,请使用 CRC 校验,并根据消息长度和所需的汉明距离选择合适的多项式。对于关键参数,请添加端到端 CRC 校验。
  4. 文件或记录必须与参考文件完全一致吗?如果是,请使用 SHA-256 进行比较。对于非关键性比较,快速的非加密哈希算法就足够了。
  5. 数据损坏后必须保留而不进行重试吗?如果是,请添加纠错码。
  6. 数据是否属于受监管记录的一部分?如果是,请添加审计跟踪、验证以及所选方法的书面理由。
数据或阶段 风险 推荐方法
零件编号和序列号由人员输入 中等的 Damm、Verhoeff 或 ISO/IEC 7064 校验位。GS1 密钥使用 GS1 校验位。
标签和标记 中等至高 符合 ISO/IEC 15415、15416 或 29158 标准的二维符号纠错验证,模板哈希
现场总线和传感器数据 中等的 采用符合长度要求的汉明距离的CRC协议,以及必要的安全协议
配方和参数 高的 与黄金记录进行哈希运算,加上传输块中的 CRC 校验和
CAD 和发布包 中等的 发布记录中存储的 SHA-256 清单
固件和更新 高的 发布版本使用签名和 SHA-256 校验,运行时检查使用 CRC 校验。
受监管记录 高的 带有审计跟踪的哈希链或签名,已验证
物流标识符和消息 中等的 GS1校验位、消息控制总计、业务规则验证
批量比较和去重 低的 xxHash 与匹配项进行全面比较

决策建议

  • 为每个数据对象(包括误差模型、载体、尺寸预算、使用寿命和所有者)保留决策记录。在每个设计阶段以及供应链或威胁发生变化时,都要审查这些记录。
  • 测试候选程序会注入与真实故障模式相匹配的错误:比特翻转、数字转置、截断和文件错误。测量检测率,而不是依赖理论。

25.实施指南

三条规则可以避免大部分麻烦。使用经过测试的库或单一共享实现。在受控文档中固定每个参数。在首次生产运行之前,使用已发布的向量进行测试。附录 B 包含下文使用的向量。

Python 中的 GS1 校验位

def gs1_check_digit(body: str) -> int:
    if not body.isdigit():
        raise ValueError('digits only')
    total = sum(int(d) * (3 if i % 2 == 0 else 1)
                for i, d in enumerate(reversed(body)))
    return (10 - total % 10) % 10

def gs1_is_valid(full: str) -> bool:
    return (full.isdigit() and len(full) > 1
            and gs1_check_digit(full[:-1]) == int(full[-1]))

assert gs1_check_digit('400638133393') == 1
assert gs1_check_digit('34012345000000001') == 7
assert gs1_is_valid('4006381333931')

Excel中的GS1校验位

对于存储在单元格 A1 中的 12 位 GTIN-13 文本,此公式返回校验位。

=MOD(10-MOD(SUMPRODUCT(--MID(A1,{1,3,5,7,9,11},1))+3*SUMPRODUCT(--MID(A1,{2,4,6,8,10,12},1)),10),10)

标识符应以文本形式存储,切勿以数字形式存储。Excel 仅保留数字的 15 位有效数字,因此,如果将 18 位 SSCC 存储为数字,则会丢失最后几位数字。此外,它还会丢弃前导零,这会导致 GTIN-12 和 GTIN-8 值损坏。

SQL 中的 GS1 校验位

此查询使用了递归公共表表达式。已在 SQLite 中测试,对于上述 GTIN-13 正文返回 1,对于 SSCC 正文返回 7。请根据您的数据库方言调整语法。

WITH RECURSIVE d(i, n) AS ( SELECT 1, LENGTH('400638133393') UNION ALL SELECT i + 1, n FROM d WHERE i < n ) SELECT (10 - (SUM(CAST(SUBSTR('400638133393', i, 1) AS INTEGER) * CASE WHEN (n - i) % 2 = 0 THEN 3 ELSE 1 END) % 10)) % 10 AS check_digit FROM d;

PLC结构化文本中的GS1校验位

此函数遵循 IEC 61131-3 字符串函数标准。不同厂商在字符串转换名称等细节上可能存在差异,因此请在您自己的运行时环境中,针对附录 B 中的向量运行此函数。

函数 GS1_CheckDigit : INT VAR_INPUT sBody : STRING(17); END_VAR VAR i, n, iSum : INT; END_VAR n := LEN(sBody); iSum := 0; FOR i := 1 TO n DO IF ((n - i) MOD 2) = 0 THEN iSum := iSum + 3 * STRING_TO_INT(MID(sBody, 1, i)); ELSE iSum := iSum + STRING_TO_INT(MID(sBody, 1, i)); END_IF END_FOR GS1_CheckDigit := (10 - (iSum MOD 10)) MOD 10;

C 中的 CRC-32

位运算版本最短,也最易于审核。它已针对 ASCII 字符串 123456789 的向量进行了编译和测试。生产代码通常会切换到表格或硬件外设。

uint32_t crc32_update(uint32_t crc, const uint8_t *data, size_t len) { while (len--) { crc ^= *data++; for (int bit = 0; bit > 1) ^ (0xEDB88320u & (0u - (crc & 1u))); } } return crc; } /* 从 0xFFFFFFFF 开始,处理每个数据块,最后进行异或运算: crc = 0xFFFFFFFFu; crc = crc32_update(crc, buffer, length); crc ^= 0xFFFFFFFFu; ASCII 字符串 123456789 的结果为 0xCBF43926。 */

Python 中的 Modbus CRC-16 和流式 SHA-256

import hashlib

def crc16_modbus(data: bytes) -> int:
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            crc = (crc >> 1) ^ 0xA001 if crc & 1 else crc >> 1
    return crc

frame = bytes([0x01, 0x03, 0x00, 0x00, 0x00, 0x0A])
crc = crc16_modbus(frame)
wire = frame + bytes([crc & 0xFF, crc >> 8])   # low byte first

def sha256_file(path, chunk=1024 * 1024):
    h = hashlib.sha256()
    with open(path, 'rb') as f:
        for block in iter(lambda: f.read(chunk), b''):
            h.update(block)
    return h.hexdigest()

可变线存储着 01 03 00 00 00 0A C5 CD。流式函数分块读取文件,因此它能够以恒定的内存占用处理任意大小的图像。要尝试十六进制和 ASCII 字符串的校验和,请尝试以下操作。 十六进制和ASCII校验和计算器 在这个网站上。

校验和实现中的陷阱

陷阱 会发生什么 对策
字节顺序 Modbus 首先发送 CRC 校验低字节。字节顺序颠倒会导致每一帧都失败。 与从真实设备捕获的帧进行验证
初始值和反射 不同的参数集会产生一个看似合理但实际上是错误的CRC校验值。 修复接口规范中的所有六个 CRC 参数
文本与字节 行尾符、文本编码和尾随空格会改变摘要。 对存储的确切字节进行哈希处理,如果涉及文本,则定义规范化方法。
标识符的数值类型 浮点数中,前导零会消失,长数字会丢失位数。 将标识符以字符串形式存储在 Excel、CSV、数据库和 PLC 数据中
将整个文件加载到内存中 大型图像会消耗工作站的内存。 分块哈希
未定义的覆盖范围 摘要包含序列号等易变字段 明确具体区域,并排除或修补单元特定数据。
未经核实的库 一个静默的漏洞通过了所有你没写过的测试。 在构建流程中运行已发布的向量

26. 按角色划分的最佳实践清单

研发与设计

  • 从编号概念的第一个草案开始,在每个标识符方案中定义校验位和固定格式。
  • 给固件映像添加一个包含魔数、版本、长度、CRC 和签名的头部,并指定失败时的行为。
  • 记录接口规范中的 CRC 参数和多项式的计算理由。
  • 将已发布软件包的哈希值存储在发布记录和供应商传输文件中。
  • 安全分析中应包括内存和通信检查的诊断覆盖范围。

制造业

  • 运行扫描站和闪光站作为设有硬停止的闸门,并记录每次绕过。
  • 通过回读或设备报告摘要验证固件,并按序列号记录结果。
  • 将当前配方与每批次开始时的黄金哈希进行比较。
  • 每个班次都用已知不合格的样品对每次检查结果进行复核。
  • 保持验证器和扫描仪的校准和维护。
故障模式及异常检测
实施健全的质量保证流程,通过系统的测试和验证来提高产品可靠性。

质量

  • 根据挑战性测试结果和绕过记录等证据,对 FMEA 检测结果进行评级。
  • 验证检查结果,并将测试向量保留在验证文件中。
  • 进行模拟召回,并跟踪受影响设备名单的更新时间。
  • 绘制扫描失败率和验证等级图表,并根据趋势采取行动。
  • 自动将供应商证书与采购订单和收货数据进行匹配。
  •  

后勤

  • 每次拣货时都要扫描以确认位置、物品和容器。
  • 在收到时验证标识符和消息,并跟踪每个交易伙伴的拒绝率。
  • 集中分配 SSCC 并强制唯一性。
  • 在贴标签时核实标签,对于较长或复杂的供应链,使用二维符号。
  • 以每百万行缺陷数衡量指标。

信息技术和运营技术

  • 提供一个共享的校验位、CRC 和哈希库或服务,并发布测试向量。
  • 对固件和构建版本进行签名,将私钥保存在硬件安全模块中,并制定轮换和撤销计划。
  • 同步时钟并将记录保存在仅追加存储或具有外部锚定的哈希链中。
  • 在所有涉及标识符的系统中,都将标识符存储为字符串。
  • 规划算法的灵活性,因为 SHA-1 即将被淘汰,后量子签名即将到来。

给工程师的两条专业建议

  • 为每项检查指定一名负责人。该负责人负责维护算法、参数、测试向量和响应计划。
  • 将每一项检查纳入控制计划和过程 FMEA,并按照与测量系统相同的计划进行审核。
校验和
集成强大的校验和及受控流程可提高产品生命周期的完整性和可靠性。

关于校验和及类似问题的结论

校验和体积小、历史悠久且易于理解。它们在实体产品工作中的价值在于,在产品生命周期的正确节点应用正确的校验和,并将校验过程视为一个有证据支持的受控过程。

在人员和扫描仪处理标识符的地方使用校验位。对帧、块和图像使用 CRC 校验,并使用适合消息长度的多项式。对文件和记录使用 SHA-256 校验,并在存在故意篡改风险的地方使用签名或密钥。在标记和存储器可能损坏的地方添加纠错机制。

然后,用证据完善整个流程。质疑各项检查,校准验证人员,记录结果并审查数据。无人检验的检查只是一种假设。

 

今天交接班的飞行员每次逃脱成本最高,且未进行检查。测量交接班前后的逃脱率,并以此结果为下次交接班提供依据。

将每一项检查都视为受控项目,并赋予其规范、负责人、测试向量和挑战频率。缺少这些要素的检查将会失效。

 

常问问题

为什么通过 CRC-32 校验不能证明固件镜像就是预期版本?

CRC校验只能检测意外损坏,任何人都可以伪造一个CRC校验值相同的镜像。因此,请使用通过其他渠道收到的发布记录验证SHA-256摘要,并在存在人为更改风险的地方添加签名。

哪些错误会遗漏 GS1 mod-10 校验位?

该检查可以检测出所有个位数错误,但会漏掉相邻数字相差 5 的换位,这大约占不同数字互换总数的 11%。此外,有效数字本身并不能证明分配方式,因此应将主数据验证与算术检查放在一起。

我应该如何评价基于校验和的控制措施的FMEA检测结果?

评估证据而非算法:一个经过已知不良样本挑战的自动硬性停止机制,其评分远高于操作员可以绕过或从未受到挑战的检查。量化逃逸概率,保留挑战日志和绕过登记表,并应用 AIAG-VDA 2019 操作优先级逻辑。

如何为我的接口选择 CRC 多项式?

保证的汉明距离取决于多项式和消息长度,因此首先要确定长度范围。Koopman 指出,IEEE 802.3 CRC-32 在最大长度的以太网帧上只能达到 4 的汉明距离,而其他多项式可以达到 6,因此应从已发表的详尽搜索结果中选取多项式。

为什么两个都声称使用 CRC-16 的系统在每一帧的校验和上都存在差异?

该名称并未定义算法,因为宽度、多项式、初始值、输入反射、输出反射和最终异或运算都必须匹配。将这六个参数写入接口规范,并使用 Reveng 目录中的 ASCII 字符串 123456789 的校验值测试两端。

什么情况下,行尾的 SHA-256 比对仍然不能证明闪存版本正确?

对源文件进行哈希处理,或者仅仅依赖编程器的成功标志,并不能揭示设备的真实内容。应该通过单独的路径从设备读取该区域,包含选项字节、熔丝位和锁定位,单独处理特定于设备的数据,例如序列号、MAC 地址和校准信息,并按序列号记录结果。

哈希链足以防止批量记录被篡改吗?

只有当链的最新哈希值锚定在保存日志的系统之外时,该链才能证明其顺序性和完整性。应使用定期签名、RFC 3161 可信时间戳,或将哈希值发送给客户或审计员,否则任何拥有写入权限的人都可以重新计算整个链。

现场总线CRC校验在什么情况下会停止保护我的信号?

网关或网桥会重新计算下一个数据段的 CRC 校验码,因此两跳之间内存中的数据损坏不会被检测到。对于与安全相关的信号和设定值,应添加端到端 CRC 校验,并在源端生成计数器,在接收端进行验证。

非加密哈希用于库存管理和去重需要多少比特?

生日界限决定了哈希值的碰撞概率:一个包含 10 万条记录的 32 位哈希值的碰撞概率约为 69%,而一个包含 100 万条记录的 64 位哈希值的碰撞概率则接近 2.7/1 亿。建议使用 64 位或更长的哈希值,并在每次因匹配而做出决定时,比较完整的数据。

在测量系统分析中,我应该如何处理条形码扫描器和验证器?

使用符合性标准测试卡校准验证器,将 ISO/IEC 15416、15415 或 29158 标准应用于符号类型,并对操作员、扫描仪和参考标准进行属性一致性分析。成功读取的符号仅表明其能够读取,因此应跟踪等级分布和未使用的纠错能力,以此作为漂移指标。

我是否需要在受监管的环境下验证检查功能本身?

是的,因为该检查是计算机系统的一部分,符合 GAMP 5 原则、21 CFR 第 11 部分或欧盟附件 11。根据风险比例规划 IQ、OQ 和 PQ,将测试向量和阴性测试存储在验证文件中,并在扫描仪固件、打印机、库或操作系统发生任何更改后重新运行它们。

对于运行周期为 10 到 20 年的产品,我该如何规划算法退役?

维护一个算法注册表,记录审查日期,例如 NIST 计划在 2030 年 12 月 31 日之前淘汰 SHA-1。设计引导加载程序和更新通道,以便在现场更换算法和密钥,因为《网络弹性法案》规定,从 2027 年 12 月 11 日起,签名和验证的更新必须符合相关规定。

 

附录

附录A:测试向量

所有数值均通过第25章所示代码或参考工具计算或验证。所有输入字符串均以ASCII文本格式提供。

功能 输入 预期结果
CRC-32 123456789 0xCBF43926
CRC-32C 123456789 0xE3069283
CRC-16/MODBUS 123456789 0x4B37
CRC-16/CCITT-FALSE 123456789 0x29B1
CRC-8(多项式 0x07) 123456789 0xF4
SHA-256 123456789 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
Modbus RTU 帧 01 03 00 00 00 0A CRC 0xCDC5,以 C5 CD 形式发送
CRC-3 教学示例 消息 1101,生成器 1011 剩余 001
GTIN-13校验位 400638133393 1,完整密钥 4006381333931
GTIN-12 校验位 03600029145 2,完整密钥 036000291452
GTIN-14 校验位 1540014128876 3,完整密钥 15400141288763
SSCC校验位 34012345000000001 7,完整密钥 340123450000000017
卢恩校验位 7992739871 3,完整号码 79927398713
车辆识别码校验位(北美规则) 11111111111111111 1
车辆识别码校验位(北美规则) 1HGBH41JXMN109186 X 位于第 9 位

附录 B:标准和参考文献

本文所用网络资源(截至2026年11月核实):

所引用的标准和出版物按名称列出,可从发布机构获取:

  • RFC 1071(互联网校验和)、RFC 2104(HMAC)、RFC 3161(时间戳协议)
  • FIPS 180-4(SHA-1 和 SHA-2)、FIPS 202(SHA-3)、NIST SP 800-38B(CMAC)
  • ISO/IEC 7064(字符系统检查)、ISO 6346(容器代码)、ISO/IEC 29158(直接零件标记质量)
  • ISO 9001、IATF 16949、AS9100、ISO 13485、ISO 26262、IEC 61508、IEC 62304、IEC 62443
  • AIAG 和 VDA FMEA 手册,第一版,2019 年
  • 21 CFR 第 11 部分、欧盟 GMP 附录 11、GAMP 5
  • Maxino 和 Koopman,《嵌入式控制网络中校验和的有效性》,IEEE 可靠与安全计算汇刊,2009 年
  • 欧盟第 2024/2847 号条例(网络弹性法案)、欧盟第 2024/1781 号条例(可持续产品生态设计)、欧盟第 2023/1542 号条例(电池)、欧盟第 2022/2555 号指令(NIS2)

涵盖的主题: 校验和、数据完整性、产品生命周期、条形码扫描错误、质量工具、校验位、CRC、SHA-256、CAD 文件、物料清单、工单、发货记录、GS1 校验位、纠错、固件映像、签名、输入代码和数字产品护照。

历史背景

1959-11
1960
1960
1960
1960
1960
1960
1958
1960
1960
1960
1960
1960
1960
1960

(如果日期未知或不相关,例如“流体力学”,则提供其显著出现的近似估计)

第十年 周年纪念日

只有注册会员才能免费获取完整尺寸的图片和下载内容。

> 登录 <