对于网络安全的知识比较匮乏,最近在读《深入JAVA虚拟机》一书,讲到了JAVA虚拟机的安全控制问题,想起本科的时候做过一个网络硬盘项目,其中纠结讨论的就是一个验证客户端和服务端以防止假客户端或假服务端欺骗的问题,一并总结了放在这里。
一、C/S结构网络应用验证
如果是广域网的C/S应用,比如QQ之类的,在进行通信之前,需要有一个彼此验证身份的过程。我们假设用户通过http协议发送的信息是可能被抓包软件捕获的,这样就不能明文传输用户密码等信息,怎样建立一个链接方式假冒的客户端或假冒的服务端骗取用户信息呢?当初我们使用了如下的协议方式:
使用语言可以将上述过程描述如下:
1.客户端接受用户输入的用户登录用的Client ID和密码,然后将Client ID发送给服务器端。
2.服务器端收到后从数据库中查出对应的Client ID,验证其存在,并用数据库中对应的密码(用户设置的密码经过MD5加密的字符串)采用AES加密算法对一个随机产生的通信加密密码 和ID进行加密后生成字符串,连同没有加密的ID一同发回给客户端。
3.客户端确认ID是自己的,使用用户输入的密码,采用MD5加密方法生成解密字符串,对传输过来的加密字段进行解密后获得下一步传输所用的加密密钥,并验证加密后的ID是否正确,即服务端是否有误。进而使用解密后的密码对ID再次进行加密,传输给服务器端。
4. 服务器端接收使用上次发送时产生的随机密码加密的用户ID,如果解密正确后,则确认客户端有效,正常的通信才能够真正开始。
这里利用了MD5加密的时候理论上无法逆向生成明文的特性,在第三步验证服务器端的真实性,即默认服务器端才可以保存有用户设置的密码,第四步服务器端会通过对于用户ID的解密验证客户端不是假冒的,即即使一个假冒客户端知道有效的client ID,没有正确的密码也无法解密下次通讯需要的密码。这样,无需在两端传输密码信息,避免假冒客户端和假冒服务器的问题,基本保证系统的安全性。
二、JVM中的代码签名和认证机制
在JAVA语言设计的时候就考虑到要对JAVA编译后的二进制文件进行网络传输,因此基于公钥/私钥机制设计了代码签名和认证的机制,用于保证二进制文件在网络传输过程中不被替换或者修改。对一个jar文件进行数字签名的过程如下图所示:
1.首先,要对未加密的class文件和数据文件进行一个单向散列的过程,形成一个散列值。这个散列值的位数越多,就越能保证安全,因为由不同文件产生相同散列的可能性就越小。
2.第二步是使用发布这个jar包的人的私钥对上一步所得到的散列值进行签名,即加密。对于散列值进行加密比对数据文件进行加密速度要快,而只要当冒充者拥有你的私钥时,才能同时替换这原未加密文件和签名之后的散列值。
3.第三步是将上面的两部分组合到jar文件中去,就可以用于传输了。
在接收到该jar文件的使用者进行验证的过程如下图所示:
1. 取出未加密的文件进行散列计算,得出散列值。
2. 取出签名后的散列值,使用作者公布的公钥进行解密(任何使用私钥加密的东西都可以用公钥解密),获得计算后的散列值。
3. 比较两个散列值是否正确,如果正确就说明签名验证通过,jar包没有被修改,否则验证失败,jar包不可信,不予以执行。
通过这样的简单散列和加密的过程,就可以保证jar包的可信度。这里面仍然有很多问题,比如公钥获取是否可信?如果公钥本来就是假的,或者jar包的生产者本来就是个意欲进行破坏的人,这就无法保证安全性了。至于公钥的问题可以使用中立的安全机构进行同样方式的签名予以保证,这就是所谓的“证书”(塞班系统的软件签名也是这个样子的吧……)。而密码学解决不了所有的问题,只能从形式上证明所设计或使用的协议正确性。
JAVA虚拟机的安全机制还有很多方面,比如使用类装载器进行防治替换等等,以后有机会再进行总结和分析。
分享到:
相关推荐
熟悉非对称加密算法,掌握私钥和公钥再签名和加密中的应用,了解PGP工具的操作。这是一个网络安全协议基础验证试验
提出了一种新的基于分层的网络安全协议验证方法。首先对要验证的安全属性进行划分,将其分成若干安全子属性;其次对要进行验证的安全协议在安全性等价的条件下进行转换;然后逐步剖分成一个自底向上的多层协议,如果...
,更好地保证了网络安全性。 AP为两次握手验证,口令为明文,验证过程仅在链路初始建立阶段进行。当链路建立阶段结束后,用户名和密码将由被验证方重复地在链路上发送给验证方,直到验证通过或者中止连接。PAP不是...
WEP中文全称“无线等效协议”,它使用RC4加密算法,拥有“开放系统和共享密匙”两种身份验证方式,此外,WEP提供的密匙长度也有64 位、128位和152位之分,密匙越长,安全性越高。由于WEP存在一定的安全隐患,因此...
智能化电视网络安全协议的验证方法综述.pdf
安全协议用于实现开放互联网络的通信安全, 进程代数是一类使用代数方法研究通信并发系统理论的 代数的安全协议验证是以进程代数作为安全协议描述语言的安全协议形式化验证方法 9描述了基于进 议验证研究的!种主要...
网络安全技术- 动态路由-05 验证RIP协议.mp3
形式化验证基于可认证网络编码的网络传输协议安全性,孙智勇,杨铭熙,网络编码通过网络节点对传输信号的编码处理,可以提升网络信息吞吐量、节约网络资源和减少转发次数。但是在构建网络编码的过程中
网络安全技术- 动态路由-06 验证RIP协议路径选择.mp3
于区块链的网络安全机制具有去中心化、不可篡改、可追溯、高可信和高可用的特性,有利于提升网络安全。探讨了区块链在网络安全方面的应用方案,分析了基于区块链的网络安全机制的主要技术特点和方法以 及未来研究...
近期国内外很多安全研究人员使用Tamarin对一些经典安全协议进行分析,并发现了经典协议的漏洞,其中包括TLS核5G通信协议,以及最近火爆流行的ECU安全通信协议SecOC。 本文档为Tamarin用户手册,是学习Tamarin的最佳...
在网络安全领域,有很多网络安全技术,如防火墙、入侵检测、安全扫描、网络嗅探、协议分析、流量统计、网络管理以及蜜罐技术等,无论是研究这些技术的原理,还是直接使用这些技术来设计网络安全系统,都会遇到它们的...
IP数据包进行身份验证和加密,在网络层为IP协议提供安全服务,还通过引入在线第三方实体为通信节点的身份安全和平台安全提供安全服务,进而解决IP协议的完整性、安全性、抗重放、通信节点身份鉴别和平台可信等网络...
开发了一个基于该建模算法“网络安全协议验证模型生成系统”,该系统可高效地对安全协议进行分析与验证,系统在对攻击者建模时采用偏序规约、语法重定序及类型检查等优化策略以提高验证效率,有效地缓解了模型检测...
安全技术-网络信息-Adhoc网络协议安全性的形式化验证研究.pdf
无线移动网络具有节点资源受限的特点,为其设计和实现高效而可靠的安全协议很困难。基于可信第三方和failsafe协议,提出了一种适合于资源受限网络环境的安全协议。利用SVO逻辑对协议的安全性进行了形式化验证。
网络游戏-在简单网络管理协议上增加用户安全验证的方法.zip
为确保无线网络安全认证,应用模型检查工具SPIN对EAP-TLS认证协议进行建模,根据SPIN给出攻击轨迹,指出EAP-TLS可能存在双向认证失败的安全隐患,从抵抗攻击和协议改进提出了基于隧道的认证方法。使用SPIN PROMELA语言对...
4、新通信协议,防抓包,更高的安全性 5、单卡、用户多模式验证登录 6.含安装、使用教程 天盾2021V6.5.7新版特性 1、支持多软件同时管理 2、支持制卡代理端,方便管理 3、独家远程更新,实现软件版本的强制升级 4...
1.3 Internet的安全 3 1.4 加密工具 4 1.4.1 加密基础 4 1.4.2 机密性 5 1.4.3 对称加密算法 6 1.4.4 不对称加密算法 7 1.4.5 身份验证和完整性 8 1.4.6 身份验证 8 1.4.7 消息的完整...