iOS 用密钥对数据加密解密

引言

在iOS App开发中,我们需要对账户,密码等个人私密信息进行加密处理,从而保证用户信息的安全。那么可以将这些私密信息保存到钥匙串(keychain)中,因为钥匙串的不可见性,可以保证用户私密信息的安全。
值得注意的是,将明文存入钥匙串中是不安全的。因此可以将用户私密信息通过算法加密后再存进钥匙串中,这样就更进一步的保证了用户的信息安全。

常用的加密算法

加密算法 = 对称性加密算法 + 非对称性加密算法

说明:加密算法通常分为对称加密算法和非对称假面算法。

一、 对称加密算法:

  1. 原理:信息接收双方都需要事先知道密钥和加密解密算法,并且这个密钥是相同的,之后就可以对数据进行加密解密了。
  2. 常见的有:AES,DES,3DES:
  • AES(Advanced Encryption Standard): 高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
  • DES(Data Encryption Standard): 数据加密标准,速度较快,适用加密大量的数据。
  • 3DES(Triple DES):是基于DES,对一块数据用三种不同的密钥进行三次加密,强度较DES更高。

二、 非对称性加密算法:

  1. 原理:通信双方A,B事先生成一个密钥对(私钥+公钥),然后A将自己的公钥发送给B,B也将自己的公钥发送给A,即通信双方将各自的公钥做一个交换。如果A要给B发送一条秘密电报,就需要用B给的公钥对电报进行加密,然后发送给B。B接收到这个秘密电报后,要想A给他传达了什么信息,就需要B用自己的私钥对电报进行解密。B向A发送消息时也是同样的道理。
  2. 常见的有:RSA,DSA,ECC。
  • RSA:是有RSA公司提出的。支持长数据加密。
  • DSA(Digital Signature Algorithm):数据签名算法,是一套数字签名保准(DSS)。
  • ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

私钥和密钥:非对称性加密算法中提到私钥和公钥的概念。其作用可描述为:用公钥加密的内容只能用私钥解密,用私钥加密的内容也只能用公钥解密。一般是,公钥加密私钥解密,准确的说应该是“私钥签名,公钥验证”。

线性离散算法 (非加解密算法)##

如MD5,SHA1,HMAC等就属于线性离散算法。这几种算法只是生成一串不可逆的密文,经常用于校检数据在传输过程中是否被篡改过。若使用相同的算法,却生成了不同的密文,那么可以说明数据在传输过程中被修改过。

哈希函数,如MD5,SHA这些都不是加密算法,有很多人称他们为加密算法,这是不正确的。这些算法没有密钥的概念,类似于指纹,是不可逆的。MD5是128位的,SHA有128,256等位,如SHA128,SHA256,SHA384。我们常用的Base64就更不属于加密算法的范畴了,它只是通过Base64编码,将一些加密后的密文中一些特殊的byte[]数组显式的显示出来,转换后,长度会增加,是个可逆的过程。

加密算法的选择

  • 非对称加密算法的运行速度比对对称加密算法的速度慢很多,当我们需要加密大量数据时,通常采用对称加密算法,以此来提高加密解密速度。
  • 对称加密算法不能实现数字签名,需要签名只能使用非对称算法。

折中办法:

  • 由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定了数据的安全性,因此当数据量很小时,我们通常采用的是非对称加密算法。
  • 我们在实际操作过程中也是这样做的,通常采用非对称加密算法管理对称算法的密钥,然后用对称加密算法来加密数据。
  • 这样一来就集成了两类加密算法的优点,既提升了加密解密的速度,也能安全方便的管理密钥。

密钥管理

你可以使用公钥和私钥来进行非对称加密,而使用对称密钥来进行对称加密。

当你从受密码保护的文件或钥匙串中验证身份时,可以提取其包含的私钥。拥有私钥后,也可以使用SecKeyCopyPublicKey(_:)提取公钥。这就是为什么我们通常把私钥存进钥匙串中,对公钥不做保存。

一、 生成密钥,保存私钥

Keeping a private key in a keychain is a great way to secure it. The key data is encrypted on disk and accessible only to your app or the apps you authorize. However, to use the key, you do eventually copy a plain-text version of it into system memory, even if briefly. Though this presents a reasonably small attack surface, there is still the chance that if your app is compromised, the key could become compromised as well. As an added layer of protection, on devices that support it and for certain operations, you can store a private key in the Secure Enclave.

在Apple《Certificate, Key, and Trust Services Programming Guide》一文中提到:将私钥保存在钥匙串(keychain)中,仍然有遭到破坏的风险。Apple建议把私钥存储在Secure Enclave中,并且只能存储256位的椭圆曲线私钥。


                
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值