题目要求:
对于Linux下给定的ELF可执行程序、自行开发签名工具对程序的代码段(Load Segment)首先进行散列,然后对散列值进行签名,签名数据应作为单独的节(Section)附加到原ELF可执行程序的尾部。同时,应开发验证软件并加入操作系统,在运行任何ELF可执行程序前对ELF文件进行验证,若ELF可执行程序没有被签名或者签名验证失败则应停止运行本程序,若签名验证成功则可以正常运行。
签名后的ELF可执行程序可正常运行在带有签名验证的Linux操作系统上,以及不带有签名验证机制的Linux操作系统上;
签名后的ELF可执行程序中的签名数据节应可通过readelf与objdump等程序解析得到正确的值;
运行ELF可执行程序的方式应保持不变,不得通过其他程序运行ELF可执行程序的方式验证签名;
签名验证所需要的公钥、证书以及验证程序可以预先设置在操作系统中;
本题不考察选手对加密算法的实现,因此选手可以选择开源的加密软件库进行加密,但是对应强度应不低于RSA2048;
实现程序主要涉及对ELF可执行格式的理解、Linux操作系统下程序运行的机制的理解,以及对加密算法的运用。
分析:分为几个步骤。第一步要做的是环境配置,这道题目对环境的要求还是比较严苛的,限定使用C语言和UOS系统。
第二步:实现对elf文件的程序解析和散列。
第三步:加入签名程序,对散列值按照一定的规律进行记录,并将签名数据作为单独的节加入到程序末尾
第四步:加入验证程序,通过各种方法对签名进行验证,证明程序合法且未被篡改。
第五步:对判断结果进行处理,若判断结果为通过,运行,若判断结果为不通过,则停止运行
自我抑郁又自我救赎