news 2026/4/18 10:04:18

论文复现:基于盲存储的动态可搜索对称加密技术》- 操作说明与代码详细注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
论文复现:基于盲存储的动态可搜索对称加密技术》- 操作说明与代码详细注解

动态可搜索对称加密 论文复现《Dynamic Searchable Encryption via Blind Storage》 动态可搜索对称加密运行客户在服务器上存储加密文档的动态集合 并在这些加密文档上快速执行关键字搜索 #包含操作说明 代码详细注解

把数据隐私和查询效率放在一个系统里折腾,总得整点有意思的活。今天咱们来盘一个既能动态更新又能快速搜索的加密方案,基于《Blind Storage》这篇论文的实现思路。先扔个代码片段热热身:

class BlindStorage: def __init__(self, key_size=256): self.index = defaultdict(list) # 关键词 -> [加密文档ID列表] self.doc_store = {} # 文档ID -> 密文 self.key = os.urandom(key_size//8) # AES密钥生成 def _pseudo_random_func(self, keyword): hmac_obj = HMAC.new(self.key, digestmod=sha256) hmac_obj.update(keyword.encode()) return hmac_obj.hexdigest()

这段看着像普通存储结构?注意index里存的是HMAC处理后的关键词指纹。当我们要添加包含"urgent"关键词的文档时,系统不会直接存这个单词,而是存储它的密码学指纹——相当于给每个关键词戴了面具。

动态添加文档的操作挺有意思:

def add_document(self, doc_id, keywords, content): # 加密内容 cipher = AES.new(self.key, AES.MODE_CTR) ciphertext = cipher.encrypt(pad(content.encode(), AES.block_size)) # 更新关键词索引 for kw in set(keywords): token = self._pseudo_random_func(kw) self.index[token].append(doc_id) # 存储加密文档 nonce = cipher.nonce # 保留随机数用于解密 self.doc_store[doc_id] = (nonce, ciphertext)

这里有两个骚操作:1)用CTR模式加密避免相同内容产生相同密文;2)关键词去重后生成索引。注意看index结构,攻击者就算拿到数据库,也只能看到一堆随机字符串对应文档ID,根本不知道原始关键词是什么。

搜索过程更带劲:

def search(self, keyword): search_token = self._pseudo_random_func(keyword) matched_ids = self.index.get(search_token, []) results = [] for doc_id in matched_ids: nonce, ciphertext = self.doc_store[doc_id] cipher = AES.new(self.key, AES.MODE_CTR, nonce=nonce) plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size) results.append(plaintext.decode()) return results

整个过程就像拿着特制磁卡开快递柜——服务器只能验证搜索令牌是否匹配,但完全不知道你在找什么关键词。这种设计巧妙避开了传统方案需要遍历整个数据库的问题,时间复杂度直接降到O(1)。

实际跑起来的时候要注意几个坑:

  1. 密钥管理得用硬件安全模块(HSM)或者KMS服务
  2. 文档ID建议用UUID4生成避免规律性
  3. 定期刷新密钥时需要重新加密所有文档(可用密钥派生解决)

测试时用pytest写个简单用例:

def test_dynamic_update(): storage = BlindStorage() doc_id = uuid4().hex # 添加包含两个关键词的文档 storage.add_document(doc_id, ["project", "secret"], "设计图纸V3") # 正常搜索 assert len(storage.search("project")) == 1 # 删除操作(论文中的核心动态特性) storage.delete_document(doc_id) assert len(storage.search("project")) == 0

删除功能实现有个精妙之处:直接在索引里移除对应文档ID,而不用动密文存储。这种惰性删除策略既能保证实时性,又避免了全量扫描的开销。

最后说个优化方向:实际部署时可以给index加布隆过滤器,把常见误搜请求提前拦截。或者用LRU缓存高频搜索词的结果,毕竟每次HMAC计算还是有点小贵的。代码仓库里已经放了带注释的完整实现,需要自取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:42:40

从飞行控制到结构监测:石英加速度计如何成为航空航天中的可靠之眼

在航天航空这一对可靠性与精度要求极严的领域,每一个传感器都承载着飞行安全与任务成功的重任。ER-QA-03A高性能石英加速度计,以其基于石英挠性结构的独特设计、高稳定性与强环境适应性,成为飞行器姿态控制、结构健康监测与导航系统中不可或缺…

作者头像 李华
网站建设 2026/4/8 8:19:15

Z-Image-Turbo性能调优:基于预配置环境快速实验不同推理参数

Z-Image-Turbo性能调优:基于预配置环境快速实验不同推理参数 作为一名AI工程师,你是否经常遇到这样的困扰:在优化Z-Image-Turbo模型的推理速度和质量平衡时,每次调整参数都需要重新运行整个流程,效率低下?本…

作者头像 李华
网站建设 2026/4/18 2:44:27

无障碍设计:视障者友好的AI图像描述生成系统搭建

无障碍设计:视障者友好的AI图像描述生成系统搭建 对于公益组织开发人员来说,创建图片转语音描述服务是一个非常有意义的项目,但往往面临AI基础设施不足的挑战。本文将介绍如何利用预置镜像快速搭建一个视障者友好的AI图像描述生成系统&#x…

作者头像 李华
网站建设 2026/3/29 2:09:32

MinIO实践之iServer 发布云存储中的地图瓦片

作者:laughterhxy前言在 SuperMap iDesktopX 已将地图瓦片成功生成至 MinIO 对象存储后,如何对外提供在线地图服务?本文详解如何通过 SuperMap iServer直接发布 MinIO(S3 兼容)中的地图瓦片。一、前提条件1.MinIO 服务…

作者头像 李华
网站建设 2026/4/18 9:42:55

炎症因子平衡、信号通路与内耳疾病病理机制研究进展

一、炎症反应中细胞因子的动态平衡调控机制 活化的炎性细胞在免疫应答过程中可同时合成并释放促炎与抗炎两类细胞因子。细胞因子是一类具有广泛生物活性的小分子蛋白质或多肽,根据其在炎症过程中的功能差异,主要分为促炎细胞因子与抗炎细胞因子。促炎细…

作者头像 李华
网站建设 2026/4/17 10:15:32

智能包装设计:按需生成产品外观的B2B解决方案

智能包装设计:按需生成产品外观的B2B解决方案实战指南 对于包装印刷企业而言,小批量定制订单的设计效率直接影响客户满意度。传统设计流程需要人工反复修改效果图,耗时且成本高。本文将介绍如何通过AI技术实现智能包装设计,快速生…

作者头像 李华