[从智能锁谈STM32安全技术 学习笔记] 二. 加解密技术

2019-12-28  本文已影响0人  二当家的666

声明:版权归原作者所有,如有侵权请联系删除。

无论通讯安全还是设备安全,都离不开加解密技术。密码的背后一定是加解密技术。

加解密技术说白了就是变换,加密变换和它的反变换--解密变换。通过这种变换,可以提供之前所说的信息安全的三个属性(服务):保密性、完整性及可用性。在讨论加解密算法应用时所提供的服务时不大谈论可用性,因为算法总是要可用的。

同时,又把广义的的完整性细分为:狭义的完整性认证性,就是完整性和真实可靠分离了。这样,加解密技术也有三个属性(服务),也叫 CIA,保密性完整性可认证性(Authentication)。

能够提供保密服务的有对称密钥和非对称密钥,能够提供狭义完整性服务的有单项散列函数,能够提供认证鉴别类服务的有基于非对称密钥技术的数字签名,以及基于对称密钥的消息验证码MAC。

2.1 三类加解密技术与历史

2.2 加解密的参数模型

对加解密技术定义模型,至少2方参加,加密方(Alice)和解密方(Bob)。A 和 B 之间的距离可以是空间上的(如北京到上海,要考虑到不同路由器之间的不安全通信连接),也可以是时间上的(如今天的你和明天的你进行一段加密与解密之间的对话)。

A对一段明文,用一个密钥进行加密,形成密文。B收到密文,用一个密钥进行解密,得到明文。

针对密钥的个数,有3种情况:

2.3 单向散列函数

在加解密技术里,散列=摘要=哈希

加解密技术中的摘要,具有2个特征:

单项散列函数的用处:

构成密码级的散列函数主要是MD5,SHA1,SHA2(包括 SHA-256 和 SHA-512,而 SHA-224 是 SHA-256 的删减版,SHA-384 是 SHA-512 的删减版),SHA3(输出长度: 512、384、256、224、64位)。SHA3 并不是要取代 SHA2,因为 SHA2 目前并没有出现明显的弱点。

CRC32 也是单向函数,但不是加密级单向函数,原因:加密级单向函数要求:不容易构造碰撞,就是已知明文和哈希值,不能轻易构造出另外一个明文对应同一个哈希值。

MD5 和 SHA1 在某种意义上被攻破了,不再推荐使用

在MCU开发中使用单项散列函数,通常就是2个参数:散列函数的类型、明文。

2.4 对称加密技术

对称不对称,指的不是加解密过程,而是加密和解密所使用的密钥。加密和解密所使用的钥匙一样,称为对称密钥

对称密钥技术的发展非常迅速,应用简单,使用广泛,各种各样的文件、文本、声音、图像的保密都是通过对称密钥技术来保护的。如果需要保密地传输一个固件,给固件加密的一定是对称密钥技术。如果上网需要 https,最终加密传输网页的也一定是对称密钥技术。

对称密钥怎么使用?对称密钥算法,如果接口封装的好,一定至少有2个参数:密钥、明文。这个密钥参数也很简单,如果是 128 bit,那么密钥长度就是 16 个字节。

通常密钥都很小,然而矛盾的是,大部分时候需要加密的内容都很长。几个 Byte 的密钥长度与几百 MB 大小的文件,如何使用长度很短的密钥对长度很长的文件进行加密呢?

有2种方法:

对于第一种方法,流加密,存在一个问题:如何生成密钥流和明文长度大小一样。理想情况下,有一份和明文一样长的随机数做密钥,这样当然安全,可是,密钥这么长,怎么记录,怎么传输,都是问题。现实中还是从一个密钥,通过一种算法,进行计算,生成密钥流。

对于第二种算法,分组加密,看上去很好,符合工程技术的常见思维,对问题分解然后针对每个小块处理。但块与块之间是否就是独立的关系呢?块与块之间独立,对带来安全问题。

对于分组加密,如果每个位置上的数据独立,加密出来的数据总是一样,会有问题。同样的道理,如果每次对一个消息报文加密出来的结果都是一样,也会存在安全问题。

所以加解密技术也要保证:对于一个文件同样的明文出现在每一处的解密不一样,一个文件今天和明天的加密结果也不一样。如何做到?通过一个初始向量,加上分组连接模式,而这个初始向量是可以公开的,而且每次不一样。

从模型上,如果使用一个对称密钥技术,至少需要2个参数:明文、密码。如果安全点,至少需要4个参数:明文、密钥、初始化向量、分组模式。

对称加解密算法有哪些?

对称加密算法常用的5组分组模式:ECB(电子密码本)、CBC(密文分组链接)、CFB(密文反馈)、OFB(输出反馈)、CTR(计数器)。

对称密钥具有简单、速度快的优点,但缺点也很明显。在加密模型中,加密方A(Alice),解密方B(Bob)。对称密钥技术下,A 和 B 必须共享同一个密钥,这样 A、B 之间才能进行保密通信。这就引出了一个问题,如果 A 和 B 之间隔了千山万水,怎么样 A 和 B 之间共享一个密钥呢?在这个问题的解决,非技术手段,就是把 2 个需要通信的召集在一起,面对面协商出一个共享密钥。但这个手段,在过去,信息技术不发达、互联网技术不发达的情况下,还可以勉强接受。在今天,我们和每一个网络服务之间都需要随时随地的进行保密通信,面对面协商根本就不可能,这就必须依赖技术手段。这个技术手段就是非对称加密技术,依靠非对称加密来传输对称加密的密钥。

2.5 非对称加密技术

非对称加密技术指的是加密、解密的密钥不相同。

一对密钥:

因为每个人都可以使用公开的密钥对要发送给我的信息进行加密,对称密钥技术又叫公钥技术。

反过来(用私钥加密,发送给所有人),计算上可以,但是保密性已经不存在了,因为我已经把公钥公开给所有人,所有人都可以看到这个秘密。

但是这个方法也是有用的,如果你用私钥加密一段数据,其他所有人都有你的公钥,能够解开验证其中的内容,就证明是你发送的,这样你就抵赖不了,这就是签名技术。不过在签名体制里,就不能叫加密解密,叫它用私钥签名和用公钥验签。

公钥是用来加密的,私钥是用来解密的;私钥用来签名,公钥用来验签。

非对称机密技术,有 2 个主要的用途:

非对称加密技术提供的保密服务有在密钥管理方面的优点,是否可以取代对称加密技术呢?不行,原因在于性能。非对称加密技术都是基于一些数学难题,即使正常运算,运算量也很大。非对称加密的性能比对称加密要慢一个数量级,无法满足许多通信实时性要求高的场合。

非对称加密技术,性能不能,还有什么用呢?利用非对称密钥在钥匙管理的有点,来传输对称密钥。可以预先设计好的对称密钥,或者临时生成的会话密钥,通过非对称加密技术构造的管道传递出去。

非对称密钥技术目前有哪些成熟算法?

但是所有的非对称密钥技术都不能防备一个问题:加入有人假冒Bob,怎么办?这就是中间人攻击的问题,只有采用数字证书才能解决。因为在任何情况下,我证明我是我,都是很难另不认识的人相信的。数字证书是靠一个可信第三方解决了这个问题。

2.6 数字签名与消息验证码

信息安全的服务除了保密性,还有完整性。信息安全的完整性可以扩展为狭义的完整性服务和认证服务。

如何实现认证服务?就是将单向散列函数与加密技术结合来实现认证服务。主要认证服务有 2 种:

2.6.1 数字签名

数字签名的一般流程:现将要签名的文档,进行一个哈希运算(比如使用SHA-256,计算出32个字节的摘要),然后将摘要根据一定的标准,组成一个数据块,根据这个数据块,使用非对称加密技术的私钥对他进行签名运算。注意,签名的对象是哈希后的值,这样就避免了非对称密钥的速度慢的缺点。

签名总是随着明文发送给其他用户,因为公钥是公开的,其他用户如果需要验证这份文档是否完整可靠,只要用公钥解开签名中的哈希值,同时再计算一下明文的哈希值,如果这两个哈希值匹配,那么可以认为这个文档是完整并且可靠的。

注意:数字签名是有标准的,不能自己创造签名的算法和格式,否则很容易造成不安全。

2.6.2 消息认证码(MAC)

消息认证码有很多种实现与标准:

2.7 智能锁中用到的加解密以及STM32 CryptoLib

STM32 提供的加密库 X-Crypto-lib 支持单向散列函数、对称密钥技术、非对称密钥技术,通过了美国密码算法认证体系认证,在实现上安全性得到了保证,也适合在一些有认证需求的MCU产品上。

密码技术可以由软件实现,也可以由硬件加速软件加密库可以运行在所有的STM32平台上。STM32 特定型号有常用的算法加速,可以减轻内核负载,降低功耗。

除了 STM32 加密库,如果用户对认证要求不高,也可以采用一些第三方或者开源的加密实现,例如 mbedTLS 就包含了所有流行的加解密算法的实现。

2.7.1 算法工具

PC 上工具推荐 OpenSSL,是个命令行工具,支持所有的主流算法。

2.7.2 智能锁需要的加解密算法

从前面的安全分析中,可以知道,智能锁最需要保护的用户开锁的权利,制造商的知识产权,以及用户的隐私。

上一篇下一篇

猜你喜欢

热点阅读