Linux下基于签名技术的软件保护_准备工作


赛题介绍:

实现一个Linux下的二进制签名和验证程序,用于在国产Linux操作系统进行应用的标识和管理,提升应用程序的可追溯性和安全性鉴别能力。

场景:

流程要求开发者需对自己开发的应用进行签名,以保证二进制的安全性(非篡改),因此需要一款可以对二进制进行签名和验证的程序

需求分析:

对于Linux下给定的ELF可执行程序、自行开发签名工具对程序的代码段(Load Segment)首先进行散列,然后对散列值进行签名签名数据应作为单独的节(Section)附加到原ELF可执行程序的尾部。同时,应开发验证软件并加入操作系统,在运行任何ELF可执行程序前对ELF文件进行验证,若ELF可执行程序没有被签名或者签名验证失败则应停止运行本程序,若签名验证成功则可以正常运行

签名后的ELF可执行程序可正常运行在带有签名验证的Linux操作系统上,以及不带有签名验证机制的Linux操作系统上;

签名后的ELF可执行程序中的签名数据节应可通过readelfobjdump等程序解析得到正确的值

运行ELF可执行程序的方式应保持不变,不得通过其他程序运行ELF可执行程序的方式验证签名;

签名验证所需要的公钥证书以及验证程序可以预先设置在操作系统中;

本题不考察选手对加密算法的实现,因此选手可以选择开源的加密软件库进行加密,但是对应强度应不低于RSA2048

实现程序主要涉及对ELF可执行格式的理解、Linux操作系统下程序运行的机制的理解,以及对加密算法的运用。

原型设计:

完成基于公私玥的签名程序,能对任意ELF程序进行签名,并能通过readelf等程序读取添加的节,且不影响程序的正常运行

完成基于公私玥的验证程序,能透明地对任意ELF程序在运行前进行签名验证

③签名验证通过的可以正常运行,未通过的不允许运行,对比未实施签名验证前的程序启动时间延迟不超过10%

知识储备:

ELF可执行文件:

ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(object files)中都放了什么东西、以及都以什么样的格式去放这些东西。

目标文件在不同的系统或平台上具有不同的命名格式,在Unix和X86-64 Linux上称为ELF(Executable and Linkable Format)。

ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器(Loader)看来它是由Program Header Table描述的一系列Segment的集合。

.text就是其代码段

 

散列:

哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。

通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。

简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

对消息的散列值进行签名:

我们可以不必对整个消息进行加密(即对消息签名),而是先用单向散列函数求出消息的散列值,然后在将散列值进行加密(对散列值签名)就可以了。无论消息有多长,散列值永远都是这么短,因此对其进行加密(签名)就非常轻松了。

博客资料:

https://blog.csdn.net/daide2012/article/details/73065204

https://blog.csdn.net/chengqiuming/article/details/81805401


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM