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条)