前言
平常每周都会有一些心得感悟,这些在大家工作中可能会有许多共性。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常学习工作的想法和所得,这是一个很好的互动和文章分享的痛点。
这是第二十篇。
信息安全技术
简单来说,信息安全技术就是对数据进行保护的技术,避免数据被窃取或者破坏。对电子数据的攻击方式有2种:被动攻击就是在传输过程中被截取信息、或者通过载体上窃取赋值数据;主动攻击就是对传输或者存储的数据进行恶意删除、篡改。
密码技术
密码技术是解决问题的一种有效的方法。发送者(信源)通过对数据(明文)使用特定的算法及秘钥进行加密后得到新的数据(密文)传输,接收者(信宿)对接收到的数据再根据算法和秘钥进行解密得到原始数据。对于加密和解密使用相同的秘钥的算法称作对称密码体制,不同的就称作非对称密码体制。
对称的密码体制有DES, 3DES, IDEA, AES、SM4等算法。
非对称密码体制有RSA, DSA, ECC, SM2等算法。
对称算法一般是块加密算法,加密解密过程使用同一个秘钥,适合大量数据的操作。算法公开、计算量小、加密速度快、加密效率高。由于实现需要知道密钥,导致秘钥维护大。应用场景主要就是数据加解密。
非对称算法加密解密过程使用不同的秘钥,运算相对慢一点,适合数据量小的数据的操作,安全性比较高。公钥加密+私钥解密的时候,适用于加密传输。私钥加密+公钥解密,适合用于签名验证。
摘要与数字签名
密码技术主要用于数据的加密,对于数据完整性的校验则使用散列函数和数字签名来解决。
散列算法通过对不同数据进行计算得到一个固定长度的结果数据。原始数据长度没有限定,而且不同的原始数据进行运算得到的结果一般是不一样的。散列算法是不可逆的,无法通过结果得到原始的数据。 一般在传输数据的时候,同时传递原始数据和结果数据。接收者对收到的原始数据部分进行计算得到一个结果,然后跟接收到的结果部分对比,确认数据没有被改变。
数字签名就是发送方使用自身的私钥加密数据,然后接收方使用发送方的公钥解密数据。如果能够得到正确的结果,那么就可以确认这个消息是发送方发送的,因为只有发送方才能使用私钥加密。这个就是不可抵赖性。
但是非对称算法加密慢,总不能把所有数据都是用数字签名的方式吧。一般我们都是对计算出的散列值做数字签名就可以了。大概流程如下:
- A对消息M使用散列算法得到摘要MD1
- A对摘要使用私钥加密得到签名DS
- A把消息M和签名DS发送给B
- B收到消息M和签名DS, 对消息M使用散列算法得到摘要MD2
- B使用A的公钥解密签名DS得到签名的MD3(A的公钥能解开的必须是A私钥加密的)
- B对比MD3和MD2,如果一致就确认消息是A发送的了,这里MD1, MD2, MD3都是一样的
这里我们假设B确定知道了A的公钥,但是实际应用中,我们需要有一个机制来保证,B获取的公钥就是A的公钥。否则,就有可能受到中间人攻击,被骗了,其实消息来自于第三者C。
公钥交换
公钥的公布使用的是PKI技术,公钥存在与一个数字证书中,然后这个证书需要有一个可信任的证书机构(CA)来签发。数字证书包含公钥、主体、签发日期、有效日期、序号、签发者等信息。
证书的生成流程:
- 主体通过特殊程序创建公钥和私钥,然后保存好私钥,把公钥和其他信息发送给注册机构
- 注册机构收到信息,生成证书签名请求
- 注册机构验证材料、确定主体拥有对应的私钥
- 完成上述步骤后,注册机构把所有资料上传给证书机构,证书机构对用户生成数字证书。可能是X.509标准格式的证书。发送证书给主体,并且保存证书记录
- 主体获取证书
怎么确认证书是可信任的呢, 那就是证书机构对这个证书使用私钥作了签名,使用者可以使用证书机构的公钥验证,确定这个证书是证书机构颁发的,并且里面的信息是可以信任的。这里又陷入了一个问题,怎么知道证书机构的公钥是可信任的呢。这里有个证书机构的层次,下级的公钥需要上一级的证书机构认证,直到最顶级的证书机构,最顶级的证书用的是一个自签名证书公布他的公钥,就是证书发布者和主体是一样的,默认最顶级的自签名证书是可以信任的。这样一级级认证,最后确认证书机构的公钥是可以信任的,用来验证他签发的证书也是可以信任的。
对于不同PKI域的证书,顶级CA交叉认证。
证书的应用
之前做iOS APP开发的时候,如果要发布app还需要申请对应的证书。证书就是用来对app包进行加密, 然后苹果通过对app包校验,来保证安装的应用的确是你发布的,没有被篡改过。 同时,苹果还在中间添加了一些小伎俩, 通过证书里面的配置文件,控制不同类型证书的用途及适用的设备,从而通过此来收取开发者费用。比如,个人证书只能添加一台设备默认安装(不需要经过appstore下载),企业证书却可以添加几百台默认安装。
下面是苹果证书申请的流程:
0、交钱申请一个开发者账户,开通权限。 这里个人用户比较简单,企业用户还需要提供一个邓白氏码,表示你是真正存在的一个企业。
1、开发者本地生成certSigningRequest文件,在这个过程中,苹果会生成一对公钥与私钥, 在certSigningRequest中会包含公钥,私钥保存在本地机器中, 可以通过keychain看到
2、开发者到苹果开发者网站申请证书, .cer证书(分为开发和分发等类型)
3、安装这个证书后,然后安装对应的私钥后 本地相当于登录了这个账号,可以进行对应的操作
4、创建AppId, 主要是用于后面创建对应的mobileProfile
配置Provisioning Profiles文件, 选择对应的AppId, 还有类型。 如果是开发证书,还可以选择设备列表
开发者下载Provisioning Profiles文件, 打包的时候就可以选择对应的证书了。
更多
今天是五一长假第一天,疫情原因也没有出去浪,宅在家里好好学习一下。个人计划清单越来越长了,得花时间好好地消灭一下了,难得这么完整安静的假期,且行且珍惜!
信息安全相关的算法了解有待深入,前段时间买了一本书《密码学与网络安全》,加油搞定之。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io/
掘金主页: https://juejin.cn/user/2084329776486919