物联网操作系统LiteOS新组件——RHash

举报
o0龙龙0o 发表于 2021/12/15 21:53:16 2021/12/15
【摘要】 what is RHash?

0背景


what is RHash?

我看这个组件时也是一脸懵逼,不知道是个啥,开始了仔细调研

LiteOS 官方代码在:https://gitee.com/LiteOS/LiteOS/tree/fc817fba9aa7d3f3acfe396e56e234c493e0fb3e/demos/security/rhash

这里写了RHash的说明。

1、Hash 


首先需要解释什么哈希树。

哈希树(hash tree;Merkle tree),在密码学及计算机科学中是一种树形数据结构,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 。哈希树能够高效、安全地验证大型数据结构的内容,是哈希链的推广形式。

哈希树中,哈希值的求取通常使用诸如SHA-2的加密哈希函数,但如果只是用于防止非故意的数据破坏,也可以使用不安全的校验和获取,比如CRC。
哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。

二叉哈希树示例图

哈希 0-0 和 0-1 分别是数据块 L1 和 L2 的哈希值。哈希 0 是将哈希 0-0 和 0-1 连接后所获取的哈希值。

以从 P2P 网络下载文件为例:通常先从可信的来源获取顶部哈希,如朋友告知、网站分享等。得到顶部哈希后,则整棵哈希树就可以通过 P2P 网络中的非受信来源获取。下载得到哈希树后,即可根据可信的顶部哈希对其进行校验,验证数据是否完整、是否遭受破坏。

RHash


RHash是一个C语言编写的哈希函数库

利用C语言实现,多重加密算法为功能的函数库。

R指的是Recursive—递归,说明该算法中利用递归的范式实现磁力链和各种消息摘要的控制台实用程序,他包含的加密算法有:CRC32, CRC32C, MD4, MD5, SHA1, SHA256, SHA512, SHA3, AICH, ED2K, DC++ TTH, BitTorrent BTIH, Tiger, GOST R 34.11-94, GOST R 34.11-2012, RIPEMD-160, HAS-160, EDON-R, and Whirlpool。这家加密算法都是哈希链和哈希表常用的加密算法。就不一一展开了。

通过https://github.com/rhash/RHash文档可以学习RHash的公共知识,因为这个库本事是开源的,LiteOS只是引用并做了接口程序,实现用户对其的使用。

该程序的特点是:

程序特点:

  • 递归处理目录的能力。
  • 以预定义的(SFV、类 BSD)或用户定义的格式输出。
  • 计算磁链。
  • 更新哈希文件(添加哈希文件中缺少的文件的消息摘要)。
  • 一次计算多个消息摘要。
  • 可移植性:该程序在 Linux、Unix、macOS 或 Windows 上的工作方式相同。

不知道LiteOS是不是首次将该开源算法移植到嵌入式的应用上。

LiteOS使用RHash


根据操作文档

我们现在可以使用menuconfig操作是否开启RHash Demo

Demos  --->
    Security Demo  --->
            [*] Enable RHash Demo 

使能RHash Demo后会自动使能RHash组件。保存后,LiteOS会自动下载所需要的RHash进行patch包过程。整个操作需要在线实现才可以。

例程运行我们就可以到程序的运行结果了。大致如下:

********Hello Huawei LiteOS********

LiteOS Kernel Version : 5.1.0
build data : Dec 14 2021 23:32:28

**********************************
OsAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
RHash demo start to run.
Original md5:
7990beea258031735be06254cea58a89
RHash calculate md5:
7990beea258031735be06254cea58a89
Original sha256:
d56910304664d3d3a439968b020bb465d5de33715cfb109d71704b91f85db30c
RHash calculate sha256:
d56910304664d3d3a439968b020bb465d5de33715cfb109d71704b91f85db30c
RHash demo finished.

Huawei LiteOS # 

该例程主要是对"This is Huawei LiteOS RHash Demo.\n"这个字符串 实现MD的价码,SHA256的加密运算。

通过源码我们可以分析一下这个RHash使用的过程。

以Md5说明;

  • 首先通过rhash_md5_init()初始化rhash md5的功能;
  • 使用函数rhash_md5_update(&ctx, (UINT8 *)DEMO_STR, strlen(DEMO_STR));对我们要加密的数据DEMO_STR进行输入到rhash函数功能上进行执行。
  • 通过rhash_md5_final(&ctx, result);获得加密数据后的数据指针result。

只需要三步,就实现了这个哈希加密过程。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。