使用 OpenSSL 1.1.1.b-1,我可以生成 RSA 密钥对并使用它们来加密内容:
openssl genrsa -out private_key 4096
openssl rsa -in private_key -pubout -outform PEM -out public_key.pem
openssl rsautl -encrypt -inkey public_key.pem -pubin -in original.txt -out encrypted.enc
openssl rsautl -decrypt -inkey private_key -in encrypted.enc -out original.txt
但尝试使用 ed25519 密钥加密内容,
openssl genpkey -algorithm ED25519 -out private_key
openssl pkey -in private_key -pubout -out public_key
openssl pkeyutl -encrypt -inkey public_key -pubin -in original.txt -out encrypted.enc
导致错误:
pkeyutl: Error initializing context
140302731502080:error:0608B096:digital envelope routines:EVP_PKEY_encrypt_init:operation not supported for this keytype:crypto/evp/pmeth_fn.c:141:
OpenSSL 1.1.1.b-1 无法执行该功能,还是我错误地使用了 pkeyutl?
答案1
openssl rsautl
是不是用于加密消息。 文档非常糟糕,具有误导性,几十年来一直如此,这不是我的错。一般来说,openssl
命令行实用程序诊断工具和调试辅助工具用于各种软件和加密协议,其中大多数都是多年前设计的,过于复杂。基本上没人应该使用
openssl rsautl
。唯一一个openssl
甚至设计用于加密消息使用 RSA 是openssl smime
/openssl cms
—并且很糟糕因为协议设计者是一群沉迷于打印机烟雾的官僚。Ed25519 是一种签名方案。它不进行加密。 有一些公钥加密方案(经过身份验证或匿名)使用与 Ed25519 相同的一些底层数学思想,但您不能使用 Ed25519 本身来加密消息,就像您不能使用 RSASSA-PSS 来加密消息一样。