公司项目是很注重信息的安全,在这里总结下在项目中使用到的一些技术。
先说下基本的加密算法对称加密和非对称加密。
加密算法通常分为对称性加密算法和非对称性加密算法:对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。
一、对称加密
对称加密算法又称传统加密算法。加密和解密使用同一个密钥。
1.1、对称加密算法示例
密钥:X
加密算法:每个字符+X
明文:Hello
密钥为 1时加密结果:Ifmmp
密钥为 2时加密结果:Jgnnq
1.2、优缺点
算法公开,计算量小,加密速度快,加密效率高
双方使用相同的钥匙,安全性得不到保证
1.3、注意事项
密钥的保密工作非常重要
密钥要求定期更换
2、经典加密算法
DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。
2.1、加密模式
ECB:电子密码本,就是每个块都是独立加密的。
CBC:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换。
只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。
非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
公开密钥和私有密钥是一对
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。
2.3、特点
算法强度复杂,安全性依赖于算法与密钥。
加密解密速度慢。
2.4、与对称加密算法的对比
对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
非对称加密有两种密钥,其中一个是公开的。
2.5、几种非对称加密算法:RSA、DSA、ECC
RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。
三、数字信封技术
3.1、理解
3.2、数字信封技术示例
为了保证信息传送的真实性、完整性和不可否认性,需要对要传送的信息进行数字加密和数字签名。其传送过程如下:
发送者A:
1) A准备要传送的数字信息(明文)
2) A对数字信息(明文)进行哈希(hash)运算,得到一信息摘要。
3) A用自己的【私钥(SK)】对信息摘要进行加密得到A的数字签名,并将其附在数字信息上。(数字签名)
4) A随机产生一个加密钥(DES密钥),并用此密钥对要发送的信息(明文)进行加密,形成密文。(对称加密)
5) A用B的【公钥(PK)】对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给B。(数字信封)
接收者B:
1) B收到A传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。
2) B然后用DES密钥对受到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。
3) B用A的公钥(PK)对A的数字签名进行解密,得到信息摘要。
4) B用相同的has算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。
5) B将收到的信息摘要和新生成的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
一般对账号和名字,我都是使用对称加密,如果是比较重要的比如存在本地的名字用来区别存储的数据,我都是先把数据+uuid+盐然后再进行对称加密。
非对称加密的使用我都是在用户注册账号的时候使用ECC生成一个密钥对,如果设备支持SE私钥存在SE中,公钥存在KeyChain中,如果不支持SE就把公私钥都存在KeyChain中,然后在注册时把公钥传给后台。再接下来每一次的功能时,都可以用本地的私钥对数据进行签名,然后上传后台,后台拿到数据用注册时得到客服端上传的公钥进行验签,如果验签成功再完成以后的功能。