【车载开发系列】安全算法与安全访问
【车载开发系列】安全算法与安全访问
- 【车载开发系列】安全算法与安全访问
- 一. 网络传输编码
- 1)Base64编码
- 2)十六进制编码
- 二.四种加密算法
- 1)消息摘要算法(摘要算法,哈希算法)
- 2)对称加密算法
- 3)非对称加密算法
- 4)数字签名
- 三. 安全访问
- 1)安全访问建立的步骤
- 2)报文简单描述
一. 网络传输编码
16进制编码和Base64编码,都是比较常用的网络传输中使用到的编码。
1)Base64编码
它是通过64个字符来表示信息的一种方法,并不要把它当做一种加密算法,因为任何人都可以通过Base64编码后的内容逆向得出编码之前的信息,这里可以简单的理解为通过Base64编码之后,将二进制信息编码成可打印的字符,便于在网络上传输。
2)十六进制编码
一般需要知道4位二进制数据对应一位16进制数据,十六进制是由09和AF来表示,还有是不区分大小写的。
二.四种加密算法
1)消息摘要算法(摘要算法,哈希算法)
所谓的消息摘要算法,就是对一个消息或文本,产生一个固定长度的值(也就是摘要),采用的是单向的Hash函数对消息或文本进行计算产生,且不同的明文生成的摘要结果 "总是"不同的,相同的明文产生的摘要 “必定” 一致。这里目前最常用的摘要算法有 MD5和SHA1。
MD5是由MD4,MD3,MD2改进而来,摘要长度为128位,在目前应用比较广泛。SHA有SHA1,SHA-224,SHA-256,SHA-384等,目前应用最广泛的也就是SHA1和SHA256这两个,SHA1输出的摘要长度是160位,而SHA-256输出的也就是256位,从输出位数上就可以比较出安全性,SHA1比SHA256要低,但相比于MD5的128位,SHA家族是更安全的,但是位数长带来的也有负面的影响,MD5速度要比SHA家族更快
2)对称加密算法
在对称加密算法中,数据发送方将原始数据和加密密钥一起经过特殊加密算法处理后,使其变成加密密文发送出去。
收信方收到密文后,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
优点:算法公开,计算量小,加密速度快,加密效率高,加解密的告诉和使用长密钥时的难破解性
缺点:安全性过于依赖密钥,泄露密钥就意味着任何人都可以加解密数据,因此对秘钥的保存至关重要
目前流行的主要有DES和AES:DES的密钥长64位,但事实上只有56位参与运算(8和8的倍数都为效验位),相对于DES,AES算法作为新一代的数据加密标准,汇聚了强安全性,高性能,高效率,易用和灵活的优点,包含(128,192,256)三种秘钥长度,比DES算法的加密强度更高,更为安全。
3)非对称加密算法
非对称加密算法又称为公开密钥加密算法,需要两个密钥:一个称为公开密钥即为公钥,另一个称为私有密钥即为私钥,公钥和私钥配对使用,公钥加密只有对应私钥可以解密,私钥加密,只有对应公钥可以解密。因为传输数据的两方分别保存的分别为公钥和私钥,所以被称作非对称加密。
这里加密和签名是由区别的:需根据具体情况选择
加密:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证;
优点:包含两种密钥,其中一个公开的,一个保密,即使在获取到公钥,加密算法的情况下,也无法获取公钥对应的私钥,也无法对密文解密。
缺点:由于其复杂程度高,加解密速度远远没有对称加密解密的速度快。
目前使用最广泛的非对称加密算法:RSA。
4)数字签名
数字签名是对非对称加密技术和摘要算法的综合运用,也就是将通信内容的摘要信息使用发送方的私钥进行加密,然后将密文与原文一起传输,接收方使用公钥解密被加密的摘要,然后使用相同的摘要算法,对接收到的信息采用相同的方式产生摘要,与解密的摘要进行对比,相同则验证通过,说明信息是完整的。
发送方:这里发送方可以简单说先使用SHA1(其它摘要算法)对数据提取摘要,再用私钥加密,发送的数据为原始数据和加密后的数据
接收方:而接收方简单的可以理解为用对应的公钥解密摘要数据(这里可以验证信息是由对应私钥拥有者发出的,保证了数据发送者的身份),再通过发送的原始数据进行摘要算法,把两份数据进行比较(这里验证了信息的完整性,保证没有被篡改过)
常用的数字签名方法有:MD5withRSA,SHA1withRSA。
三. 安全访问
主要是对客户端访问服务器做了一定的限制,客户端和服务器之间需要通过匹配seed(种子)和key(密钥)来建立安全访问。
1)安全访问建立的步骤
大致的安全访问步骤如下:
- 客户端向服务器请求seed
- 服务器向客户端发送seed
- 客户端收到seed后根据指定算法计算出key,并发送给服务器;
- 服务器同样根据seed和指定算法计算出key,并与客户端发送的key进行比对,一致的话则建立安全连接。
2)报文简单描述
请求seed: 27 01 (03, 05, 07, …, 41) - 这里的子功能只能是奇数01 (03, 05, 07, …, 41)
响应seed: 67 01 (03, 05, 07, …, 41) xx yy - 这里的xx yy就是seed,其中xx高字节
发送key: 27 02 (04, 06, 07, …, 42) - 这里的子功能只能是偶数02 (04, 06, 07, …, 42)
肯定响应:
67 02 (04, 06, 07, …, 42) - 说明已经建立安全连接
否定响应:
7F 27 24 - 请求错误,请求顺序不对。比如没有请求种子的前提下直接请求Key。
7F 27 35 - key匹配不上
7F 27 36 - 超过最大尝试次数。此时需要等待10秒后才可以再次请求Seed服务(错误一次NRC35,错误第二次NRC35,错误第三次NRC36)
7F 27 37 - 延时要求不满足,一般需要等待完成10秒之后才能