资源描述:
系统安全请结合demo阅读,哈姆雷特莎士比亚笔下四大悲剧之一,哈姆雷特故事简介悲剧怎么产生的呢,情仇录,,小故事,,,,中途发生变故,,,悲剧发生了吗,小哈偷看了信件内容小哈修改了信件内容结论小哈是个黑客由此引发对下面一系列技术的思考本文不讨论java代码的安全,主要关注数据交互过程中涉及的安全问题,介绍相关技术概念,加密对称加密,非对称加密消息摘要数字签名JAVA证书体系(证书生成,证书使用)SSL实现,加密,加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。分类对称加密,非对称加密,单向加密,对称加密,加密、解密使用同一个密钥优点运算速度快,用于加密大容量数据缺点难于管理,密钥分发困难不具有不可否认性著名算法包括AES、DES、IDEA、RC2、RC4、RC5等,简单应用举例,明文goodgoodstudy,daydayup.密钥googleDMP替换加密算法将明文中的所有的字母“d”替换成密钥。密文“googooglegoogooglestugoogley,googleaygoogleayup.”密文googooglegoogooglestugoogley,googleaygoogleayup.密钥googleDMP替换解密算法将密文中所有与密钥相同的字符串替换成“d”。明文“goodgoodstudy,daydayup.”。,非对称加密,产生一对数学相关的密钥,公钥与私钥用私钥加密的数据只能由公钥解密,反之亦然优点便于管理,密钥分发简单,公开密钥可以广泛传递实现数字签名,可以实现不可抵赖性缺点运算速度慢,不适合加密大容量数据著名算法包括RSA、DSA、椭圆曲线密码算法、DiffeHellman等,单向加密,只有加密无法解密MD5信息摘要算法,SHA安全散列算法,HMAC散列消息鉴别码等,消息摘要,消息摘要(MessageDigest)它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生,数字签名,数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法特性防篡改只有你有私钥防抵赖具有法律效力,SSL,SSLsecuresocketlayer是用于对TCP/IP数据流进行加密的协议,同时还包括了身份认证和数据完整性校验等内容,讲故事,大胖子无业游民,专发AV小瘦子无业游民,专看AV黑客老婆小瘦子的老婆.牛B黑客,专截AV,人物介绍,我是大胖子,我是小瘦子,我是黑客,场景一对称加密,瘦子收AV啦,winrar加密了哈,密码电话告诉我,胖子声音大,老娘听到密码啦,小瘦子悲剧了,还记得对称加密的缺点吗,场景一非对称加密,瘦子收AV啦,用你的公钥加密了哈,我收,我插,我解,截到AV,密码啥啊,还记得非对称加密的特点吗,场景一非对称加密圈套,还记得数字签名的特点吗,瘦子收AV啦,用你的公钥加密了哈,我变身,我收,我插,我解,,AV画面怎么是她,哈哈,数字签名,小瘦子,收AV啦,丫这回是不是圈套呢,小瘦子建了个txt文档,内容123,用大胖子的公钥加密后,将文件传给了大胖子,123哈哈,AV传送开始,AV版数字签名的应用场景就这样滴,数字签名商业中的应用,写个借据来吧,小瘦子,借我100大洋,大哥没钱买AV了,大胖子建了个文本内容向小瘦子借100大洋.,然后用自己的私钥签名,发给小瘦子,小瘦子用大胖子的公钥解密文件,看到内容向小瘦子借100大洋.,OK,网银转帐给你,加密的基础算法--(见Coder),内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式.主要就是Encoder、Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以符号填充,MD5、SHA、HMAC这些加密算法,是非可逆加密,就是不可解密的加密方法。我们通常只把他们作为加密的基础。,对称加密见demodes,DES-DataEncryptionStandard,即数据加密算法。是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种加密或解密。DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,非对称加密见demoRSA,RSA典型的非对称加密算法,这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。下面是其密钥管理及两种应用场景,密钥生成发公布,数字签名(见RSA签名部分代码),非对称解密(见RSA加解密部分代码),DSA,DSA数字签名,非对称加密的另一种实现密钥管理及应用与RSA类似详细见代码部分(这部分代码包括了密钥生成方法),消息摘要见demomydigest,一、什么是消息摘要一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。二、消息摘要有两个基本属性1、两个不同的报文难以生成相同的摘要;2、绝不能从消息摘要生成原数据三、消息摘要的应用1、消息摘要主要用于验证数据的完整性,我们经常听到的校验和就是消息摘要的一个特例。2、MAC消息认证码,使用秘密密钥和消息摘要算法来创建消息摘要。,似曾相识的应用,我们可能经常会疑问,我们有了消息摘要为什么还要认证码呢消息摘要的算法可以确保消息摘要和具体的消息之间的一一对应,也就是只要你有相同的消息,采用相同的算法肯定能产生相同的消息摘要,但有时为了特殊的目的我们需要只有特定的人才能生成这个摘要,这时候我们可以通过在生成消息摘要的过程中加入相应的密钥,从而使生成的消息摘要在没有密钥的情况下难以生成。鉴于消息摘要的一一对应,经常在一些保护用户密码的地方我们采用了这种算法。例如,在银行系统,为了不让管理数据库的员工把你的密码看到,系统本身在你的密码存入库中之前就做了消息摘要的提取,这样库中别人看到的是一串奇怪的串,他也没法逆向获得你的明文密码。当然,如果银行的安全系统被控制,那什么事情都可以做。,消息摘要的计算,java.security.MessageDigest类staticgetInstanceStringalgorithm返回一个MessageDigest对象,它实现指定的算法,参数算法名,如SHA-1或MD5voidupdatebytevoidupdatebyte[]voidupdatebyte[],intoffset,intlen添加要进行计算摘要的信息byte[]digest完成计算,返回计算得到的摘要对于MD5是16位,SHA是20位voidreset复位staticbooleanisEqualbyte[]digesta,byte[]digestb比效两个摘要是否相同,数字签名,应用的技术消息摘要,非对称加密数字证书CA证书授权(CertificateAuthority)中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档(相当地我们的身份证),白话数字签名(这部分可跳过,听前面的故事即可),原文明文可以被人或程序识别的数据。例如一个文本文件、一段歌词、一个Word文档、一首MP3、一个图片文件、一段视频等等。加密算法将数据搞乱掉的方法。密钥(密码)一个你在进行加密操作时给出的字符串,让加密算法不但把明文“搞乱掉”,而且要乱得“与众不同”。这样即使别人搞到了解密算法,如果没有当初加密时所使用的密码,一样无法进行解密操作。密文明文被加密算法和密钥加密后的结果。它看上去就是一堆乱码,没有人或程序能知道它到底表示什么信息。作为加密的一个实例,我将使用由我杜撰的“景氏替换加密算法”演示一下加密过程。明文goodgoodstudy,daydayup.密钥google景氏替换加密算法将明文中的所有的字母“d”替换成密钥。密文将“goodgoodstudy,daydayup.”中的所有字母“d”替换成“google”,就得到密文“googooglegoogooglestugoogley,googleaygoogleayup.”。这个密文乱得还可以吧一般人看了肯定不知道它是什么意思。那么什么是解密呢解密就是把密文再变回明文的过程。例如“景氏替换解密算法”就是将密文中所有与密钥相同的字符串替换成“d”。密文googooglegoogooglestugoogley,googleaygoogleayup.密钥google景氏替换解密算法将密文中所有与密钥相同的字符串替换成“d”。明文将“googooglegoogooglestugoogley,googleaygoogleayup.”中的所有“google”替换成“d”,就得到了明文“goodgoodstudy,daydayup.”。您肯定已经注意到了,我们在进行加密和解密时使用的密钥必须是相同的,例如在上例中,加密和解密都必须使用相同的密钥“google”。所以像“景氏替换加密算法”这种就被称为对称加密算法。目前最为流行的对称加密算法是DES和AES,此外,对称加密算法还有IDEA、FEAL、LOKI、Lucifer、RC2、RC4、RC5、Blowfish、GOST、CAST、SAFER、SEAL等。WinRAR的文件加密功能就是使用的AES加密算法。,非对称加密非对称加密算法是一类与众不同的加密算法,它的密钥不是1个,而是2个(一对),我们先姑且称它们为密钥K1和密钥K2。非对称加密算法的特点是,如果用密钥K1进行加密,则有且仅有密钥K2能进行解密;反之,如果使用密钥K2进行了加密,则有且仅有密钥K1能进行解密。注意“有且仅有”的意思如果用密钥K1进行了加密,是不能用密钥K1进行解密的;同样,如果用密钥K2进行了加密,也无法用密钥K2进行解密。这是一个非常重要的特性,至于如何在实际中运用这个特性,请看下文。,,我想给Clark传送一个AV小电影,又怕被他的老婆发现......话说俺得了一个很不错的AV小电影,想通过网络传送给Clark,可是又怕被他的老婆发现(因为Clark的老婆是一个超级黑客,她可以使用sniffer技术截获任何通过网线传送给Clark的数据。别跟我说用VPN,它超出了本文讨论的范围),怎么办呢对了,我们需要一个“将数据搞乱掉”的技术加密技术。我先使用WinRAR对小电影进行压缩,然后加上密码“TswcbyyqjsjhfL”(还记得么WinRAR的文件加密功能使用的是叫作AES的对称加密算法)。接着,将这个加密后的文件通过QQ传送给Clark。然后,兴冲冲地拨打Clark的手机“喂Clark么好久不见,呵呵......我给你发了个好东东呦,在QQ上,收到没......密码是TswcbyyqjsjhfL,对,就是天生我才必有用,千金散尽还复来的首字母,第一个和最后一个字母要大写呦......”可是,Clark,我是真的不知道你的老婆大人刚刚就在你的身边呀而且你也知道,我打电话从来都是喜欢很大声的......呜呜呜......在Clark跪了一夜的搓衣板之后,我们都明白如果是已经保存在自己硬盘上的文件,使用对称加密技术进行加密是没有问题的;如果是两个人通过网络传输文件,使用对称加密就很危险因为在传送密文的同时,还必须传送解密密钥。我们需要一个与众不同的加密算法,一个不需要传递解密密钥的加密算法。非对称加密正好可以满足我们的需要。基本思路是这样的首先,生成一对满足非对称加密要求的密钥对(密钥K1和密钥K2)。然后,将密钥K1公布在网上,任何人都可以下载它,我们称这个已经公开的密钥K1为公钥;密钥K2自己留着,不让任何人知道,我们称这个只有自己知道的密钥K2为私钥。当我想给Clark传送小电影时,我可以用Clark的公钥对小电影进行加密,之后这个密文就连我也无法解密了。这个世界上只有一个人能将密文解密,这个人就是拥有私钥的Clark。,后来......后来,Clark痛定思痛,决定申请一个数字证书。流程是这样的首先,登录当地的数字证书认证中心网站,填表-出示个人有效证件原件和复印件-缴费-等待数字证书认证中心制作数字证书-领取数字证书。如果您的公司需要申请大量的数字证书,还可以与认证中心的销售人员商量,先领取免费的试用版的数字证书供技术人员试用。后来的后来,我又得到了一本电子版的不良漫画,当然,我又想到了Clark。我先在数字证书认证中心下载了Clark的公钥证书就是一个含有公钥信息的文件,使用非对称加密算法对不良漫画进行加密,再将密文通过QQ传送给Clark。然后,我兴冲冲地拨打Clark的手机“喂Clark么好久不见,呵呵......我给你发了个好东东呦,在QQ上,收到没......已经用你的公钥加密了。用你的私钥解密就行了_”Clark兴冲冲地插入他的私钥(忘了说了,私钥并不是一个文件,而是一个USB设备,外形就跟U盘一样,至于为什么要这样,下一篇再说),解密,然后开始看漫画,完全没察觉他的老婆大人就在身后......,Clark,俺这个月手头有点紧......唉,这个月买了太多的书,到月底揭不开锅了。正巧在QQ上遇到了Clark1-2-3“Clark,我需要200两纹银,能否借给我”Clark“没问题。我这就给你转账。请给我一张借条。”1-2-3“太谢谢了,我这就用Word写一个借条给你。”然后,我新建一个Word文档,写好借条,存盘。然后,然后怎么办呢我不能直接把借条发送给Clark,原因有1.我无法保证Clark不会在收到借条后将“纹银200两”改为“纹银2000两”。2.如果我赖账,Clark无法证明这个借条就是我写的。3.普通的Word文档不能作为打官司的证据。好在我早就申请了数字证书。我先用我的私钥对借条进行加密,然后将加密后的密文用QQ发送给Clark。Clark收到了借条的密文后,在数字证书认证中心的网站上下载我的公钥,然后使用我的公钥将密文解密,发现确实写的是“借纹银200两”,Clark就可以把银子放心的借给我了,我也不会担心Clark会篡改我的借条,原因是1.由于我发给Clark的是密文,Clark无法进行修改。Clark倒是可以修改解密后的借条,但是Clark没有我的私钥,没法模仿我对借条进行加密。这就叫防篡改。2.由于用我的私钥进行加密的借条,有且只有我的公钥可以解密。反过来讲,能用我的公钥解密的借条,一定是使用我的私钥加密的,而只有我才拥有我的私钥,这样Clark就可以证明这个借条就是我写的。这就叫防抵赖。3.如果我一直赖着不还钱,Clark把我告上了法庭,这个用我的私钥加密过的Word文档就可以当作程堂证供。因为我国已经出台了中华人民共和国电子签名法,使数字签名具有了法律效力。您一定已经注意到了,这个使用我的私钥进行了加密的借条,具有了防篡改、防抵赖的特性,并且可以作为程堂证供,就跟我对这个借条进行了“签名”的效果是一样的。对了,“使用我的私钥对借条进行加密”的过程就叫做数字签名。(由于数字签名算法的速度比较慢,所以在实际对文件签名的过程比上面提到的方法稍稍复杂一些,这个在下一篇再讲)。,我是1-2-3,我真的是1-2-3,我是真的1-2-3正如您已经知道的,Clark的老婆是一名超级黑客就是传说中能用计算机作任何事的人。这不,不久前她就轻松入侵了QQ数据库,下载了Clark的所有好友的ID和密码以及聊天记录。然后,时不时地伪装成Clark的好友跟Clark聊天,搞得Clark最近总是神经兮兮、疑神疑鬼的。这不,昨天我在QQ上遇到了Clark1-2-3“Clark,最近还好吧我又搞到一个好东东呦,要不要”Clark“48475bbt556”Clark并不是疯掉了,那个“48475bbt556”也不是我跟Clark之间的什么通关暗语。这个“48475bbt556”就是Clark在键盘上胡乱敲上去的,不过,我却知道Clark是什么意思。我立刻把“48475bbt556”粘贴到Word里,然后用我的私钥对这个Word文档加密,再将这个Word文档发送给Clark。Clark在那边用我的公钥将Word文档解密,打开,发现里面写的就是“48475bbt556”,就知道QQ这边的确就是真正的我本人了。因为拥有我的私钥的人在这个世界上就只有我一人而已,Clark的老婆大人就是再神通广大也模仿不了,这就是数字签名的验证功能。顺便提一句,不但人可以申请数字证书,设备(例如Web服务器)也可以申请数字证书(叫作设备证书)。利用数字签名的验证功能,就可以验证服务器的身份了,这可是防钓鱼的终极解决方案呦。,原理和特点,每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(密钥),另一个公开的(公钥)。签名的时候用密钥,验证签名的时候用公钥。又因为任何人都可以落款申称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。在通讯中使用数字签名一般基于以下原因鉴权公钥加密系统允许任何人在发送信息时使用公钥进行加密,数字签名能够让信息接收者确认发送者的身份。当然,接收者不可能百分之百确信发送者的真实身份,而只能在密码系统未被破译的情况下才有理由确信。鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是a,b,其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为a,b的指令。这种方法被称作重放攻击。完整性传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击回想一下,还是上面的那家银行从它的分行向它的中央管理系统发送格式为a,b的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输a,b3,这样他就立刻变成百万富翁了。不可抵赖在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。,证书体系实现,JDKkeytool生成证书微软makecert生成证书,JDKkeytool生成证书,生成keyStroe(密钥库)文件,keytool在jdk1.6.0_10\bin下,其中-genkey表示生成密钥-validity指定证书有效期,这里是36000天-alias指定别名,这里是www.zlex.org-keyalg指定算法,这里是RSA-keystore指定存储位置,这里是dzlex.keystore在这里使用的密码为123456,控制台输出,这时,在D盘下会生成一个zlex.keystore的文件,生成证书,光有keyStore文件是不够的,还需要证书文件,证书才是直接提供给外界使用的公钥凭证导出证书,其中-export指定为导出操作-keystore指定keystore文件-alias指定导出keystore文件中的别名-file指向导出路径-rfc以文本格式输出,也就是以编码输出这里的密码是123456,证书生成成功,导入证书即可使用,Java中使用证书,见DEMOCertificateCoderTest,SSL及HTTPS,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密Encryption技术,可确保数据在网络上之传输过程中不会被截取及窃听。目前一般通用之规格为40bit之安全标准,美国则已推出128bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。,SSL应用举例(自签名证书),导入证书,将我们刚才的证书导入到我们的密钥库导入证书,其中-import表示导入-alias指定别名,这里是www.zlex.org-file指定算法,这里是d/zlex.cer-keystore指定存储位置,这里是d/zlex.keystore在这里我使用的密码为654321,控制台信息,修改配置,配置tomcat。先将zlex.keystore拷贝到tomcat的conf目录下,然后配置server.xml,Java代码见DEMO,SSL应用中不需要考虑具体的加密解密问题,基于SSL协议的认证过程。测试类的testHttps方法模拟了一次浏览器的HTTPS访问,CA数字证书,与自签名证书用法类似正式的CA数字证书据有法力效力数字证书CA证书授权(CertificateAuthority)中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档(相当地我们的身份证),
展开阅读全文