首页 > 解决方案 > 用于小数据文件 (~10KB) 的快速且强大的校验和算法

问题描述

我有一个需要推送到嵌入式设备的数据文件。文件的典型大小范围从几个字节到最大约 10K。我的目的是检测对这个文件内容的篡改(chksum 是数据文件中的最后一个元素)。数据范围是字符串、有符号和无符号整数的混合。我正在寻找一种强大的算法来避免大量碰撞以及不使用大量周期来计算的东西。我正在考虑Fletcher16()CRC-32以及这篇文章中讨论的解决方案

对于我的数据大小/内容的简单算法有什么建议吗?

提前致谢!

编辑:- 感谢大家有见地的答案和建议。

一些背景知识:这不是一个超安全的数据文件。我只是想能够检测是否有人写错了。该文件由模块生成,应仅read only由 SW 生成。最近有一些例子,人们将它从目标文件系统中拉出来,编辑并推回目标,希望能解决他们的问题。(顺便说一句,如果仔细编辑它会)。但这违背了自动生成这个文件的目的和这个模块的存在。我想检测和这种好玩的“黑客”并优雅地中止

标签: cembeddedchecksum

解决方案


我的目的是检测对该文件内容的篡改

如果您需要检测对文件的故意篡改,则需要某种加密签名——而不仅仅是哈希。

如果您可以保护设备内的密钥,则使用HMAC作为签名算法可能就足够了。但是,如果从设备中提取秘密,用户将能够使用它来伪造签名。

如果您无法保护设备内的密钥,则需要使用非对称签名算法。Libsodium 的crypto_signAPI为此提供了一个很好的 API。或者,如果您想直接使用底层算法,EdDSA是一个不错的选择。

这些选项中的任何一个都需要为签名分配相对大量的空间(32 到 64 字节),并且验证该签名将比非加密签名花费更多的时间。如果您需要有效地防止篡改,这在很大程度上是不可避免的。


推荐阅读