关于security_huks安全模块的知识总结

  • 1.代码相关
    • 1.1 do{}while(0)
      • 1.1.1 规范宏定义,实现局部作用域
      • 1.2.2 避免使用goto对程序流进行统一的控制
      • 1.1.3 避免空宏引起的warning
      • 1.1.4 定义一个单独的函数块来实现复杂的操作
    • 1.2为什么需要lite版本?
  • 2.安全相关
    • 2.1 salt的定义
    • 2.2 为什么需要salt
    • 2.3 根据hks_type.h总结的各种算法和模式的类型
    • 2.4 为什么使用Padding
    • 2.5 Padding的类型
      • 2.5.1 OAEP
      • 2.5.2 PSS
      • 2.5.3 PKCS1_V1_5
      • 2.5.4 PKCS5
      • 2.5.5 PKCS7

关于鸿蒙安全模块的代码和内容相关的知识分享总结

1.代码相关

1.1 do{}while(0)

为什么需要do{}while(0)的写法?
在阅读源码时,我们常常会发现这样的书写结构:

do{……
}while(0)

我们都知道这样写同样是执行内部的代码一次,与最普通的顺序往下写并无结果上的差异,那么为什么工程师们要设计这样的书写结构呢?

这里简单的介绍它的四个作用——当然它的写法肯定不是用来做循环的,而是为了提高代码的健壮性

1.1.1 规范宏定义,实现局部作用域

我们都知道#define是内容的直接替换,当宏定义部分较为复杂时,使用时我们就需要非常小心,比如以下情况:

# define ADD print();out();
int main(){if(false)ADDreturn 0;
}

由于宏定义的直接替换,out()函数仍会被执行

那不是加上{}就可以了?
——一般的代码规范我们在结尾都会写上;

# define ADD {print();out();};
int main(){if(false)ADDreturn 0;
}

这样写是没有问题的

——但加上else呢?很容易将;多加或者漏加导致编译的错误,所以很多宏定义中会使用do……while(0)将宏定义的模块进行包装来,保证宏定义的使用者能够无编译错误的使用宏

1.2.2 避免使用goto对程序流进行统一的控制

在很多函数中,return之前我们需要进行中间变量空间的free操作,goto能够很好的控制流程

int exmaple{struct* ptr = malloc(……);int ret = do(……);if(ret){goto END;}ret = doSomething(……);if(ret){goto END;}return 1;
END:free(ptr);return 0;
}

但是goto虽然好用(在鸿蒙的代码中也可见到少量的goto代码),但是不符合软件工程的结构化,会使得代码结构比较松散,不容易理解,我们可以使用do……while(0)来达到同样的效果

int exmaple{struct* ptr = malloc(……);do{int ret = do(……);if(ret){break;}ret = doSomething(……);if(ret){break;}}while(0);free(ptr);return 0;
}

1.1.3 避免空宏引起的warning

内核中存在不同的架构,空宏的定义在所难免。但是空宏在编译时会warning,为了避免warning,可以使用do{}while(0)来定义空宏

1.1.4 定义一个单独的函数块来实现复杂的操作

当函数比较复杂,变量较多时,不想增加新函数,可以使用do{}while(0)将代码写在里面,里面可以定义变量而不用考虑变量名会同之前或之后的重复

1.2为什么需要lite版本?

Lite使用运行于移动端,有些设备资源非常有限,因此在内存和解析方面必须尽可能减少开销,所以需要轻量版的安全模块功能提供核心功能即可


2.安全相关

2.1 salt的定义

维基百科中对salt的定义如下:
在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

2.2 为什么需要salt

我们知道数据库中存储的都是加密后的密文,典型的加密算法MD5和SHA都是用于明文的加密的。
验证的时候,通过将输入的数据进行算法加密再与库中数据进行对比,来判断一致性
这就是单向散列函数——为什么说是单向,因为密文无法被解密,我们只能生成而无法反向破解——但是唯一的明文对应唯一的密文,所以用于验证是非常有效的
这样即使数据库中数据泄露,由于都是无法可逆运算的密文,损失也不会太严重。

但是使用单向散列函数就一定安全了吗?
并不是。
如果有人对你的网络行为进行监听,收集了很多你的信息和密码,做成字典对其进行MD5或者SHA运算,然后进行对比,那么破解的可能性还是很大的

这时候就需要加点盐了
Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,存储时就是数据+salt的组合进行存储

这样即使数据库泄露,由于salt的随机性,添加的位置、顺序也可以进行灵活设计,密码被破解的概率也会大大降低

2.3 根据hks_type.h总结的各种算法和模式的类型

  1. 密钥类型分为公钥和私钥
  2. 按照算法和模式分类,密钥又分为:
RSA 支持变长密钥的公共密钥算法的密钥
ECC系列 椭圆曲线密码编码密钥
ED25519 数字签名算法密钥
X25519 密钥协商算法密钥AES 对称密钥
CHACHA20系列 :
ChaCha系列流密码,作为salsa密码的改良版,具有更强的抵抗密码分析攻击的特性,“20”表示该算法有20轮的加密计算所需的密钥HMAC 利用密码学中的散列函数来进行消息认证的机制所需的密钥
HKDF
密钥派生函数(KDF)是密码系统的基本组成部分。它的目标是获取一些初始的密钥材料,并从中派生出一个或多个安全强度很大的密钥。基于HMAC的KDF,称之为HKDF,它可以应用于各种协议和应用程序的构建。HKDF在逻辑上由两个部分组成。第一个部分采用输入密钥材料和“提取”,它是一个固定长度的伪随机密钥K。第二部分则将密钥扩展为几个随机密钥,并以我们需要的长度输出PBKDF2 将salted hash进行多次重复计算得到的密钥
  1. 密钥的功能:
加密
解密
数字签名
消息认证
WRAP 封装加密
UNWRAP 拆分解密
MAC信息摘要认证
  1. 生成摘要的方法:
单向散列函数
MD5
SHA224 SHA256 SHA384 SHA512
  1. Padding填充方法
OAEP
PSS
PKCS1_V1_5
PKCS5
PKCS7
  1. 加密模式:
ECB
CBC
CTR
OFB
CCM
GCM
  1. 加解密算法:
RSA
ECCAES
HMAC
HKDF
PBKDF2ECDH
X25519
ED25519

这里简单介绍一下padding

2.4 为什么使用Padding

使用padding的目的:对于特定类型的信息来说,大量相同内容的密文部分是容易推测的比如书信的开头敬语:尊敬的,为了防止攻击,我们使用随机长度的padding对数据进行填充,防止攻击者知道长度,展开攻击

2.5 Padding的类型

这里根据鸿蒙安全模块中出现的填充类型进行一个简单的介绍

2.5.1 OAEP

输入:RSA_size(rsa) – 41
输出:和modulus(RSA钥模长)一样长

2.5.2 PSS

2.5.3 PKCS1_V1_5

填充的规则:

EM = 0x00 || 0x02 || PS || 0x00 || M

其中:
EM是填充后的消息
M是原文
PS是随机数,长度为Len(RSA) - 3 - Len(M)

2.5.4 PKCS5

将数据填充到8的倍数,填充后数据长度的计算公式是 定于元数据长度为x, 填充后的长度是 x + (8 - (x % 8)), 填充的数据是 8 - (x % 8),块大小固定为8字节

2.5.5 PKCS7

假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小;PKCS5只填充到8字节,而PKCS7可以在1-255之间任意填充。

还有前面两篇专门的知识讲解的博客供参考:
鸿蒙安全模块理论知识——MAC,SHA ,hash算法,安全证书相关
加密算法理论概述

关于security_huks安全模块的知识总结(一)相关推荐

  1. 蓝牙模块基础知识介绍

    蓝牙模块基础知识介绍 随着近年来蓝牙技术的不断发展,在功耗不断降低的情形下,蓝牙的传输速率也不断地得到提高,使蓝牙的应用范围更加广泛.但若想设计一套完善的蓝牙系统,就必须充分掌握蓝牙的相关技术知识,如 ...

  2. 100G超长距离传输模块,彩光模块相关知识

    光模块的传输距离是一大核心参数,目前市场对超长距离的传输模块的需求量在稳步上升,超长距离传输会成为未来的通信行业的一大趋势,下面我们将讲述100G超长距离传输模块.          100G超长距离 ...

  3. 系统设计知识:系统模块结构设计知识笔记

    1.什么是模块? 模块可以认为是组成系统的基本单位,它具有可组合.分解.更换的特点.系统中任何一个处理功能都能看成是一个模块.模块根据具体化的程度可划分为逻辑模块和物理模块. 模块的要素: 输入输出: ...

  4. 小程序功能模块-飞鱼知识变现小程序2.5.3源码

    简介: 微信小程序 飞鱼知识变现小程序2.5.3 前端+后端 模块/小程序更新动态: 问答模块:付费咨询功能.旁听分成功能.会员功能.三级分销 课程模块: 音频课程.视频课程.支持付费.支持免费.三级 ...

  5. 【电口模块专题】你不知道的电口模块冷知识

    关于大家对电口模块的全部疑问,将会在本期文章全部给大家解答.本期文章易天光通信(ETU-LINK)给大家讲讲关于电口模块的那些冷知识,你或许知道又不是很清楚的那些小知识,干货满满,赶紧收藏起来! 1. ...

  6. 我问chatGPT如何学习SAP系统以及如何学习各模块的知识

    文章目录 文章目录 前言 如何利用chatGPT进行学习 1.问题1:请给我提供一个学习SAP的路线图 2.问题2:如何学习SAP系统 3.问题3:刚开始学习SAP,有什么比较好的建议 最后想说 前言 ...

  7. 工业级光模块相关知识

    光模块作为光网络通信传输不可或缺的配件,有很多种类型,格凌科技有给光模块做过很多种细致的分类,有一种分类就是光模块的温度分类,光模块的温度分为商业级温度.扩展级温度和工业级温度.下面我们要讲述的是工业 ...

  8. c# 蓝牙虚拟串口_蓝牙模块——基础知识介绍

    1. 数据透传 蓝牙模块可以通过串口(SPI.IIC)和MCU控制设备进行数据传输. 蓝牙模块可以做为主机和从机.主机就是能够搜索别的蓝牙模块并主动建立连接,从机则不能主动建立连接,只能等别人连接自己 ...

  9. 什么是SFP光模块?SFP光模块小知识介绍!

    SFP光模块是SFP封装的热插拔小封装模块,目前最高速率可达10.3G,接口为LC.SFP光模块主要由激光器构成.SFP分类可分为速率分类.波长分类.模式分类.接下来就由飞畅科技的小编来为大家详细介绍 ...

最新文章

  1. 127.0.0.1和0.0.0.0和localhost的区别
  2. Maskros的蓝桥刷题之路(1-13)
  3. tp连接mysql mysql_thinkphp学习简易教程(二) thinkphp连接读取MySQL数据库
  4. 非对称加密和对称加密的区别
  5. 分享40套非常精美的免费 PSD 网页图标素材
  6. 实验一 DOS命令解释程序的编写
  7. 开放、创新、合作,共赢多样性计算新时代
  8. Kindle 电子书转换 azw3 mobi
  9. 泊松分布在计算机中的应用,泊松分布在管理中应用.ppt
  10. 灾害可视化:全国进入汛期,多地预警,全国多省进入暴雨洪灾状态、地图GIS数据可视化、雷达云图、等值线、等值面绘制
  11. 利用jackson-dataformat-csv读写csv文件
  12. 【chrome插件开发一】初始chrome插件——helloWorld
  13. 计算机绘画社团活动教案,电脑绘画社团教案
  14. 钉钉和mis系统对接调研
  15. 第4章 手机平板要兼顾,探究碎片
  16. Android 网易云信直播
  17. 详解统计套利交易系统模型
  18. 小程序-JAVA服务端解密与微信绑定的手机号
  19. 立方尾不变-Python
  20. LibreOJ 2060 食物链

热门文章

  1. C# 实现实时网速
  2. 基于opencv的倾斜文本行的校正
  3. 计算机在军事方面的应用
  4. Angular Router的组件路由介绍
  5. 爱奇艺、新英体育宣布成立合资公司,共造超级在线体育平台
  6. 蓝桥杯---试题 历届试题 填字母游戏(博弈)
  7. Windows驱动的Checked (chk)和Free(fre)区别
  8. Unity TrailRenderer实现拖尾
  9. 软件测试自学网站有哪些 ?
  10. 给我疯狂内卷!GitHub再现星标86K面试手册,37K!妥妥的