哈希在计算机科学中至关重要,并提供了广泛的能力和功能。此外,哈希在嵌入式软件开发人员验证和保护嵌入式系统方面发挥着重要作用。这篇文章将研究加密哈希的基础知识,并提供嵌入式开发人员可以用来开始理解嵌入式安全性的基础。
让我们从查看哈希的定义开始。散列是散列函数根据提供给函数的输入生成的值。散列用于提供一个值,该值可以验证信息的完整性,而无需将该信息透露给执行验证的一方。因此,例如,开发人员可以通过散列函数运行他们的软件映像,以生成一个散列值,客户或最终用户可以验证他们是否收到了正确的软件映像。
开发人员应将哈希视为数据的唯一数字指纹。哈希函数的好处是最终用户可以通过将他们的哈希与官方生成的哈希进行比较来验证他们是否拥有正确的软件。尽管如此,散列值仍不能用于生成信息,该过程是单向的,这提供了一种简单的验证方法,无需透露细节。
几种不同的散列函数用于生成散列,有时称为散列码或散列值。一些常见的哈希值包括:
MD5 (120-bit)
SHA-1 (160-bit)
SHA-3 (224-bit, 256-bit, 512-bit)
当为输入数据生成散列时,会生成固定数量的输出位。例如,常用的加密散列 SHA-1(安全散列算法 1)产生 160 位值。嵌入式开发人员可以通过将他们的数据输入他们的 SHA-1 生成器或尝试使用在线生成器来生成 SHA-1 哈希。例如,简单的数据,如“Hello World!”生成下面的哈希:
SHA-1(“Hello World!”) = 2ef7bde608ce5404e97d5f042f95f89f1c232871
哈希在嵌入式中扮演着几个不同的角色。首先,引导加载程序可以使用哈希来验证他们收到的软件映像是否确实正确。其次,哈希可以用作安全启动序列的一部分,以在启动期间验证固件映像的完整性。第三,如果黑客试图将自己的代码注入应用程序映像,则存储的哈希将与存储在闪存中的应用程序不匹配,并表明应用程序出现问题。第三,哈希在服务器身份验证和数字签名中发挥作用。
嵌入式软件开发人员在选择他们将在其应用程序中使用的哈希算法时需要小心。哈希函数可以计算周期密集型,这意味着它们可能需要一段时间才能在资源受限的设备(例如微控制器)上进行计算。在确定散列函数之前,开发人员应考虑以下几点:
l 确定他们的微控制器上是否有可以加速哈希计算的硬件加速器
l 评估哪种算法最适合他们的应用。(如果 SHA-1 足够,则无需使用 SHA3-512
在嵌入式开发人员意识到这一点之前,哈希在嵌入式系统中比 CRC 和校验和更加普遍。但是,当然,它们已经在通用计算系统中使用了多年,随着安全成为许多连接系统的主要问题,它们也很自然地进入基于微控制器的系统。