<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Linux - Tag - TommyLike Blog</title>
        <link>https://tommylike.com/tags/linux/</link>
        <description>Linux - Tag - TommyLike Blog</description>
        <generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>tommylikehu@gmail.com (TommyLike)</managingEditor>
            <webMaster>tommylikehu@gmail.com (TommyLike)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Mon, 13 Nov 2023 00:00:00 &#43;0000</lastBuildDate><atom:link href="https://tommylike.com/tags/linux/" rel="self" type="application/rss+xml" /><item>
    <title>Merkle树的诞生及演进</title>
    <link>https://tommylike.com/merkle-tree/</link>
    <pubDate>Mon, 13 Nov 2023 00:00:00 &#43;0000</pubDate>
    <author>TommyLike</author>
    <guid>https://tommylike.com/merkle-tree/</guid>
    <description><![CDATA[Merkle 树的诞生及演进 诞生 在介绍Merkle树之前，先回顾下另一个更为广泛的技术——Hash(哈希也叫散列)，他能把任意长度的输入，通过散列算法变换成固定长度的输出，输出就是Hash值，自1953年诞生以来，已经衍生了很多有名的Hash算法，比如MD系列，SHA系列等算法，在理想的情况下，Hash能做到两点:
相同的输入得到的结果一定相同 不同的输入得到的结果一定不同 基于此，Hash被广泛应用在文件校验，标识，加密等领域，举个例子，openEuler每次版本发布的ISO文件都会包含其sha256的Hash文件(见下图)，当用户文件下下来后，我们可以通过对下载文件再次进行SHA256 Hash运算并与sha256sum文件内容比较，以此来判定文件的完整性。当然在实际的场景中，校验的情况通常会更加复杂，可能涉及多个文件，多个来源，多种时刻等，随着技术的演进，便有了今天的要介绍的Merkle树，1979年来自于斯坦福大学的美国计算机科学家Ralph Merkle在他的论文《基于常规加密函数的数字签名》中首次提出了哈希树的概念，这便是今天Merkle树的雏形。 openEuler社区发布的ISO文件及Hash文件(算法为sha256)
定义 按照维基百科的定义，Merkle树是一种树形结构数据，每个叶子节点以一个数据块的哈希信息为标签，而其他节点均以其子节点的标签哈希为标签，整个结构自下而上，简单直观，能够高效，安全的验证大型数据的内容。注意: Merkle树本身没有对树的类型做规定，但是一般情况下我们说的Merkle树为二叉树。 基础应用——Git git clone，git add... 作为程序员每天都会跟git打交道，自2005年诞生以来，目前已是使用最为广泛的代码管理系统。在git的内部，存储文件时有个基础对象——**Tree，**其结构就是一棵Merkle树(严格来说，是一个跟Merkle树非常相似的Merkle DAG，我们这里不做区分，都算作Merkle树)，这是Merkle树最基础的应用。 展开来说，Git内部在存储文件时，他会把每个文件拆解为两部分，一部分用于保存文件的文件内容，用Blob对象表示，另一部分如文件名等元数据信息会作为Node保存在我们的这颗树中:
Blob 用于保存对应文件的内容，相比于原始的提交文件内容，blob文件会按照新格式重新组装内容并压缩，以一个内容为Hello World 名为real_name.txt的文件举例，生成的blob文件信息以下图举例，注意: git内部每个存储的文件都会以blob的形式存储，同时每个文件的多个版本也会用多个独立的blob保存。
1 2 3 4 5 #Hello World会以Blob形式存储，具体格式如下: #1. Blob文件内容: blob+内容长度+原始文件内容 Blob Content = Zip(&#34;blob 11 Hello World\0&#34;) #2. Blob文件名: 其文件内容的SHA1摘要 Blob File Name = SHA1(&#34;blob 11 Hello World\0&#34;) #bd9dbf5aae1a3862dd1526723246b20206e5fc37 Tree Git代码仓都是由文件夹及文件构成的，有了Blob存储文件内容，剩下的文件夹结构便是用Merkle Tree的形式存储，这颗树中每个非Root节点代表一个具体的文件(Blob)或者是一个子文件夹(Tree), 要注意的是每个文件对应的文件名，文件权限等信息也会附加在这节点中，有了以上的信息，我们以一个实际的仓库状态为例：
1 2 3 4 5 6 7 ➜ git-demo git:(main) tree -L 4 .]]></description>
</item>
<item>
    <title>操作系统领域签名系统构建</title>
    <link>https://tommylike.com/linux-signature/</link>
    <pubDate>Sat, 11 Nov 2023 09:28:31 &#43;0800</pubDate>
    <author>TommyLike</author>
    <guid>https://tommylike.com/linux-signature/</guid>
    <description><![CDATA[<p>社区签名系统自构建以来，经常会遇到签名阻塞的问题，这个问题在一直存在，但一直没有一个比较好的解决方案，今年我们在社区中引入了一个新的签名系统，整个系统基于Rust语言开发，采用CSP模型，异步框架，TEE等技术，相比现有的签名系统，整个系统在性能，安全，管理等方面都有很大的提升，本文将介绍整个系统的设计思路，技术实现和未来规划。</p>]]></description>
</item>
</channel>
</rss>
