使用 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 不正确?
openssl rsautl
不用于加密消息。 该文档非常糟糕且具有误导性,几十年来一直如此,这不是我的错。通常,openssl
命令行实用程序是各种软件和加密协议的诊断工具和调试辅助工具,其中大部分是多年前设计的,非常复杂。基本上没有人应该使用
openssl rsautl
. 唯一甚至被设计openssl
的命令行工具专门为使用 RSA加密消息openssl smime
是/openssl cms
— 并且在这方面做得很差,因为协议设计者是打印机烟雾浓重的官僚。Ed25519 是一个签名方案。它不进行加密。 有一些公钥加密方案(已验证或匿名)使用一些与 Ed25519 相同的基础数学思想,但您不能使用 Ed25519 本身来加密消息,就像您不能使用 RSASSA-PSS 来加密消息一样。