Hash 为明文身份验证(不是密码)添加散列
我有一个系统,需要通过不安全的通道发送和接收数据。我想保持这个简单(它运行在嵌入式平台上,而不是PC上),我不介意攻击者是否可以读取数据。我要防止的是攻击者拦截数据并对其进行修改 该平台有内置的散列函数(MD5、SHA1等),但没有加密功能,所以我想我应该做的只是将数据与一些秘密数据串联起来进行散列,以确保它是由我的系统生成的,而不是攻击者生成的。例如:Hash 为明文身份验证(不是密码)添加散列,hash,cryptography,Hash,Cryptography,我有一个系统,需要通过不安全的通道发送和接收数据。我想保持这个简单(它运行在嵌入式平台上,而不是PC上),我不介意攻击者是否可以读取数据。我要防止的是攻击者拦截数据并对其进行修改 该平台有内置的散列函数(MD5、SHA1等),但没有加密功能,所以我想我应该做的只是将数据与一些秘密数据串联起来进行散列,以确保它是由我的系统生成的,而不是攻击者生成的。例如: dataToSend = dataString + sha1(dataString + secretString) 数据字符串以明文形式发送
dataToSend = dataString + sha1(dataString + secretString)
数据字符串以明文形式发送,后跟散列。机密部分意味着攻击者不能在不使哈希无效的情况下修改数据,除非他们以某种方式发现了内置于程序中且从未通过通道发送的机密。我知道这个方案容易受到重放攻击;对于这个特定的应用程序来说,这不是问题
我的问题是:如果这个秘密是内置在应用程序中的,并且永远不会改变,那么如果有人拥有大量截获的数据字符串和散列,有没有办法知道它是什么?该秘密将嵌入的可执行文件本身由平台加密,因此不可能用十六进制编辑器发现该秘密
第二,秘密有多长重要吗?数据字符串通常为8字节。如果我有一个更长的秘密(例如1024字节),试图使其不可用,那么散列算法的大部分输入将永远不会改变。这会不会让它变得不那么安全
谢谢 密钥认证的标准技术是。除非你有特殊的理由,否则我建议你用HMAC来解决你的问题
让密钥比数据长是一个非常好的主意。您的数据是64位的,因此使用HMAC-SHA-256将提供一个256位的密钥,长度是您的数据的两倍。如果愿意,您可以使用不同的密钥大小,HMAC在密钥大小方面非常灵活。这正是我想要的!非常感谢!