您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 数字版权管理服务器设计与实现
数字版权管理服务器设计及实现陈超北京邮电大学信息工程学院,北京(100086)E-mail:cchao06@163.com摘要:本文首先研究了数字版权管理的原理,然后以数字电影播放为例,实现了一种基于struts技术的服务器架构方案――用JSP、ACTION和DAO相结合的方式架构基于MVC模式的数字版权管理服务器。最后给出了系统部分代码和界面,并解决了数字电影中许可证和RSA密钥对生成等关键问题。关键词:许可证,RSA密钥,打包器中图分类号:TP3111.引言随着互联网技术的不断发展,人们越来越多的应用网络“有偿”获取自己所需的数字媒体资源。但是目前,由于许多提供数字媒体文件下载的网站并没有对自己发布的资源提供有效的保护,致使很多文件在网上可以被任意下载和传播。这种现象不仅侵害了网站、多媒体产品制作者的利益,也助长了盗版者的气焰。因此,对网络资源提供有效的安全管理已成为互联网良性发展的关键,这种安全管理就被称为数字版权管理[1](DigitalRightsManagement)。本文在介绍数字版权管理原理的基础上,将以数字电影为例,讨论数字版权管理服务器的设计及具体实现。2.原理数字版权管理的基本工作原理[2]就是用打包器将音频、视频等文件进行加密编码处理,再建立一个数字版权管理中心;当用户使用打包器加密过的文件时,应用软件会根据其包含在头文件中的有关属性自动链接到相应的站点(数字版权管理中心)获取相应的许可证;只有通过数字版权管理中心验证的用户才能被授权使用这些音、视频等文件。由此可见,数字版权管理中的核心内容就是对媒体文件的加密处理。加密有对称加密和非对称加密两种。对称加密是指一个加密算法的加密密钥和解密密钥相同,或者虽然不相同,但是可由其中的任意一个很容易的推导出另一个,即密钥是双方共享的。在数字电影这个事例中,我们采用AES128位对称密钥对数字电影文件进行加密,并将对称密钥的解密钥通过加密通道传送给数字版权管理服务器。非对称加密是指一个加密算法的加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥。这两个密钥其中一个称为公钥,用于加密,是公开的;另一个称为私钥,用于解密,是保密的。非对称密钥最常采用的是RSA算法,它由Rivest,Shamir和Adleman在1978年提出。其工作原理具体如下:设Z/(n)=nZ,ϕ(n)=(p-1)(q-1),其中n=pq;p,q为素数且相异。若n*Z≡{g∈nZ|(g,n)=1},易见n*Z为ϕ(n)阶的乘法群,且有)(gnϕ≡1(modn)。令明文空间P=密文空间C=nZ,则有A.密钥生成:选择整数e使(ϕ(n),e)=1,且1eϕ(n);计算d,使d=-1e(modϕ(n)),得到公钥Pk={e,n},={d,p,q}。B.公钥加密:用公钥Pk={e,n}加密,设明文为Mn,则密文:C=eM(modn)。C.私钥解密:用私钥Sk={d,p,q}解密,设密文为C,则明文:M=dC(modn),其中n=pq。D.安全性:由于RSA的安全性基于加密函数n)(modx(x)eek=,这是一个单向函数,所以对人来说求逆计算(利用公钥推出私钥)是不可行的。在文中数字版权服务器的设计里,程序将根据用户名和密码生成随机的素数p和q。这里假设p=101,q=113,那么n=11413,ϕ(n)=100×112=11200;然而11200=75226××,一个正整数e能用作加密指数,当且仅当e不能被2,5,7所整除(事实上,不会分解φ(n),而用辗转相除法(欧式算法)来求得e,使(e,φ(n))=1。假设选择e=3533,那么用辗转相除法将求得:解密密钥d=-1e≡6597(mod11200),即d=6597。故在一个目录中公开n=11413和e=3533,现假设想发送明文9726给客户端,由35339726(mod11413)=5761可以知道在一个信道上发送密文5761。当客户端接收到密文5761时,用私钥d=6597进行解密:65975761(mod11413)=9726,即得到服务器发送的明文。3.数字版权技术实现3.1系统组成数字版权管理系统,确切的说,就是为保护数字媒体内容而建立的内容管理和发布平台[3]。本文的数字版权管理系统的组成分为以下三部分(其组成和运行流程见图1):(1)打包器:负责对数字媒体内容进行加密,并将其分发给用户,同时把和加密内容相对应的解密钥发送给数字版权管理服务器;(2)数字版权管理服务器:是数字版权管理的核心部分,其职能分为用户注册服务、内容注册服务和许可证发放服务三大部分;(3)用户:获取许可证,解密媒体文件并进行播放。相应的系统组成和运行流程图如下::系统流程3.2数字版权管理服务器架构由于java是一种强大的面向对象语言,它具有“一次编写,四处运行”的特点,适用于大多数的硬件平台[4],所以本文采用java语言开发数字版权服务器。在数字版权服务器中,具体又采用struts技术,设计成经典的MVC三层架构:在表现层,主要完成用户的注册登录和申请许可证操作;在控制层,主要处理来自表现层的用户注册登录请求,并完成打包器内容的注册和RSA密钥对的生成;在持久层,采用mysql数据库,以utf8为数据库编码标准,同时支持中英文两种存储格式。3.3数字版权管理服务器模块设计整个服务器的设计模块大体分为以下三部分:3.3.1内容注册模块打包器内容注册的流程图如下:图2:打包器注册流程在客户端,打包器将内容加密后,会将被加密内容的元数据信息和内容加密密钥放入一个叫initialDOI的XML文件中,然后通过http协议传送给服务器端。在数字版权管理服务器端,设计一个类SquashXMLServletServer,它继承自httpServlet,这样打包器以http协议发来的任何请求都可以被服务器接收。SquashXMLServletServer的代码示例如下:publicclassSquashXMLServletServerextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{doPost(request,response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{System.out.println(doPostCALLED!\n);response.setContentType(text/html);/***获取输入,处理输入请求*/......}}服务器端采用DOM解析打包器端request请求传来的initialDOI,把其中的有用消息存储在数据库,并在服务器端重新生成一个masterDOI,其中除了包含注册内容的有用信息外,还加入了服务器的地址。服务器以http协议的形式把masterDOI再传回给客户端。3.3.2用户注册模块用户注册的流程图如下所示:图3:用户注册流程由于服务器端采用struts技术,所以服务器完成用户注册和生成RSA密钥对,可以被设计为以下两个action。,即用户注册action,本文设它为registAction,它完成用户在服务器端的注册,并将用户的密码以MD5HASH算法加密后放入数据库。用户注册页面如图4所示:图4:用户注册界面第二个action,即RSA密钥对生成action,本文设它为generateRSAAction,它完成RSA密钥对的生成,并将其存入服务器端的数据库,随后RSA私钥通过加密信道SSL传送给用户。generateRSAAction代码示例如下:publicclassgenerateRSAActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{/**获得数据源,并通过表单得到用户注册信息*/....../**通过用户名和密码生成RSA密钥对,存入数据库,*并把用户私钥放入session*/RSArsa=generateRsa(name,psw);StringpubKey=rsa.getpublicKey();StringpriKey=rsa.getPrivateKey();db.insertrRSA(pubKey,priKey);session.setAttribute(privateKEY,priKey);/**关闭数据库连接,*返回RSA密钥对成功生成页面,供用户下载自己的私钥。*/db.close();returnmapping.findForward(OkForRSA);}}3.3.3用户获取许可证模块用户获取许可证的流程图如下:图5:用户获取许可证流程当用户注册完成后,struts的控制程序自动将页面转入用户登录页面。用户登录页面如下图所示:图6:用户登录界面用户通过页面输入用户名和密码后,表单数据被传送给登录action即LoginAction,在服务器端验证用户合法后,用户即可进入许可证授权页面。许可证授权页面如下图所示::许可证申请页面在这里,用户可以选择许可证的类型,并对其允许播放的时间段进行相应的填写。用户填写完毕后,提交数据表单;服务器端处理表单,通过generateLicneseAction完成相应的许可证生成,并将加密媒体文件内容的密钥放入许可证中;生成好的许可证由服务器使用用户公钥签名后传送给客户端。generateLicneseAction部分示例代码如下所示:publicclassgenerateLicneseActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{/**获得数据源,并通过表单得到用户注册信息*/....../**通过用户注册信息生成许可证,并将内容解密密钥放入其中,*最后,许可证用RSA公钥加密*/Licenselicense=generateLicense(licenseName,startTime,endTime,licenseType);license.setContentKey(key);EncryptedLicenselicenses=EncryptedWithPublicKey(license);session.setAttribute(license,licenses);....../**关闭数据库连接,*返回许可证申请成功页面,供用户下载许可证*/db.close();returnmapping.findForward(OkForLicense);}3.4数字电影文件播放本文采用openipmp开源工程的mp4播放器。它支持数字版权管理系统的许可证,能够解密许可证并从中获取内容解密密钥,用它对要播放的媒
本文标题:数字版权管理服务器设计与实现
链接地址:https://www.777doc.com/doc-1593173 .html