0 引 言
1 蔬菜供应链物联网架构
1.1 技术简介
1.1.1 物联网技术
1.1.2 区块链技术
1.1.3 隐私加密技术
1.2 设备总体架构
1.3 设备绑定与准入验证机制
1.4 数据处理与上链流程
2 关键模型与方法设计
2.1 数据隐私性分析
表 1 蔬菜产中与产后物联网设备采集信息Table 1 Information collection via IoT devices during and post-vegetable production |
| 供应链阶段 | 物联网设备 | 公开信息 | 隐私信息 |
|---|---|---|---|
| 产中 | 四情物联设备 | 蔬菜货物溯源ID、土壤湿度、气候数据、虫害发生情况 | 农户的具体位置、个人联系方式、四情物联设备ID |
| 农残检测仪 | 蔬菜货物溯源ID、检测时间、检测结果 | 生产者的身份信息、具体的种植地点、农残检测值、农残检测仪识别ID | |
| 农事采集App | 蔬菜货物溯源ID、作物生长周期、施肥、灌溉的时间 | 农户的操作记录、个人农事安排、农事采集设备ID | |
| 产后 | 条码打印机 | 蔬菜货物溯源ID、产品的追溯码、生产日期 | 生产批次、生产者信息、条码打印机设备ID |
| 仓储检测 | 蔬菜货物溯源ID、仓储公司、仓库温湿度、产品存储量 | 仓库位置、管理人员信息、仓储传感器设备ID | |
| 物流检测 | 蔬菜货物溯源ID、运输路线、货物状态、运输公司信息 | 司机信息、运输公司内部数据、物流传感器设备ID | |
| 智能电子秤 | 蔬菜货物溯源ID、称重数据、计量时间 | 交易双方的信息、价格谈判数据、智能电子秤设备ID |
2.2 蔬菜供应链隐私数据加密方法
表2 PQ-ECIES加密步骤伪代码Table 2 Pseudocode for the encryption steps of PQ-ECIES |
| Algorithm 1: 加密步骤算法 |
|---|
| Input: PrivacyData, (ReceiverPublicKey, ReceiverKyberPublicKey) //隐私数据,数据接收者双重公钥 |
| Output: Complete ciphertext //完整密文 |
| 1: /*步骤1:生成发件人的临时密钥*/ |
| 2: SenderTemporaryPrivateKey ← Random() // 生成临时随机私钥 |
| 3: SenderTemporaryPublicKey ← SenderTemporaryPrivateKey × G // 计算椭圆曲线公钥 |
| 4: SenderTemporaryKyberPublicKey ← Kyber.KeyGen() // 生成kyber临时公钥 |
| 5: /* 步骤 2:计算共享密钥 */ |
| 6: EllipticCurveSharedSecret ← SenderTemporaryPrivateKey × ReceiverPublicKey // 椭圆曲线共享密钥 |
| 7: (KyberCiphertext, KyberSharedSecret) ← Kyber.Encapsulation(ReceiverKyberPublicKey) // Kyber 共享密钥 |
| 8: /*步骤 3:派生联合密钥 */ |
| 9: CombinedSecret ← SHA3-256(EllipticCurveSharedSecret ∥ KyberSharedSecret) // 合并共享密钥并哈希 |
| 10: EncryptionKey ← KDF(CombinedSecret, "ENC") // 密钥派生函数(Key Derivation Function, KDF()),AES-GCM 是 高级加密标准 (AES)的一种工作模式,全称是Galois/Counter Mode |
| 11: MessageAuthenticationKey ← KDF(CombinedSecret, "MAC") //派生消息认证码(Message Authentication Code,MAC)认证密钥 |
| 12: /* 步骤 4:加密隐私数据 */ |
| 13: Ciphertext ← AES-GCM-Encrypt(EncryptionKey, PrivacyData) // 使用 AES-GCM 加密数据 |
| 14: AuthenticationTag ← HMAC-SHA256(MessageAuthenticationKey, Ciphertext) //生成完整性认证标签, 基于散列的消息认证码-安全哈希算法(Hash-based Message Authentication Code-Secure Hash Algorithm,HMAC-SHA) |
| 15: /* 步骤 5:封装完整密文 */ |
| 16: CompleteCiphertext ← SenderTemporaryPublicKey ∥ SenderTemporaryKyberPublicKey ∥ |
| 17: KyberCiphertext ∥ Ciphertext ∥ AuthenticationTag // 拼接完整密文作为最终输出 |
表3 PQ-ECIES解密步骤伪代码Table 3 Pseudocode for the decryption steps of PQ-ECIES |
| Algorithm 2: 解密步骤算法 |
|---|
| Input: CompleteCiphertext, (ReceiverPrivateKey,ReceiverKyberPrivateKey) //完整密文,数据接收者双重私钥 |
| Output: Decryptedprivacydata // 隐私数据 |
| 1: /* 步骤 1:解析密文结构 */ |
| 2: [SenderTemporaryPublicKey, SenderTemporaryKyberPublicKey, |
| 3: KyberCiphertext, Ciphertext, AuthenticationTag] ← CompleteCiphertext // 拆分完整密文 |
| 4: /* 步骤 2:计算共享密钥 */ |
| 5: EllipticCurveSharedSecret ← ReceiverPrivateKey × SenderTemporaryPublicKey // ECC椭圆曲线共享密钥 |
| 6: KyberSharedSecret ← Kyber.Decapsulation(KyberCiphertext, ReceiverKyberPrivateKey) // Kyber 共享密钥 |
| 7: /* 步骤 3:重建联合密钥 */ |
| 8: CombinedSecret ← SHA3-256(EllipticCurveSharedSecret ∥ KyberSharedSecret) // 合并共享密钥并哈希 |
| 9: EncryptionKey ← KDF(CombinedSecret, "ENC") // 重建 AES-GCM 解密密钥 |
| 10: MessageAuthenticationKey ← KDF(CombinedSecret, "MAC") // 重建 MAC 认证密钥 |
| 11: /* 步骤 4:验证完整性 */ |
| 12: CalculatedTag ← HMAC-SHA256(MessageAuthenticationKey, Ciphertext) // 计算认证标签 |
| 13: if CalculatedTag ≠ AuthenticationTag then |
| 14: Reject the ciphertext // 验证失败,拒绝解密,数据已被篡改 |
| 15: end if |
| 16: /* 步骤 5:解密隐私数据 */ |
| 17: DecryptedPrivacyData ← AES-GCM-Decrypt(EncryptionKey, Ciphertext) // 还原原始隐私数据 |
2.3 蔬菜供应链防伪溯源模型
3 系统实现与测试分析
3.1 运行环境
表4 数据上链、加密、查询相关链码设计Table 4 Design of chaincode for data uploading, encryption, and query |
| 链码功能 | 方法名称 | 描述 | 输入 | 输出 |
|---|---|---|---|---|
| 物联网 数据上链 | UploadProductionData() | 将生产数据写入区块链 | 生产数据 | True/False |
| UploadProcessData() | 将加工数据写入区块链 | 加工数据 | True/False | |
| UploadStorageData() | 将储运数据写入区块链 | 储运数据 | True/False | |
| UploadSaleData() | 将销售数据写入区块链 | 销售数据 | True/False | |
| PQ-ECIES加密验证 | GenerateKey() | 生成非对称密钥 | 组织节点信息 | 公私钥对 |
| PublicKeyEncryption() | 公钥加密 | 供应链隐私数据 | True/False | |
| PrivateKeyVerification() | 私钥验证 | PQ-ECIES加密后数据 | True/False | |
| 数据查询 | QueryPublicData() | 查询公开数据 | 公开数据ID | 对应公开数据 |
| QueryPrivacyData() | 查询隐私数据 | 隐私数据ID | 对应隐私数据 |
表5 溯源信息上链智能合约算法Table 5 Traceability information on chain smart contract algorithm |
| Algorithm 3: 溯源信息上链智能合约算法 |
|---|
| Input: 上传蔬菜货物溯源ID、土壤湿度、气候数据、虫害发生情况等产前物联网数据信息 |
| Output: True/False |
| 1: function UploadProductionData() //区块链中的产前物联网设备对应peer节点发起invoke上链请求 |
| 2: if len(args) then //判断请求中的数组长度是否符合规定长度标准 |
| 3: return shim.Error //数组长度不符合标准,上链失败,返回具体错误原因 |
| 4: end if |
| 5: uploadData ← preconditioning//将参数填入数据结构中 |
| 6: m ← json.M arshal(uploadData)//将对象序列化成数组存储 |
| 7: err ← stub.P utState(uploadData.ID, m)//根据ID,创建索引 |
| 8: err ← stub.P utState(uploadData.Name, m)//根据Name,创建索引 |
| 9: if err then //判断上链请求是否成功 |
| 10: return shim.Error //上链失败,返回具体错误原因 |
| 11: end if |
| 12: end function |
3.2 信息采集准确性测试
3.3 追溯数据链上性能分析
3.4 蔬菜供应链PQ-ECIES性能测试
表6 常见隐私保护算法与PQ-ECIES对比测试Table 6 Comparative testing of common privacy protection algorithms and PQ-ECIES |
| 测试项 | 攻击算法 | 目标算法 | 量子比特需求/个 | 模拟破解时间 | 破解概率/% |
|---|---|---|---|---|---|
| ECC密钥恢复 (secp256k1) | Shor算法 | 传统ECC | 4 096 | 2.1小时 | 98.7 |
| AES-256密钥搜索 | Grover算法 | 传统AES | 1 024 | 6.3小时 | 95.2 |
| Kyber-768密钥恢复 | 格基攻击 | PQ-ECIES | >1 000 000 | >30年 | <0.1 |





