不知道为什么没有直接使用ed25519密钥进行加密的方法。
然后我发现了这个:https://github.com/indutny/elliptic/issues/108
这里指出,它与RSA不同,不推荐用于此目的--人们应该从diffie-hellman风格的共享秘密中派生对称密钥。
它是用来签字的。但是如果签署像这样的话:
hash = doHash(message)
signature = doAsymmetricEncrypt(hash, privateKey)
hash == doAsymmetricDecrypt(signature, publicKey) // true我认为它也应朝这个方向努力。
encryptedToken = doAsymmetricEncrypt(token, publicKey)
token = doAsymmetricDecrypt(encryptedToken, privateKey)我目前对有关事项的理解归结为:
所以我假设,当我拥有私钥的32个字节时,知道它就是这样的密钥。我应该能够只在任何上下文中使用它,而不管将它用作签名或加密算法。
发布于 2020-08-07 07:29:34
你似乎对一些事情感到困惑。请原谅我,这是一个很常见的混乱!
加密的目的是以保密方式传输信息:如果您加密信息,则它意味着要隐藏起来,直到接收方解密。注意,在您的伪代码中
hash = doHash(message)
signature = doAsymetricEncrypt(hash, privateKey)
hash == doAsymetricDecrypt(signature, publicKey) //true..。从您的“密文”message检索signature是不可能的:您只能检索哈希。其次,您正在使用私钥加密,而解密则使用公钥进行,这意味着任何一方都可以解密您的hash,因为您的publicKey显然是公开的。
digital签名是一种验证数字消息或文档(维基百科)真实性的数学方案。请注意,这从来不是用加密来定义的。让我强调这一点:如果你有一位老师声称“签名是一种带有私钥的加密”,他们是错的。如果你有一本书声称这一点,扔掉它,烧掉它--不要把它送出去,因为它显然会引起混乱--然后买一本更好的书。加密是为了保密,签名是为了真实性。
尽管如此:这种混乱的source 是在RSA的数学中。在RSA (而不是ECC!)中,教科书签名操作符与加密操作符相同,密钥被交换。请注意,数学操作是相同的,而不是签名“是用交换的密钥加密的”,尽管它们看起来是这样的。还要注意的是,这是针对教科书RSA的,它从不按原样部署,但需要填充和随机化,这在签名和加密之间是不同的。
因此,虽然您的伪代码可能与RSA一起工作,也可能不起作用(取决于您使用的库),但它根本不安全,而且根本不适用于ECC,因为密钥不能交换,因为它背后的数学模型根本不支持它。
现在,要想最终回答您的问题,使用椭圆曲线的加密是存在的,被广泛使用,并被称为ECIES。它实际上归结为Diffie-Hellman交换,然后使用对称算法。如果您有非常短的消息,也有ElGamal加密。
但是,对于ECIES和EdDSA签名来说,同时重用相同的密钥是否安全,这是EdDSA的问题。
https://crypto.stackexchange.com/questions/83266
复制相似问题