mod (x, p) x≥0
lmod(x, p) =
- mod (|x|, p)
基于上述lmod运算,我们就可以实现以下算法:
预定义数据常量:p、q(这两个是选取的大素数),n = p*q,r是一个随机数。设Zp = {|x| | |x| < p}为明文空间,Zn = {|x| | |x| < n}为密文空间,则有:
加密算法:E(x) = lmod( x + sign(x)*p*r, n ) 解密算法:D(y) = lmod( y, p )
x<0
3.3.2.3 加法运算
1) 设有两个实数x1和x2,则进行加密后有y1 = E(x1),y2 = E(x2)。
2) 利用y1和y2相加后的结果 y1 + y2 = E(x1 + x2),通过解密算法即可得到x1和x2相加的结果。
3.3.2.4 减法运算
1) 设有两个实数x1和x2,则进行加密后有y1 = E(x1),y2 = E(x2)。
2) 利用y1和y2相加后的结果 y1 - y2 = E(x1 - x2),通过解密算法即可得到x1和x2相减的结果。
3.3.2.5 乘法(除法)运算
1) 设有实数x1和x2进行乘法同态,则在加密之前先进行整数化操作,即 X = Int(x) = x*10e (e是x小数点后的位数)。
2) 对整数化后的X1和X2进行加密操作得到Y1 = E(X1),Y2 = E(X2),并分别记录e1和e2。
3) 将Y1和Y2相乘得Y,利用解密算法解密得到 X = D(Y)*10 - (e1 + e2) ,这便是x1*x2后的结果。
3.3.2.6 除法运算
1) 设有实数x1和x2进行乘法同态,则在加密之前先进行整数化操作,即 X = Int(x) = x*10e (e是x小数点后的位数)。
2) 对整数化后的X1和X2进行加密操作得到Y1 = E(X1),Y2 = E(X2),并分别记录e1和e2。
3) 将Y1和Y2相除得Y,利用解密算法解密得到 X = D(Y)*10 e2 - e1 ,这便是x1*x2后的结果。
3.3.3 同态性验证
由于加法和减法,乘法和除法互为逆运算,在此我们只验证加法和乘法关系。
3.3.3.1 加法运算验证
1) 若x1≥0,x2≥0,则有:
E(x1) = lmod( x1, p )= ( x1 + p*r1 )mod p*q E(x2) = lmod( x2, p )= ( x2 + p*r2 )mod p*q
将加密结果相加得E(x1) + E(x2) = [ x1 + x2 + p*( r1 + r2 ) ] mod p*q,解密上述结果得 D[ E(x1) + E(x2) ] = lmod( E(x1) + E(x2),p ) = ( [ x1 + x2 + p*( r1 + r2 ) ] mod p*q ) mod p = x1 + x2。
2) 若x1≥0,x2<0,则有:
E(x1) = lmod( x1, p )= ( x1 + p*r1 )mod p*q E(x2) = lmod( x2, p )= - ( p*r2 - x2 )mod p*q
将加密结果相加得E(x1) + E(x2) = [ x1 + x2 + p*( r1 - r2 ) ] mod p*q,解密上述结果得 D[ E(x1) + E(x2) ] = lmod( E(x1) + E(x2),p ) = ( [ x1 + x2 + p*( r1 - r2 ) ] mod p*q ) mod p = x1 + x2。
3) 若x1<0,x2<0,则有:
E(x1) = lmod( x1, p )= - ( p*r1 - x1 )mod p*q E(x2) = lmod( x2, p )= - ( p*r2 - x2 )mod p*q
将加密结果相加得E(x1) + E(x2) = [ x1 + x2 - p*( r1 + r2 ) ] mod p*q,解密上述结果得 D[ E(x1) + E(x2) ] = lmod( E(x1) + E(x2),p ) = ( [ x1 + x2 - p*( r1 + r2 ) ] mod p*q ) mod p = x1 + x2。
综上,加法同态已验证。 3.3.3.2 乘法运算验证 1) 若x1≥0,x2≥0,则有:
E(x1) = lmod( x1, p )= ( x1 + p*r1 )mod p*q E(x2) = lmod( x2, p )= ( x2 + p*r2 )mod p*q
将加密结果相乘得E(x1) * E(x2) = [x1*x2 + p( x1*r2 + x2*r1 + p*r1*r2 )] mod p*q,解密上述结果得 D[ E(x1) * E(x2) ] = lmod( E(x1) * E(x2),p ) = ( [x1*x2 + p*( x1*r2 + x2*r1 + p*r1*r2 )] mod p*q ) mod p = x1*x2。 2) 若x1≥0,x2<0,则有:
E(x1) = lmod( x1, p )= (x 1 + p*r1 )mod p*q E(x2) = lmod( x2, p )= - ( p*r2 - x2 )mod p*q
将加密结果相乘得E(x1) * E(x2) = [x1*x2 + p*( - x1*r2 + x2*r1 - p*r1*r2 )] mod p*q,解密上述结果得 D[ E(x1) * E(x2) ] = lmod(E(x1) * E(x2),p) = ( [x1*x2 + p*( - x1*r2 + x2*r1 - p*r1*r2 )] mod p*q ) mod p = x1*x2。 3) 若x1<0,x2<0,则有:
E(x1) = lmod( x1, p )= - (p*r1 - x1)mod p*q E(x2) = lmod( x2, p )= - (p*r2 - x2)mod p*q
将加密结果相乘得E(x1) * E(x2) = [x1*x2 - p*( - x1*r2 - x2*r1 + p*r1*r2 )] mod p*q,解密上述结果得 D[ E(x1) * E(x2) ] = lmod( E(x1) * E(x2),p ) = ( [x1 + x2 - p*( - x1*r2 - x2*r1 + p*r1*r2 )] mod p*q ) mod p = x1*x2。
综上,乘法同态已验证。
4. 数据库设计
该系统采用mysql数据库作为存储中心,用户所有的个人信息以及用户密钥文档和权限表等都存储在数据库中
4.1 系统ER模型
该系统总共设计了6张表,分别为administrator(管理员信息表),authority(用户权限表),client(用户账号及密码表),clientcase(用户病历表),clientinfo(用户体检表),clientkeystore(用户密钥文档表)。
4.1.1 administrator
administrator表的ER图如下所示:
其中,Id表示管理员的标识号,Name是管理员的姓名,Password是管理员登录密码,它们组成了管理员信息表administrator。
4.1.2 authority
authority表的ER图如下所示:

