【发布时间】:2012-01-31 08:24:14
【问题描述】:
我的系统需要通过不安全的通道发送和接收数据。我想保持简单(它在嵌入式平台上运行,而不是 PC),我不介意攻击者是否可以读取数据。我要防止的是攻击者拦截数据并对其进行修改。
该平台具有用于散列(MD5、SHA1 等)的内置函数,但没有加密,所以我想我要做的只是将数据与一些秘密数据连接起来进行散列,以确保它是由我生成的系统而不是攻击者。例如:
dataToSend = dataString + sha1(dataString + secretString)
数据字符串以明文形式发送,后跟散列。秘密部分意味着攻击者无法在不使散列无效的情况下修改数据,除非他们以某种方式发现了秘密,该秘密内置于程序中并且从未通过通道发送。我知道这个方案容易受到重放攻击;对于这个特定的应用程序来说,这不是问题。
我的问题是:如果秘密内置在应用程序中并且永远不会改变,那么如果他们有大量截获的数据字符串和哈希值,是否有办法弄清楚它是什么?将嵌入机密的可执行文件本身已由平台加密,因此无法使用十六进制编辑器发现机密。
其次,这个秘密有多长有关系吗?数据字符串通常为 8 个字节。如果我有一个更长的秘密(例如 1024 字节),试图让它不可猜测,那么哈希算法的大部分输入将永远不会改变。这是否会降低安全性?
谢谢!
【问题讨论】:
标签: hash cryptography