可搜索加密SWP方案实现

可搜索加密SWP方案实现


2024年5月2日发(作者:c盘格式化了u盘装不了系统)

可搜索加密SWP方案实现

SWP方案来自于等人的,为一种对称可加密方案。

实现代码已经在,能力有限,代码可能很丑。

• 总体思路

– 将数据划分成一个个的单词,对其进行对称加密并设置陷门后上传。

查询时也会对关键词进行加密处理,防止关键词内容的泄露。整个实

现过程由几个主要步骤组成(不分先后顺序):DES加密与解密,

伪随机序列的生成,带密钥的Hash函数。

• DES加密解密:在openssl库函数的基础上实现。

• 伪随机序列:使用C++标准库中伪随机函数来近似生成。

• 带密钥的Hash函数:在openssl库函数的基础上实现。

加密过程

– 将数据划分为一个个的单词,记为W_i(默认长度不超过20个字符,

长度不足则零填充补齐)。

– 使用ECB模式的DES加密对其进行加密处理得到X_i(长度为24个

字符,由openssl库函数实现),其密钥表示为ecb_key(长度为

24个字符,保密)。 DES_{ecb_key}(W_i)=X_i

将X_i划分为左右两部分,L_i(长度为8个字符)和R_i(长度为16

个字符)。 X_i=

使用带密钥的hash函数H1对进L_i行加密,以hash_key为固定

密钥(长度为24个字符,保密),得到新的密钥k_i(长度为16个

字符)。 {H_1}_{hash_key}(L_i)=k_i

使用伪随机函数Random,输入随机种子seed,来得到伪随机序列

S_i(长度为8个字符,本实现中随机种子为键值对的键

值,该伪随机序列的生成过程保密)。 Random(seed)=S_i

使用带密钥的hash函数H2对S_i进行加密,以k_i为密钥,得到

FK_i(长度为16个字符,本实现中该步骤与前面的步骤使用了同一

个hash函数,但密钥不同)。 {H_2}_{k_i}(S_i)=Fk_i

将S_i与拼FK_i接得到T_i(正好是24个字符的长度)。 T_i=

Fk_i>

最终将T_i与X_i异或得到最后的密文C_i,上传至不可信服务

器。 C_i=T_ioplus X_i

• 检索过程

– 客户端需要把要查询关键词对应的X_i和k_i告知服务器来进行检索,

生成方式与加密过程相同。

服务器得到X_i和k_i后,先计算C_i和X_i异或得到

T_i。 T_i=X_ioplus C_i

将T_i划分为T_iL和T_iR。 T_i=

使用带密钥的hash函数H2对T_iL进行加密,以k_i为密钥,将结

果与T_iR比较,相同则检索成功。 if ( {H_2}_{k_i}(T_iL) == T_iR)

return TRUE ;

• 解密过程

– 先使用伪随机函数Random,输入随机种子seed,来得到伪随机序

列S_i。

将S_i划分为S_iL和S_iR,将C_i划分为C_iL和C_iR。 S_i=

S_iR>C_i=

S_iL和C_iL异或得到L_i。 L_i=S_iLoplus C_iL

使用带密钥的hash函数H1对进L_i行加密,以hash_key为密钥,

得到新的密钥k_i。

使用带密钥的hash函数H2对S_i进行加密,以k_i为密钥,得到

FK_i。

将FK_i与C_iR异或得到R_i。 R_i=FK_ioplus C_iR

拼接L_i与R_i得到X_i,使用DES解密即可。 X_i=


发布者:admin,转转请注明出处:http://www.yc00.com/xitong/1714627448a2483520.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信