iOS之加密安全设计

公司项目是很注重信息的安全,在这里总结下在项目中使用到的一些技术。

先说下基本的加密算法对称加密和非对称加密。

加密算法通常分为对称性加密算法和非对称性加密算法:对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。非对称算法与之不同,发送双方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的要少用。

二、非对称加密
2.1、理解

非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。
非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
公开密钥和私有密钥是一对
如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

2.2、非对称加密算法示例
1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
4.A将这个消息发给B(已经用B的公钥加密消息)。
5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。

2.3、特点
算法强度复杂,安全性依赖于算法与密钥。
加密解密速度慢。

2.4、与对称加密算法的对比
对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
非对称加密有两种密钥,其中一个是公开的。

2.5、几种非对称加密算法:RSA、DSA、ECC

RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。

三、数字信封技术

3.1、理解

数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。数字信封是实现信息完整性验证的技术。
PKCS#7中将数字信封作为术语进行定义,而在正文中对进行了如下解释:数字信封包含被加密的内容和被加密的用于加密该内容的密钥。
虽然经常使用接收方的公钥来加密“加密密钥”,但这并不是必须的,也可以使用发送方和接收方预共享的对称密钥来加密。当接收方收到数字信封时,先用私钥或预共享密钥解密,得到“加密密钥”,再用该密钥解密密文,获得原文。数字信封技术使用两层加密体系。

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中,然后在注册时把公钥传给后台。再接下来每一次的功能时,都可以用本地的私钥对数据进行签名,然后上传后台,后台拿到数据用注册时得到客服端上传的公钥进行验签,如果验签成功再完成以后的功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值