胡泽冰,安永丽,伍莉
(1. 华北理工大学 人工智能学院,河北 唐山 063210;
2. 河北省工业智能感知重点实验室,河北 唐山 063210)
医学数据的有效共享可以在国家医学领域创造出较高的科研、经济和社会价值[1]。然而,医学数据在共享过程中由于加密保护和溯源等安全措施不完善而造成的数据泄露、丢失和破坏等安全问题层出不穷,亟需全新的安全技术手段为其保驾护航。公钥密码体制是现代密码学研究的一个重要分支,它能有效地解决公共信道上的数学签名、身份认证等问题,保证信息传递的安全性。椭圆曲线公钥密码体系由华盛顿大学的Neal Koblitz[2]和IBM公司的Victor Miller[3]于20世纪80年代各自独立提出,并正式将其应用到现代密码学的公钥密码体制中,其数学基础是椭圆曲线有限加法群上的椭圆曲线离散对数问题 (Elliptic Curve Discrete Logarithm Problem, ECDLP) 。与RSA相比,椭圆曲线公钥密码体制具有安全性能高、计算开销小和计算速度快等优势,这些优势对计算能力和集成电路空间受限的设施和应用颇具吸引力,ECC是目前最安全、最有前景的公钥加密体制。所以,基于ECC的医学数据共享方案具有更高的安全性、灵活性和兼容性。
医学数据具有价值密度低的特征,作为一种潜在的资源,数据共享可以最大限度地发挥其价值效益[4]。但数据共享可能会带来一些个人隐私泄露、信息安全以及国家安全问题。目前,医学数据共享方案研究主要有:Bos[5]利用同态加密对医学数据进行处理和分析,基于以上提出患病概率预测模型;
Wood[6]等人为医学数据分类设计了一个基于私钥朴素贝叶斯的加密协议,同时隐藏医学数据和预测模型;
Scheibner[7]提出使用多方同态加密框架进行医学数据共享和联邦分析,但无具体算法支撑。
目前,对椭圆曲线密码算法的优化主要分为3类:第一类是基于标量表示形式的优化,主要通过减少点加和倍点运算次数达到优化目的。优化的方法包括:Al-Somani[8]提出以额外的模运行单元为代价,将n位k值的n次倍点和n/2次点加进行并行运算;
Min[9]实现了wNAF算法,将点加降为n/(w+1)次,不过需要额外计算2w-1个椭圆点,在大窗口宽度下不适用;
尤文珠等人[10]将基数7添加到先前的方法中,以表示混合幂为2、3和7的标量。第二类是基于使用更有效的坐标系。原曲线方程使用仿射坐标系,每进行一次点加或倍点都需使用一次模逆,而模逆运算需要消耗大量的时钟周期,故采用转换坐标系的方法来消除模逆运算。第三类是基于特殊曲线法。Solinas[11]提出了Koblitz曲线改进版;
Bernstein[12]介绍了蒙哥马利曲线Curve25519;于斌等人[13]设计了一种能应用于两类素数域椭圆曲线的高速标量乘法器等。
首先约定,E/p表示定义在素数有限域p上的曲线E,E(p)表示E/p上所有点和无穷远点的集合,p*表示素数有限域上所有非零值。当素域F的特征Char(F)≠2,3,一般形式的Weierstrass方程式总可以化为如式 (1) :
E:y2=x3+ax+bmodp
(1)
其中,p是一个大素数,p表示素数有限域且a,b,x,y∈p,对于非奇异椭圆曲线需满足判别式D=4a3+27b3≠0(modp)。在非奇异椭圆曲线E/p构成的阿贝尔群上考虑方程Q=kG,其中G,Q∈E(),k∈P*,k 对于椭圆曲线运算,假设在非奇异椭圆曲线E/p上定义了加法阿贝尔群,以下ECC操作均基于该群,为了简单起见,以下运算中均省略了 (modp) 。 P+O=O+P=P,即无穷远点和任一点相加等于该点[14]; 点-Q=(x2,-y2)称为Q的逆元素,满足Q+(-Q)=O; 图1 素数域上椭圆曲线的点加和倍点运算示意图 倍点运算:椭圆曲线E/p上2个重合的点P(x1,y1) 和Q(x2,y2) 相加,结果仍为椭圆曲线E/p上的点R(x3,y3),且满足式 (2) 。该数量关系反映在几何图形上即如图1所示,过P、Q作一条直线与椭圆曲线相交于另一点R",R"关于x轴在椭圆曲线上的对称点即为R。 (2) 标量乘法运算:标量乘法运算定义为k个相同的点P相加得到椭圆曲线上另一个点Q的过程,其中k是正整数,P和Q为椭圆曲线上的点,可记为式(3)。 (3) 为保障医学数据在共享过程中的安全性,充分利用椭圆曲线密码体制的高安全性和低计算开销的特点,基于上述增强型ECC算法设计一个轻量化的医学数据共享方案。在此基础上,结合不经意传输技术实现医学数据的匿踪查询。在保证数据安全性的同时,降低计算和通信开销。 增强型ECC算法的医学数据共享方案提供下列运算功能[15]。 (1)签名运算:输入明文和密钥长度的随机整数,利用私钥对明文进行签名。签名运算能够验证数据发送方的身份,保证了数据传输的不可否认性。 (2)验签运算:输入签名和明文,利用公钥验证签名是否正确。如果正确,则接收消息,反之拒绝。 (3)加密运算:输入明文,利用公钥和椭圆曲线加密算法对明文数据进行加密处理。只有拥有私钥的授权方才能还原明文信息。 (4)解密运算:输入密文,利用私钥和椭圆曲线解密算法对密文数据进行解密处理。私钥和公钥一一对应。 (5)密钥对产生:选择密钥长度的随机整数作为私钥,通过标量乘算法利用私钥生成公钥。 数据共享方案的设计框架如图2所示。该设计框图主要包含协议层模块与点群和有限域运算模块两部分。 图2 医学数据共享方案设计框图 2.2.1协议层模块 协议层模块包含密钥协商运算、数字签名运算和加解密运算3种主要运算模块,主要完成数据收发和调用子模块的功能。该模块根据客户端命令决定需要调用的运算模块,从数据分流模块将需要计算的数据调往不同的运算子模块。运算结束后,将数据进行汇总,通过数据合并模块上传至应用层模块。 2.2.2点群和有限域运算模块 该模块主要用来进行标量乘运算,其中包括了椭圆曲线上的标量乘运算和有限域上的模运算。协议层模块中3个主要运算均需调用标量乘运算。如图2所示该模块内的标量乘运算是基于该研究提出的混合坐标系上的wNAF算法,只在坐标系转换时进行模逆运算,能够在较大程度上降低标量乘算法的计算复杂度。 共享框架的整体结构如图3所示。为了保护医学数据在传输和存储时的安全和隐私,该研究开发了隐私和安全保护框架。数据使用方通过密钥生成算法生成公私钥对,公布公钥,并发送数据访问请求。数据共享者利用对方的公钥对信息进行加密,并发送给数据共享者。数据使用者收到密文后,使用自己的私钥进行解密,即可得到明文。该模块中,为了降低数据加解密时的计算开销和数据传输过程中的通信成本、保证用户数据的机密性,使用了椭圆曲线加密算法; 生成方案所描述的流程图如图3所示,数据使用者选择具有安全参数的椭圆曲线,生成公私钥对,私钥本地保存,公钥发布在网络中,并向数据拥有者发送数据访问需求。数据拥有者对即将进行共享的明文数据进行加密:利用数据使用者的公钥对明文进行加密处理,将密文和其他密钥元素一起发送给数据使用者。数据使用者收到以加密格式传送的数据之后,使用私钥对密文进行解密操作,即可得到明文。 图3 数据共享方案工作流程图 不经意传输协议是指数据共享者向查询者发送多个盲化后的消息,查询方只能成功解密自己需要的消息,无法探测到其他消息的内容。在这个过程中,数据共享方无法获取查询方的查询目标却能发送查询方需要的内容,这个过程也叫茫然传输。这个过程的实现使得数据共享双方的隐私信息得到有效的保护,具体工作流程如图4所示。 图4 不经意传输协议工作流程图 为了验证该研究提出的数据(采用医学数据)共享方案,在core i5-6200U @2.30GHz上用64位的pyCharm Community Edition进行实验仿真,参考第三方库gmssl中的SM2算法的实现方式,使用SM2椭圆曲线公钥密码算法推荐曲线参数,对算法进行了相应的改进。 从大型医学公共数据库CHNS中下载了125 740条国内不同省市的健康体检数据,每条数据有276个属性,使用SAS7BDAT将其导入pyCharm,数据预览结果如图5所示。 图5 医学数据导入 椭圆曲线数字签名算法的软件实现如图6所示。将需要加密的数据提前转换成byte类型,随机生成256比特长的16进制数。将16进制数random_hex_str和明文plain_data作为签名算法参数进行函数调用,实现签名功能,签名结果为5a5f8351ed7eb73d5e42b178634d49530819c2f54a92d880d691bd319863fa8ef81af794115b76f52efbf9bc10b296ffe25182ae1deeb686eb5aabeb3b96fc34。再将签名结果sign和明文plain_data作为输入调用验签函数验证签名是否正确。 图6 ECDSA模块 椭圆曲线数字签名算法的软件实现如图7所示。将需要加密的数据提前转换成byte类型。输入明文plain_data,调用加密函数开始加密,得到密文和输出结果。 图7 EC加解密模块 假设数据共享方有2个消息data_list = ["message1", "message2"] ,查询方想查询第1个消息的内容。数据共享方首先生成2对公私钥对 (pri1,pub1) 和 (pri2,pub2) 。私钥在本地保存,公钥发布在网络中,如图8所示。 图8 数据共享方发布公钥 数据查询者使用第1个公钥对随机生成的整数k进行加密,将加密后的数据enc_num发送给数据共享方,如图9所示。 图9 数据查询方加密随机整数 数据接收方分别使用pri1和pri2对enc_num进行解密,将得到的解密结果K1和K2分别与data_list中2个消息进行异或,盲化明文。将盲化后的结果C1和C2发送给数据查询方,如图10所示。 图10 数据共享方盲化明文 数据查询方用整数k分别对C1和C2进行异或操作,还原明文,如图11所示。 图11 数据查询方还原明文 本文以生物医学大数据时代下的医学资源共享为背景,以保证医学数据在共享过程中的机密性、可用性、不可抵赖性和不可替换性,提高医学数据在网络传输过程中使用效率。提出了医学数据在共享过程中的安全性,充分利用椭圆曲线密码体制的高安全性和低计算开销的特点,并将国密SM2算法与改进后的算法进行了结合,在此基础上,结合不经意传输技术实现了加密数据的匿踪查询。该方案实现了医学数据在共享过程中的机密性和不可否认性,具有较大的实用价值。
点加运算:椭圆曲线E/p上2个互不重合的点P(x1,y1) 和Q(x2,y2) 相加,相加后的结果仍为椭圆曲线E/p上的点,设该点为R(x3,y3),该点满足式 (2) 。该数量关系反映在几何图形上即如图1所示,过P,Q作一条直线与椭圆曲线相交于另一点R",R"关于x轴在椭圆曲线上的对称点即为R。2.1 医学数据共享方案需求分析
2.2 数据共享方案设计框架
2.3 医学数据共享方案工作流程
为了防止云存储平台泄露、篡改和伪造用户数据,安全共享框架假设云服务器不可信,数据拥有者始终持有算法私钥。3.1 医学数据导入
3.2 数字签名算法实现
3.3 加解密算法实现
3.4 基于SM2的茫然传输实现