2020年J技术对安全性的支持_第1页
2020年J技术对安全性的支持_第2页
2020年J技术对安全性的支持_第3页
免费预览已结束,剩余13页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、安全生产) J 技术对安全性的支持Java 技术: java 对安全性的支持序言 :在完成网络安全的算法库是 ,我选择了 java 语言来开发。由于 java 没有指针,使我对数据流 的控制感到很是头痛 ,于是对 java 编程很有意见 ,然而在我使用大数类 (BigInteger) 时 ,无意中 发现 java 对 RSA 封装的很好 ,再仔细见相关的资料,觉得里面有不少东西,于是决定以此为 本学期的论文题目,希望通过这次学习能够从实用的角度更加深入的了解网络安全的壹些概 念。本着学以至用的观点 ,我自己设计了壹个系统,虽然比较幼稚,但我尽量用上们所学的算法和应用流程 ,相信着对我今后对网络

2、安全的理解会很有帮助的.java 中安全性方面的概述系统结构以 JDK1.2 为例.。首先无论代码来自本地或 是远端,都要对应壹个安全策略 (security policy ) 它定义了不同签名者、不同来源的壹套权限控制策略 (permissions ),在权限控制中说明了对资源(如文件、目录、端口。 。)的访问的权限。运行系统将代码组织到单独的域 (domains )中 每个域封装了壹组具有相同控制权限 的类的实例。域相当于 SandBox( 沙箱 ), Applet 能够在管理员的授权下运行于壹个受到限 制的环境中,而应用程序就不用受到这些限制,当然他也受到安全策略的控制。JDK1.2Se

3、curityModel:密码使用的体系结构JDK1.2 不但保留了以前的签名算法、消息摘要算法、密钥生成算法,仍增加了密钥管理、算法参数管理、 算法参数生成、 支持不同密钥转化的代理,认证中心、 随机数生成算法。 JDK1.2中仍增加了壹些加密算法的扩展包( JavaCryptographyExtension即 JCE),提供了全面的平台无关的 API 函数,实现了数字签名、 md5 、SHA-1 、基于 X.509 的认证代理。图显示了 JCE 的模型:关于 Appelt 权限控制的简介Java 平台通过安全管理器 (securitymanager) 来防止系统遭到攻击。 当下的 JDK 系

4、统是 通过启动安全管理器来进行资源访问控制的。当下的浏览器中都装有安全管理器, Applet 的壹举壹动都受到管理器的控制下, 和 JDK1.2 平台兼容的系统需要通过 policy 文件来授权。在 policy 文件中定义了来自某地 (URL) 的某人签名的代码的访问权限控制,在JDK1.2中,能够通过工具 policytool 来生成、编辑 policy 文件 . 。关于应用程序权限控制的简介 :如果没有安全管理器控制的话,应用程序是完全自由的(此时安全管理器是不会自动启 动的)。通过用命令行 来运行程序,就和下载的 Applet 壹样受到 了 安 全 管 理 器 的 控 制 。 Wind

5、ows: 的 缺 省 的 policy 控 制 文 件 是 java.homelibsecurityjava.policy 。几个重要的概念为了保证代码和文挡的安全性,需要签名、证书、和密钥管理方面有支持;数字签名数字签名的思路大致是这样的 :用 Keytool 或 API 生成的私钥给文档或代码签名将文档 (代码 )和签名,带有公钥的证书发给接收者 接收者通过公钥来确认接收到的文件的完整性 接收者通过证书或确定情况来确认发送者身份证书证书包括了以下几个部分: :公钥实体标识 ;可能包括实体名、实体 X 公司名、所在城市、国家等等数字签名 :分发这份证书的实体对证书签名分发这份证书实体的标识要

6、确认某份证书是可信的,只需确认签发证书的实体是可信的 其公钥是可信的 。实际中可能第壹次的出的公钥存在于另壹个人的签名文档中,这样就需要建立壹个信任链,见最 终的公钥是否是可信任的。成功地建立了信任链以后,就能够计算出该证书的指纹( fingerprint(s) ) - 壹般是证书的壹个 Hash 码;接受者能够打电话给证书发放者比较俩处 的指纹是否相同, 以确认自己受到的证书是他发的 ,且且中途没有被修改过。 接下来需要确认 发送者的身份,如果发送者是自己信任的(已确认且保存了其共钥 ),确认完成。否则就需要第三方 (CA) 来得到证书。首先发壹个自签的证书给 CA,CA 通过检查证书信息

7、(比如身份证编 码什么的 )来确证, 然后生成壹个自签名的证明发送者身份的证书。任何信任这个 CA 的人都相信这份证书上公钥和实体的对应。系统将所有信任的证书存储起来 (Keystore), 以后收到了带签名的代码或文档,就能够通过 jarsigner ,系统 API 来确认 ;如果在安全策略文件中说明了信任某实体签名的代码,在下载 后系统会自动确认。如果是将签名后的代码或文档发送给其他人,需要将自己的证书捎带上去以便对方确认。keytool export 或 API 函数能够从 KeyStore 中将证书附加在被签名的文档中。如果是用 jarsigner ,他自动将证书带上。密钥管理通过壹个

8、带密码的数据库来存储自己的私钥及信任的公钥( 称为 Keystore); 它包括了俩类入口 :信任证书和证书密钥对(自己的私钥和证书)和 PGP 类似 ,他们都能够通过别名来标识。 壹个 KeyStore 的所有者能够通过不同的别名来标记不同的证书- 私钥对而用于不同的 场合。通过 java 工具来实现基本流程工具介绍 :密钥和证书管理工具 (Keytools)它主要是负责公 私钥对、向 CA 发证书申请、接受 CA 的回复、记录信任的公钥实体对 应表 , 维护密钥库 (keystore), 命令基本形式是:keytoolcommandoptions主要有如下几种命令 :-certreq 产生

9、壹个证书签名请求 (GenerateaCertificateSigningRequest,CSR)给 CA, 由它来认证自己的证书。-delete 删除对应的密钥库的记录-export 将公钥证书输出到某个文件-genkey .在密钥库中存入私钥 - 公钥对 ,后者保存在壹个自签的证书中。- import 将壹个信任的证书导入,或者是接到了 CA 的回复,将该证书取代原来 密钥库中自签的证书。keypasswd 为某私钥分配密码-list - 列出密钥库中所有入口-storepasswd 给密钥库分配密码Java 文档处理工具 (jar)如果要对代码签名, 需要先用 jar 将其打包, 然后用

10、 jarsigner 来签名, 命令的基本格式是 jarcfjar-fileinput-file(s)Java 文档签名及验证工具 (jarsigner)jarsigner 工具通过密钥库中的数据来对 jar 文件进行签名和认证;策略编辑器 (policytool)编辑系统的策略文件使用代码签名1 签名方大致流程如下所示 :各个步骤通过前面的工具使用介绍, 具体实现细节就不再描述了 ,当下列出自己尝试时使用的 几个命令 :生成钥 keytool-genkey-aliassignFiles-keypass123456-keystorestore-storepass123456 打包 签名 生成证

11、书 keytool-export-keystorestore-aliassignFiles-filecer.cer2接收方大致流程如下所示直接运行代码是不允许的,只有先将证书引入本地的 keystore, 作为信任的证书插入;通过使用 PolicyTool 来配置相应的策略文件,通过俩种方式来运行他:1. 用的形式2. 通过配置浏览器使用的 java.homelibsecurityjava.security 文件,就能够带安全检查地运行该程序。文件交换在发送文件时 ,能够通过数字签名来保证文件的壹致性和发送者的身份。步骤如下发送者 基本流程同代码签名是壹样的 接收者和代码签名的不同之处在于是通

12、过 jarsigner 来验证的。使用 JDK1.2 的 API 来构造自己的例程基础 API产生公钥和密钥对得到密钥产生 器KeyPairGeneratorkeyGen=KeyPairGenerator.getInstance(DSA,SUN);初始化密钥产生 器 SecureRandomrandom=SecureRandom.getInstance(SHA1PRNG,SUN );keyGen.initialize(1024,random);产生公钥和密 钥 KeyPairpair=keyGen.generateKeyPair();PrivateKeypriv=pair.getPrivate

13、();P ublicKeypub=pair.getPublic();对数据签名得到壹个签名对象Signaturedsa=Signature.getInstance(SHA1withDSA,SUN);初始化签名对象 dsa.initSign(priv); 对数据签名 dsa.update(buffer,0,len); 得到签名的数据 byterealSig=dsa.sign();存储签名和公钥签名结果直接按字节流存储公钥通过 pub.getEncoded(); 先转换为字节流来处理从文件中取得公钥先从文件中读到字节流中 encKey构造壹个密钥说类X509EncodedKeySpecpubKey

14、Spec=newX509EncodedKeySpec(encKey);构造壹个密钥管器KeyFactorykeyFactory=KeyFactory.getInstance(DSA,SUN); 取得公钥 PublicKeypubKey=keyFactory.generatePublic(pubKeySpec);验证签名同生成签名壹样先取得签名对象 用公钥初始化签名对象 sig.initVerify(pubKey); 取得被签名的数据 sig.update(buffer,0,len); 验证 booleanverifies=sig.verify(sigToVerify);关于访问控制支持Poli

15、cy在 SUN 的 java 包中的对安全的支持的接口 (Interface)能够提供 identify 的任何实体在 仍提供了支持访问控制的接口多个 acl 的入口的集合的入口 壹组 的管理者 控制信息运用自己的算法类和 JavaJDK 支持完成网 络银行原型前段时间我用 java 实现了课程中几个重要的算法 :加密的 des 算法,通过大数类的支持实现 了 RSA 算法, MD5 函数及带密码的签名算法 ,但由于我仍没有找到比较好的 Java 处理字节 流的方法,所以接口不是很清晰,特别是用了大数类,使得网上的数据传输比较麻烦,而目前我又没办法找到 java 对 RSA 和加密算法的支持代

16、码 能够从网上的 JCE 部分找到 ,这部分就 使用了我编的算法 ,加上时间关系我不能实现用 x.509 标准来表示公钥等, 所以系统的设计不 是很流畅,权当是课后的壹次练习。系统设计大致的示意图:Client 代理向客户端提供的接口有:0.Login(inUid,inpassword) 1. UpdateBalance(inAccountNumber,intAccountHolder,inAccountBalanceouterrInfo)存 / 取操作。 BankServer 确认用户帐号和用户后更改用户的存款数目。2. CloseAccount(inAccountNumber,intAccountHolder,inAccountBalance) 消户。 BankServer 确认用户帐号和用户后将户头取消。安全性方面的测略由于要求在流览器中实现,在本地存取证书的方式是不可行的,对于用户身份认证仍是采取了传统的 uid+PWD 的形式,但为了保密,在上传时先用银行的公钥用RSA 算法加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论