Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 多重数字签名算法?_Algorithm_Encryption_Digital Signature - Fatal编程技术网

Algorithm 多重数字签名算法?

Algorithm 多重数字签名算法?,algorithm,encryption,digital-signature,Algorithm,Encryption,Digital Signature,假设我有一个数据包,并且我正在向10个用户发送数据。我想给这个数据添加一个属性,比如数字签名。10个用户中的每一个都有一个不同的“密钥”。当他们将密钥应用于数据包上的这个特殊签名时,它会返回true或false。但是,他们无法使用自己的密钥确定其他用户是否正确。假设数据包很小: 使用您希望为“True”的用户的公钥加密数据。用更多的随机密钥加密,这样总数加起来就是10。“真实”用户将能够读取该文件。“假”用户将不会。所有用户只会看到它已加密到10个用户,包括(可能)自己 如果数据包很大,则使用对

假设我有一个数据包,并且我正在向10个用户发送数据。我想给这个数据添加一个属性,比如数字签名。10个用户中的每一个都有一个不同的“密钥”。当他们将密钥应用于数据包上的这个特殊签名时,它会返回true或false。但是,他们无法使用自己的密钥确定其他用户是否正确。

假设数据包很小:

使用您希望为“True”的用户的公钥加密数据。用更多的随机密钥加密,这样总数加起来就是10。“真实”用户将能够读取该文件。“假”用户将不会。所有用户只会看到它已加密到10个用户,包括(可能)自己

如果数据包很大,则使用对称方案对其进行加密,并按照上述方式处理该加密的密码


如果数据包只包含信息true或false,您也可以使用接收者的密钥对该值进行加密(并使用短salt将结果随机化)。在这种情况下,所有收件人都将能够解密某些内容-正确或错误。

即使数据包很大:

散列数据包中的数据。使用每个用户的密钥加密哈希,并将加密版本附加到消息

每个用户散列原始数据包(不带签名),然后验证散列是否与解密的数据块匹配


这适用于对称算法和公私算法。

您不能通过通道发送少于n位的数据,其中n是用户数

每个用户都会生成自己的HMAC(数据,他的密钥)
因为您知道所有密钥,所以您只能为每个用户发送一个位,并且用户必须对其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)  

有可能只附加一个签名,10个用户都可以使用他们的密钥来知道他们是真是假吗?@freddy smith:为两个不同的密钥添加一个签名将是一种貌似可以否认的加密形式。这是存在的。从理论上讲,你可以让它在两个以上的键上工作;但是对于十个密钥有效的一个签名的大小将大于每一个密钥有效的十个签名的总和。每个用户只能使用一位,而不是完整签名。@ralu:签名越短,越容易伪造。下面的方法的问题是,给定真实消息,用户可以轻松地为另一个用户的标志之一伪造具有不同值的备用消息。所以你不能知道你的值是真的,因为它可能是其他用户欺骗你的。它不是签名。它只是“真/假”值的一位数据容器。您应该对所有数据应用签名。t如果您有100万用户,您可以发布此真/假表,其中128k(每个用户一位)+16(随机数据128位)+2000(签名)字节=130kB的数据