可验证算法在招投标领域的专家“盲抽”中的标段识别码加密应用研究

摘要

在招投标过程中,标段(包)识别码的安全性至关重要。本文提出了一种基于可验证算法的标段识别码加密方法,以确保其在专家“盲抽”过程中的保密性和可信性。通过对不同表的标段识别码进行全量加密,并通过匹配验证其一致性,有效防范数据库层级的泄密和内鬼行为。本文详细描述了该算法的设计与实现,并探讨了其在实际应用中的效果和优势。本文纯技术层面,假设数据库保密工作未严格按照数据隔离的标准做的规范性防范措施。

关键词

招投标,标段识别码,加密算法,盲抽,数据安全,MD5

1. 引言

在招投标过程中,专家评审是决定中标单位的关键环节。很多地方试点专家“盲抽”和技术标“盲评”,极大的规避了招投标中串标的风险,原理上杜绝了串标的可能,现实中可能会因为管理或者网络安全等方面的因素形同虚设,本文就专家盲评在具体实施可能出现的风险给出解决方案。

2 专家盲抽风险

“专家盲抽”通常是在评审过程中,为了确保公平性和随机性,对评审专家进行随机抽取的过程。且要保证专家在评审前和评审时并不知道自己评审的项目是什么。本文只针对双盲中的专家盲抽进行阐述。现有系统基本上大多省份都已经做到可以随机抽取专家,且在应用层面上不让专家知道自己评审的项目是什么。风险存在与数据层面,举例说明。以安徽省招投标数据规范中的规定。项目标段标识码在注册信息,招标文件,招标公告等数据表中皆有,且级联,在专家抽取表中也存在此标段,因为数据库层面可以轻易获知专家所评审的项目是哪一个。

数据库层面的保密需要专业级别的保密措施,强如中国移动,腾讯,阿里巴巴,各类银行系统等大型企业有安全的保密措施,也未必能做到百分百保密,大多数地市的招投标系统没有专业级别的数据隔离和保密措施(内在管理风险)。加上招投标系统因异地评标,需运行在互联网中(外来风险),且经常需要在省地市交换数据,数据级别的数据泄露的可能性风险极大。因此为了一劳永逸,设计如下加密算法。

3 解决措施。

设计思路,数据级别,招标信息发布系统和 评标系统,专家抽取系统的标段识别码 ,如一致,很容易被人筛选出关联关系,所以只要通过算法对专家抽取系统的标段识别码进行加密,让不同数据表和系统中的标段识别码不一致,就可以杜彻底杜绝外在风险。而算法的保密性和周期性密钥的变更可以彻底杜绝内在风险。假设有三个系统,分别为 招标系统,专家系统,评标系统。

这三个系统分别按顺序有三个表格如下, 项目标段表, 专家抽取表,评标表

(我直接把Bidding Deadline投标截止时间放在各个表中,简化设计,现实中可能会存于其他关联表中,其他均采用此种简化设计,其他字段与算法无关省略)

 以前系统设计 三个表中的关系是 专家抽取表和评标文件表 中的section对应项目标段标的ID。 如明文,在数据级别中即可被人轻易关联,失去盲抽盲评的效果。

重新设计,项目标段表中增加一个section_id 和ID的区别在于,ID是项目标段在整个系统中和其他表做关联。section只和评标系统中的评标表和 专家抽取系统中的抽取表做隐性关联。

设计隐性关联,让其中的字段在数据级别毫无关联,但是可以通过算法建立关联。

设计不可逆非加密算法对 项目标段表 中的ID进行加密后,存储于专家抽取表和评标文件表。专家抽取表和评标文件表中的投标截取时间存储一个

4 可验证算法设计

4.1 加密算法

设计一个算法进行不可逆加密,选择最为简单常用的md5+key算法。或者其他方法均可,要求不可逆算法。

算法表述为function 加密算法(项目标段表:ID,key )key采用一个10位以上复杂密码。

设计3个KEY(key1,key2,key3)

采用不同KEY加密得到的密文存入不同系统不同的表中的sectionID中。

加密算法(项目标段表:ID,key1)--》项目标段表.section_Id(直接同系统写入)

加密算法(项目标段表:ID,key2)--》专家抽取表.section_Id(远程推送)

加密算法(项目标段表:ID,key3)--》评标表.section_Id(远程推送)

注:加密算法(项目标段表:ID,key2) 加密算法(项目标段表:ID,key3)在招标系统中,计算出来,不保存。只做推送用。

专家抽取表.section_Id和评标表.section_Id的数值由 项目标段表所在的系统 经由算法得出。没有直接关联,除非调用项目标段表

  一个python实现实例

  

import hashlib

def md5_encrypt(plaintext, password):

    if len(password) != 10 or not any(c.islower() for c in password) or not any(c.isupper() for c in password):

        raise ValueError("Password must be 10 characters long with both uppercase and lowercase letters.")

    

    # 将明文与密码结合起来

    combined_text = plaintext + password

    

    # 计算 MD5 散列值

    md5_hash = hashlib.md5(combined_text.encode()).hexdigest()

    

    return md5_hash

# 示例使用

plaintext = "HelloWorld"

password = "Abcdef1234"  # 10 位包含大小写字母的密码

ciphertext = md5_encrypt(plaintext, password)

print("明文:", plaintext)print("密码:", password)print("密文:", ciphertext)

压力测试

#压力测试 100 万次

start_time = time.time()

for _ in range(1000000):

md5_encrypt(plaintext, password)

end_time = time.time()

elapsed_time = end_time - start_time

print(f"100万次加密操作的耗时: 0.0617 秒")

压力测试100万次耗时 4.30微秒 (服务器)

 0.8868439197540283(i7-14900) 对性能影响很小。

4.2 隐性关联建立。

设计专家系统根据SECTION_ID匹配 招标系统中 项目标段ID的方法。

设计方法 得到招标系统标段ID方法(专家系统::标段识别码,投标截止时间)

(现有制度改进可以和算法匹配的地方:投标截止日期 为了增加混淆性, 如果从制度上实现,评标室设置所有专家报道时间为早于每天所有标评标时间的一个时间点。就可以增加保密性。)

根据截止时间把所有当前时间下 该招标系统中 项目标段表 ID 筛选出来 。对所有ID用KEY2依次进行加密算法。得到的值和专家系统ID 相同的,返回。

 示例 KEY 1=”Abc1234567” KEY 2=”Efg1234567” KEY 3=”Hij1234567”

 项目标段表

 ID

SectionID

93839665-0daf-404a-b2cb-7ff548e84c77

8f9c133404ec47b9646ed32054cc24e9

46c08c45-4a5d-4e04-9cf0-cfadf75ec0d1

818eb8af05bc0ad63914e0d858768c06

60d7170a-8a91-4f2c-b7e5-6b545919c01f

4ef01b020fc605d43dc5f64cfc4e386b

推送 专家抽取表内容为,

 ID

SectionID

。。自己定义唯一标识码

06f8904d1c8acd4919ea76635045746a

。。

57b13ac2daf0f428bc87d5ebd74ead52

。。

ef90df3d44745fcf96cdb27e45514f2f

评标表

 ID

SectionID

。。自己定义唯一标识码

1274b99327a2745516cd1b713a488a2d

。。

642233c4cd4a0baf34bef90ebb658037

。。

c26805631ff49c715e64708db2e03afd

  得到招标系统标段ID方法(“06f8904d1c8acd4919ea76635045746a”,“2024-01-01 09:00:00”)此方法返回”93839665-0daf-404a-b2cb-7ff548e84c77”

  具体算法过程我用文字表述:

1 根据截止日期在项目标段表筛选出所有项目标段表的ID数组 (得到ids= ["93839665-0daf-404a-b2cb-7ff548e84c77","46c08c45-4a5d-4e04-9cf0-cfadf75ec0d1","60d7170a-8a91-4f2c-b7e5-6b545919c01f"])

2 遍历数组对 每个ID以KEY2方式进行加密。

加密算法(“93839665-0daf-404a-b2cb-7ff548e84c77”,key2) =”06f8904d1c8acd4919ea76635045746a”

加密算法(46c08c45-4a5d-4e04-9cf0-cfadf75ec0d1”,key2=”57b13ac2daf0f428bc87d5ebd74ead52”

加密算法(“60d7170a-8a91-4f2c-b7e5-6b545919c01f”,key2)=”ef90df3d44745fcf96cdb27e45514f2f”

06f8904d1c8acd4919ea76635045746a 匹配的是93839665-0daf-404a-b2cb-7ff548e84c77 ,所以返回的是 93839665-0daf-404a-b2cb-7ff548e84c77 

5. 结论

可验证算法在招投标领域的专家“盲抽”应用,有效提高了评审过程的公正性和透明度,避免了传统专家选择方法中的潜在问题。未来,可以进一步优化算法,结合大数据和人工智能技术,提高专家选择的智能化和精准度。另外在管理中可以通过定期更换KEY,按月更换KEY在表格中增加月份字段。改进算法,进行更好级别的安全保密措施。

参考文献

招投标管理办法.

评审专家选择及管理规范.

随机抽取算法及其应用研究.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值