项目系统功能开发二(10)

有关项目安全相关方面的内容,从项目一开始就已经介入,只不过现在来对使用到的相关的安全知识进行梳理

传输安全

有关服务信息的传输采用签名机制以及增加时间戳

170934_oFJV_3462519.png

增加签名可以防止信息的冒充,时间戳机制可以实现防止重放攻击等

其他认证信息的传输验证均使用MD5进行加密,防止信息被截取破解

认证安全

认证考虑了一种常见的挑战应答释放,即kerberos认证协议,也是一种基于认证服务器与应用服务器相结合的一种方式,但是考虑到服务器的原因最后也就没有使用。现在认证准备使用密钥交换协议来基于密钥进行认证登录,基于这一协议,我们进行了相应的研究以及demo的实现:

1. 思路展示

既然要实现安全短信加密器,那么工作就需要从两个方面展开,一个是最基础的信息加密,另一个则是更为重要的安全工作,也就是方便安全的加密密钥交换工作。

(1)信息加密方式:

常用的加密方式大体有:对称加密:AES、DES;非对称加密:RSA、SM2等 
1. 最初的想法是使用SM2加密算法,因为这是作为国产的非对称椭圆密码算法,SM2还是值得我们去做一下去使用的,所以准备采用SM2算法。SM2算法使用椭圆密码算法,是非对称的密码算法,私钥自己保留进行解密,公钥公布供别人加密使用。 
基于别的同学对SM2的Java实现,自己也对其进行了研究,并且导入了实现的SM2jar包,经过测试,加密工作能够走通。 
2. 采用SM2算法可以实现信息的加密工作,但是当引入了DH密钥交换协议之后发现,在DH密钥基础上再去使用非对称的加密算法有些复杂,SM2接口自行产生私密钥,与DH交换密钥产生一定的冲突,并且非对称的加密算法在加解密时间上会远远逊色于对称密码算法,所以决定改用对称密码算法。之后便完成了对DES以及AES算法接口的实现。

(2)密钥交换方式:
基于安全考虑,毫无疑问,这里采用DH密钥交换协议进行密钥的交换,所要做的主要工作就是要完成对DH交换密钥接口的开发。DH密钥交换算法的参数主要有g:常数,与私钥结合产生私钥时使用;p:随机数,作为模数在用私钥产生私钥以及产生加密密钥K时使用;x:密钥,用于产生公钥以及加密密钥;y:公钥,由私钥产生,并且可以结合私钥产生加密密钥;k:密钥,由私钥以及公钥结合产生,用在信息加密中。基于安全考虑,DH算法中的g,p,x,y参数全都使用BigInteger形式,并且常数g,随机数p全都采用RFC3526中的大随机数。
(3)安全的信息加密实现方式:
已经确定了采用DH密钥交换协议以及对称密码算法之后,接下来的便是根据这些技术提出系统的实现方式。

1. 最基本的实现思路就是:用户打开系统输入口令来产生DH私钥x,由DH私钥x产生DH公钥y。然后通信双方采用短信的形式交换公钥,利用交换后的公钥以及自己的私钥产生DH加密密钥K,从而进行信息加密传输。 
2. 具体的实现: 
最初想法:在DH密钥产生界面中,用户输入口令,根据用户的口令直接将口令初始化为DH私钥X,基于私钥x产生公钥y,将y打印到屏幕上,用户复制y将公钥发送出去。这样实现的方式无法实现自己私钥公钥以及别人的公钥的记录,也就无法完成多次通信加密以及解密工作,所以提出改进。 
改进想法: 
在DH密钥产生时,需要输入口令和自己的手机号。 
将口令进行MD5转化存入数据库,键值对为:自己的手机号—口令。 
私钥x使用口令的MD5值产生,方便快捷。 
产生的公钥Y以文件的形式保存在本地,文件名是xxx.txt,xxx指手机号。 
别人发送过来的公钥y2也以同样的方式保存在本地文件中,文件名是xxx.txt,xxx指发送者的手机号。 
将自己的手机号同样保存在本地文件,文件名是me.txt,每个手机值对应一个。 
3. 加解密: 
加密: 
加密需存在本地me.txt文件,别人的公钥的存储文件xxx.txt。 
加密时,用户输入口令,基于口令以及读取me.txt访问数据库获得私钥 
读取别人的公钥的存储文件xxx.txt,根据公钥以及私钥产生加密密钥K 
使用DES算法,以K为密钥进行加密 
解密: 
解密需存在本地me.txt文件,别人的公钥的存储文件xxx.txt。 
解密时,读取me.txt访问数据库获得私钥 
读取别人的公钥的存储文件xxx.txt,根据公钥以及私钥产生加密密钥K 
使用DES算法,以K为密钥进行解密 
4. 公钥交换处理: 
公钥交换采用明文形式,以“yyy”为标志,用“:”将“yyy”标志与公钥分开。 
获得公钥后将公钥保存在本地 
5. 密文处理: 
密文以“yyyy”为标志,用“:”将“yyyy”标志与密文分开 
获得密文后以解密方式进行解密,然后以明文形式展现 
6. 明文处理: 
明文无标志位,不用处理,直接展示。

/*
 * Diffie-Hellman安全算法的工具类实现 
 * 算法描述:
 * 假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA(XA<q),并计算公开密钥YA=g^XA mod q。
 * A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=g^XB mod q。
 * B对XB的值保密存放而使YB能被A公开获得.
 * 用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q.同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q. 
 * 
 * g:参数,接口采用固定的数字,方便接口使用
 * 
 * x:私钥,采用用户输入口令方式
 * 
 * q:参数,使用Java接口获取大整数
 * 
 * y:公钥,工具类产生
 * 
 * k:密钥:工具类产生
 */
public class DhKey {
	
	private BigInteger g;
	private BigInteger x;
	private BigInteger q;
	private BigInteger y;
	private BigInteger k;
	
	public DhKey(String x){
		this.q = new BigInteger("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF",16);
		this.g = new BigInteger("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF",16);
		this.x =new BigInteger(x,16);
	}
	/*
	 * 生成公钥,根据自己的私钥
	 *
	 */
	public BigInteger getY(){
		y = g.modPow(x, q);
		return y;
	}
	/*
	 * 生成对称密钥
	 *  @param y
	 *           对方传来的公钥
	 */
	public BigInteger getK(String y){
		
		BigInteger y2 = new BigInteger(y);
		
		k = y2.modPow(this.x, this.q);
		
		return k;
	}
	
	

}

 

转载于:https://my.oschina.net/u/3462519/blog/995673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值