ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:38.43KB ,
资源ID:9242540      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9242540.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(安全生产Java安全性.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

安全生产Java安全性.docx

1、安全生产Java安全性Java安全性本教程是关于什么方面的?第 1 页(共5 页)恐怕没有什么软件工程主题的重要性比应用程序安全性更紧迫了。无论是来自内部或外部的攻击都会带来巨大损失,某些攻击会使软件公司对造成的损失承担赔偿责任。随着计算机(尤其是因特网)技术的发展,安全性攻击正在变得越来越成熟和频繁。利用各种最新技术和工具是应用程序安全性的一个关键;另一个关键是由经过考验的技术(如数据加密、认证和授权)构筑的牢固的基础。Java 平台的基本语言和库扩展都提供了用于编写安全应用程序的极佳基础。本教程讨论了密码术基础知识与如何用 Java 编程语言实现密码术,并提供了样本代码来说明这些概念。在这

2、个两部分教程的第一部分中,我们讨论库扩展(现在是 JDK 1.4 库的一部分)中的内容,这些库扩展被称为 Java 密码术扩展(Java Cryptography Extension(JCE))和 Java 安全套接字扩展(Java Secure Sockets Extension (JSSE))。此外,本教程还介绍了 CertPath API,这是 JDK 1.4 中新增加的特性。在本教程第二部分(请参阅参考资料)中,我们将把讨论范围扩大到由 Java 平台中 Java 认证和授权服务(Java Authentication and Authorization Service (JAAS))

3、管理的访问控制。我应该学习本教程吗?第 2 页(共5 页)这是一篇中级教程;它假设您知道如何阅读和编写基本的 Java 程序,包括应用程序和 applet。如果您已经是 Java 程序员并且对密码术(关于诸如私钥和公钥加密、RSA、SSL、证书之类的主题)以及支持它们的 Java 库(JCE、JSSE)感到好奇,那么本教程就是为您准备的。本教程不要求您已经具有任何密码术、JCE 或 JSSE 等方面的知识背景。本教程介绍了基本密码构件概念。每个概念都附有 Java 实现考虑事项、代码示例和示例执行的结果。工具、代码样本和安装需求第 3 页(共5 页)您将需要以下几项以完成本教程中的编程练习:

4、JDK 1.4,标准版 本教程源代码和类,以便您能够随着我们的进度理解示例 用于 RSA 示例的 Bouncy Castle Crypto 库 支持 Java 1.4 插件的浏览器 您可以使用 JDK 1.3.x,但必须自行安装 JCE 和 JSSE。关于代码示例的说明第 4 页(共5 页)代码示例直接将已加密的数据显示到屏幕上。大多数情况下,这会产生奇形怪状的控制字符,其中的一些偶尔可能会引起屏幕格式化问题。这不是良好的编程实践(将它们转换成可显示的 ASCII 字符或十进制表示会更好),但我们这样做是为了保持代码示例及其输出的简洁。在示例执行章节的大多数情况下,我们修改了实际字符串以便与本

5、教程中的字符集需求兼容。还有,我们在大多数示例中查询和显示了用于给定算法的实际安全性提供程序库。这样做是为了让用户更好地了解哪个功能是调用哪个库实现的。为什么这样做呢?因为,在大多数安装中都安装了许多这样的提供程序。关于作者第 5 页(共5 页)Brad Rubin 是 Brad Rubin & Associates Inc. 的负责人,该公司是一家专门从事无线网络和 Java 应用程序安全性和教育的计算机安全性咨询公司。Brad 在 IBM(位于明尼苏达州的 Rochester)工作了 14 年,他从 AS/400 的第一个发行版就开始从事其所有方面的硬件和软件开发。他是促使 IBM 转而支

6、持 Java 平台的关键人物,并且是 IBM 最大的 Java 应用程序 称为 SanFrancisco(现在是 WebSphere 的一部分)的商业应用程序框架产品 的首席架构设计师。他还是 Imation Corp. 数据存储部门的首席技术官,以及该公司研发组织的领导。Brad 拥有计算机和电子工程学位,以及威斯康星大学麦迪逊分校计算机科学博士头衔。他目前在明尼苏达大学教授电子和计算机工程高级设计课程,并将于 2002 年秋季开设和教授该大学的计算机安全性课程。可通过 BradRubinBradR 与 Brad 联系。Java安全性编程概念Java 平台是如何使安全编程更方便的第 1 页(

7、共5 页)Java 编程语言和环境有许多特性使安全编程更方便: 无指针,这意味着 Java 程序不能对地址空间中的任意内存位置寻址。 字节码验证器,在编译成 .class 文件之后运行,在执行之前检查安全性问题。例如,访问超出数组大小的数组元素的尝试将被拒绝。因为缓冲区溢出攻击是造成大多数系统漏洞的主要原因,所以这是一种重要的安全性特性。 对资源访问的细颗粒度控制,用于 applet 和应用程序。例如,可以限制 applet 对磁盘空间的读或写,或者可以授权它仅从特定目录读数据。可以根据对代码签名的人(请参阅代码签名的概念)以及代码来源处的 http 地址来进行授权。这些设置都出现在 java

8、.policy 文件中。 大量库函数,这些函数用于主要密码构件和 SSL(本教程的主题)以及认证和授权(在本系列的第二篇教程中讨论)。此外,有众多的第三方库可用于额外的算法。 什么是安全编程技术?第 2 页(共5 页)简单地说,有多种编程风格和技术可以帮助确保应用程序更安全。考虑下列两个一般示例: 存储删除密码。如果密码是存储在 Java String 对象中的,则直到对它进行垃圾收集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于空闲内存堆中,直到重用该内存空间为止。密码 String 在内存中驻留得越久,遭到窃听的危险性就越大。更糟的是,如果实际内存减少,则操作系统

9、会将这个密码 String 换页调度到磁盘的交换空间,因此容易遭受磁盘块窃听攻击。为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 char 数组中,并在使用后对其置零。(String 是不可变的,所以无法对其置零。) 智能序列化。当为存储器或传输任何私有字段而序列化对象时,缺省情况下,这些对象都呈现在流中。因此,敏感数据很容易被窃听。可以使用 transient 关键字来标记属性,这样在流中将忽略该属性。 当在本教程中需要用到这些技术以及其它技术时,我们将更详细地讨论它们。JDK 1.4 中集成了安全性第 3 页(共5 页)在 JDK 1.4 之前,许多安全性功能必须作为扩展

10、添加到基本 Java 代码分发版中。严格的美国出口限制要求这种功能的分离。现在,新的宽松法规使安全性特性和基本语言更紧密的集成成为可能。下列软件包(在 1.4 发行版之前作为扩展使用)现在集成到了 JDK 1.4 中: JCE(Java 密码术扩展) JSSE(Java 安全套接字扩展) JAAS(Java 认证和授权服务) JDK 1.4 还引入了两种新功能: JGSS(Java 通用安全性服务 (Java General Security Service)) CertPath API(Java 证书路径 API (Java Certification Path API)) JCE、JSSE

11、 和 CertPath API 是本教程讨论的主题。在本系列的下一篇教程中,我们将重点介绍 JAAS。这两篇教程都不讨论 JGSS(它提供一般框架以在两个应用程序之间安全地交换消息)。第三方库充实了安全性第 4 页(共5 页)我们可以用第三方库(也称为提供程序)来增强当前 Java 语言中已经很丰富的功能集。提供程序添加了额外的安全性算法。作为库示例,我们将使用 Bouncy Castle 提供程序(请参阅参考资料)。Bouncy Castle 库提供了其它密码算法,包括本教程什么是公钥密码术?和什么是数字签名?中讨论的流行的 RSA 算法。尽管您的目录名和 java.security 文件可

12、能有一点不同,但仍可用以下模板安装 Bouncy Castle 提供程序。要安装这个库,请下载 bcprov-jdk14-112.jar 文件并将它放到 j2sdk1.4.0jrelibext 和 Program FilesJavaJ2re1.4.0libext 目录中。在两个 java.security 文件(他们位于上述相同的目录下,但位于“security”子目录而不是“ext”)中,将下面的行:security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider添加至这些行的末尾:security.provider

13、.1=sun.security.provider.Sunsecurity.provider.2=.ssl.internal.ssl.Providersecurity.provider.3=com.sun.rsajca.Providersecurity.provider.4=com.sun.crypto.provider.SunJCEsecurity.provider.5=sun.security.jgss.SunProvidersecurity.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider展望第 5 页(共5 页)在

14、本章中,我们已经介绍了 Java 语言提供的有助于确保编程保持安全的特性(无论是完全集成的还是基于扩展的)。我们提供了一些安全编程技术的通用示例以帮助您熟悉这个概念。我们介绍了过去是作为扩展的但现在集成到版本 1.4 发行版中的安全性技术;我们也注意到两种新的安全性技术。我们还说明了了第三方库通过提供新技术能够增强安全性程序。在本教程余下的部分,我们将让您熟悉这些旨在提供安全的消息传递的概念(因为它们应用于 Java 编程): 消息摘要。这是一种与消息认证码结合使用以确保消息完整性的技术。 私钥加密。被设计用来确保消息机密性的技术。 公钥加密。允许通信双方不必事先协商秘钥即可共享秘密消息的技术

15、。 数字签名。证明另一方的消息确定来自正确通信方的位模式。 数字证书。通过让第三方认证机构认证消息,向数字签名添加另一级别安全性的技术。 代码签名。由可信的实体将签名嵌入被传递的代码中的概念。 SSL/TLS。在客户机和服务器之间建立安全通信通道的协议。传输层安全性(Transport Layer Security (TLS))是安全套接字层(Secure Sockets Layer (SSL))的替代品。 当我们讨论上述每个主题时,都将提供示例和样本代码。确保消息的完整性概述第 1 页(共7 页)我们将在本章中了解消息摘要,它获取消息中的数据并生成一个被设计用来表示该消息“指纹”的位块。我们

16、还将讨论 JDK 1.4 支持的与消息摘要相关的算法、类和方法,并为消息摘要和消息认证特性提供代码示例和样本的执行代码。什么是消息摘要?第 2 页(共7 页)消息摘要是一种确保消息完整性的功能。消息摘要获取消息作为输入并生成位块(通常是几百位长),该位块表示消息的指纹。消息中很小的更改(比如说,由闯入者和窃听者造成的更改)将引起指纹发生显著更改。消息摘要函数是单向函数。从消息生成指纹是很简单的事情,但生成与给定指纹匹配的消息却很难。消息摘要可强可弱。校验和(消息的所有字节异或运算的结果)是弱消息摘要函数的一个示例。很容易修改一个字节以生成任何期望的校验和指纹。大多数强函数使用散列法。消息中 1

17、 位更改将引起指纹中巨大的更改(理想的比例是更改指纹中 50% 的位)。算法、类和方法第 3 页(共7 页)JDK 1.4 支持下列消息摘要算法: MD2 和 MD5,它们都是 128 位算法 SHA-1 是 160 位算法 SHA-256、SHA-383 和 SHA-512 提供更长的指纹,大小分别是 256 位、383 位和 512 位 MD5 和 SHA-1 是最常用的算法。MessageDigest 类操作消息摘要。消息摘要代码示例中使用下列方法: MessageDigest.getInstance(MD5):创建消息摘要。 .update(plaintext):用明文字符串计算消息摘

18、要。 .digest():读取消息摘要。 如果密钥被用作消息摘要生成过程的一部分,则将该算法称为消息认证码。JDK 1.4 支持 HMAC/SHA-1 和 HMAC/MD5 消息认证码算法。Mac 类使用由 KeyGenerator 类产生的密钥操作消息认证码。消息认证码示例中使用了下列方法: KeyGenerator.getInstance(HmacMD5) 和 .generateKey():生成密钥。 Mac.getInstance(HmacMD5):创建 MAC 对象。 .init(MD5key):初始化 MAC 对象。 .update(plaintext) 和 .doFinal():用

19、明文字符串计算 MAC 对象。消息摘要代码示例第 4 页(共7 页) import java.security.*;import javax.crypto.*;/ Generate a Message Digestpublic class MessageDigestExample public static void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println(Usage: java MessageDigestExampl

20、e text); System.exit(1); byte plainText = args0.getBytes(UTF8); / / get a message digest object using the MD5 algorithm MessageDigest messageDigest = MessageDigest.getInstance(MD5); / / print out the provider used System.out.println( n + messageDigest.getProvider().getInfo() ); / / calculate the dig

21、est and print it out messageDigest.update( plainText); System.out.println( nDigest: ); System.out.println( new String( messageDigest.digest(), UTF8) ); 消息摘要样本执行的结果第 5 页(共7 页) D:IBMjava MessageDigestExample This is a test!SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRando

22、m; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores)Digest:D93,.x2%$kd8xdp3di5*消息认证码示例第 6 页(共7 页) import java.security.*;import javax.crypto.*;/ Generate a Message Authentication Codepublic class MessageAuthenticationCodeExample public stati

23、c void main (String args) throws Exception / / check args and get plaintext if (args.length !=1) System.err.println (Usage: java MessageAuthenticationCodeExample text); System.exit(1); byte plainText = args0.getBytes(UTF8); / / get a key for the HmacMD5 algorithm System.out.println( nStart generatin

24、g key ); KeyGenerator keyGen = KeyGenerator.getInstance(HmacMD5); SecretKey MD5key = keyGen.generateKey(); System.out.println( Finish generating key ); / / get a MAC object and update it with the plaintext Mac mac = Mac.getInstance(HmacMD5); mac.init(MD5key); mac.update(plainText); / / print out the

25、 provider used and the MAC System.out.println( n + mac.getProvider().getInfo() ); System.out.println( nMAC: ); System.out.println( new String( mac.doFinal(), UTF8) ); 消息认证样本执行第 7 页(共7 页) D:IBMjava MessageAuthenticationCodeExample This is a test!Start generating keyFinish generating keySunJCE Provide

26、r (implements DES, Triple DES, Blowfish, PBE, Diffie-Hellman,HMAC-MD5, HMAC-SHA1)MAC:Dkdj47x4#.kd#n8a-x注:因为代码用线程行为定时来生成优质的伪随机数,所以密钥生成很费时。一旦生成了第一个数,其它数的生成就快得多了。还请注意,与消息摘要不同的是,消息认证码使用密码提供程序。(有关提供程序的更多信息,请参阅第三方库充实了安全性。) 保持消息的机密性概述第 1 页(共7 页)在本节中,我们将研究私钥加密的使用并主要讨论诸如密码块、填充、序列密码和密码方式之类的概念。我们将迅速地讨论密码算法、类和方

27、法的细节并用代码示例和样本执行来说明这个概念。什么是私钥密码术?第 2 页(共7 页)消息摘要可以确保消息的完整性,但不能用来确保消息的机密性。要确保机密性,我们需要使用私钥密码术来交换私有消息。Alice 和 Bob 各有一个只有他们两人知道的共享密钥,并且约定使用一种公用密码算法或密码。也就是说,他们保持密钥的私有性。当 Alice 想给 Bob 发送消息时,她加密原始消息(称为明文)以创建密文,然后将密文发送给 Bob。Bob 接收了来自 Alice 的密文并用自己的私钥对它解密,以重新创建原始明文消息。如果窃听者 Eve 侦听该通信,她仅得到密文,因此消息的机密性得以保持。您可以加密单

28、一位或位块(称为块)。块(称为密码块)通常是 64 位大小。如果消息大小不是 64 位的整数倍,那么必须填充短块(关于填充的更多信息请参阅什么是填充?)。单一位加密在硬件实现中更常见。单一位的密码被称为序列密码。私钥加密的强度取决于密码算法和密钥的长度。如果算法比较好,那么攻击它的唯一方法就是使用尝试每个可能密钥的蛮力攻击,它平均要尝试 (1/2)*2*n 次,其中 n 是密钥的位数。在美国出口法规很严时,只允许出口 40 位密钥。这种密钥长度相当弱。美国官方标准(DES 算法)使用 56 位密钥,但随着处理器速度的增加,它变得越来越弱。现在,通常首选 128 位密钥。如果每秒可以尝试一百万个

29、密钥,那么,使用 128 位密钥,找到密钥所需的平均时间是宇宙年龄的许多倍!什么是填充?第 3 页(共7 页)如前所述,如果使用分组密码而消息长度不是块长度的整数倍,那么,必须用字节填充最后一个块以凑成完整的块大小。有许多方法填充块,譬如全用零或一。在本教程中,我们将对私钥加密使用 PKCS5 填充,而对公钥加密使用 PKCS1。使用 PKCS5 时,由一个其值表示剩余字节数的重复字节来填充短块。我们不会在本教程中更深入地讨论填充算法,但您需要了解的信息是,JDK 1.4 支持下列填充技术: 无填充 PKCS5 OAEP SSL3 BouncyCastle 库(请参阅第三方库充实了安全性和参考

30、资料)支持其它填充技术。方式:确定加密是如何工作的第 4 页(共7 页)可以以各种方式使用给定密码。方式允许您确定加密是如何工作的。例如,您可以允许一个块的加密依赖于前一个块的加密,也可以使块的加密独立于任何其它块的加密。根据您的需求选择方式,并且您必须考虑各方面的权衡(安全性、并行处理能力以及明文和密文的容错等)。方式的选择超出了本教程的讨论范围(请参阅参考资料以进行更深入的阅读),但再次指出,您要了解的信息是,Java 平台支持下列方法: ECB(电子密码本 (Electronic Code Book)) CBC(密码块链接 (Cipher Block Chaining)) CFB(密码反馈方式 (Cipher Feedback Mode)) OFB(输出反馈方式 (Output Feedback Mode)) PCBC(填充密码块链接 (Propagating Cipher Block Chaining)) 算法、类和方法第 5 页(共7 页)JDK 1.4 支持下列私钥算法: DES。DES(数据加密标准)是由 IBM 于上世纪 70 年代发明的,美国政府将其采纳为标准。它是一种 56 位分组密码。 TripleDES。该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1