0


Linux嵌入式平台安全启动理解介绍

一、意义

     安全启动可以防止未授权的或是进行恶意篡改的软件在系统上运行,是系统安全的保护石,每一级的前一个镜像会对该镜像进行校验。

1.1 安全启动原理介绍

通过数字签名进行镜像完整性验证(使用到非对称加密算法和哈希算法)
签名过程:
raw_image--->use hash--->digest(摘要)
private_key--->digest--->signature
image+signature组合成为签名镜像
验签过程:
use hash--->raw_image--->digest1
public_key--->signature--->digest2
digest1 =? digest2
等于则验签成功,否则验签失败

代码实现过程如下:


#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/sha.h> 
#include <openssl/crypto.h> 
 
#define PUBLIC_KEY_PATH ("/hd1/program/config/ca/client_sunell_public.pem")
#define PRIVATE_KEY_PATH ("/hd1/program/config/ca/client_sunell_private.pem")
 
 
void printHash(unsigned char *md, int len)
{
 
    int i = 0;
    for (i = 0; i < len; i++)
    {
        printf("%02x", md[i]);
    }
 
    printf("\n");
}
 
 
/*读取私钥*/
RSA* ReadPrivateKey(char* p_KeyPath)
{    
    FILE *fp = NULL; 
    char szKeyPath[1024];
    RSA  *priRsa = NULL, *pubRsa = NULL, *pOut = NULL;
    
    printf("PrivateKeyPath[%s] \n", p_KeyPath);
 
    /*    打开密钥文件 */
    if(NULL == (fp = fopen(p_KeyPath, "r")))
    {
        printf( "fopen[%s] failed \n", p_KeyPath);
        return NULL;
    }
    /*    获取私密钥 */
    priRsa = PEM_read_RSAPrivateKey(fp, NULL, NULL,NULL);
    if(NULL == priRsa)
    {
        ERR_print_errors_fp(stdout);
        printf( "PEM_read_RSAPrivateKey\n");
        fclose(
标签: linux 安全 运维

本文转载自: https://blog.csdn.net/a2591748032/article/details/132028754
版权归原作者 a2591748032-随心所记 所有, 如有侵权,请联系我们删除。

“Linux嵌入式平台安全启动理解介绍”的评论:

还没有评论