假设我有一个数据包,并且我将数据发送给10个用户。我想为这些数据添加一个属性,比如数字签名。 10个用户中的每一个都有不同的“密钥”。当他们将密钥应用于数据包上的此特殊签名时,它返回true或false。然而,他们无法使用他们的密钥确定其他用户是否真实。
答案 0 :(得分:3)
即使数据包很大:
散列数据包中的数据。使用每个用户的密钥加密哈希,并将加密版本附加到邮件中。
每个用户散列原始数据包(没有签名),然后验证散列是否与其解密的块匹配。
这适用于对称和公私方法。
答案 1 :(得分:0)
假设数据包很小:
使用您想要为“True”的用户的公钥加密数据。使用更多随机密钥对其进行加密,以使总数加起来为10。 “真实”用户将能够读取该文件。 “假”用户不会。所有用户只会看到它已加密到十个用户,包括(可能)他们自己。
如果数据包很大,请使用对称方案对其进行加密,并以上述方式处理该加密的密码。
如果数据包仅包含true或false信息,您也可以使用收件人的密钥加密此值(以及用于随机化结果的简短盐)。在这种情况下,所有收件人都可以解密某些内容 - 无论是对还是错。
答案 2 :(得分:0)
您不能通过通道发送少于n位来实现此目的,其中n是用户数。
每个用户都生成自己的HMAC(DATA,HIS_KEY)
由于您知道所有密钥,因此您只能为每个用户发送一个密钥,并且用户必须在其HMAC中将str中的第一个位用于第一位。
所以这就是
DATA=random(128)
result = DATA
For each user:
bit= MSB(HMAC(DATA,user["key"]))
bit= bit xor user["true/flase"]
result.append(bit)