EVP_PKEY_newのドキュメントには、秘密鍵の保存に使用されることが直接記載されています。また、元のポスターはx509foo.get_pubkey()がEVP.PKeyインスタンスを返すだけであり、インスタンスをpemとして保存するとPRIVATE KEYが表示されるため、私は迷子になります。PKeyを使用する多くの関数が文書化されていないため、M2Cryptoチームの意図を知っているふりをすることはできません。たとえば、x509リクエストオブジェクトにはverify(self、pkey)がありますが、オブジェクトpkeyの種類については何も教えてくれません。同様にそこまたは任意のドキュメント。私はRSAを(e、n)#公開鍵(d、n)#秘密鍵の少なくともnn項で考えているので、元の認証者と同じように混乱しています。
せいぜいプライベートキー(d、n、p、q、dp、dq、qinv、t)について考えます。ここで、pとqは大きな素数です。dpとdqとqinvは、復号化を高速化するための追加の係数であり、tはトーティエント関数です。 。
ドキュメントで区別を明確にする必要がある理由は、秘密鍵(署名の場合)で暗号化して、他のすべての人が公開鍵を使用して解読できるようにするためです。h = hash(m)sig = h ^ d(mod n)d(秘密鍵)を知っている人だけが署名を作成できます。検証はによって行われます
h = sig ^ e(mod n)
2つのハッシュが一致する場合、メッセージが本物であることがわかります。
私が抱えている問題はEVPです。Pkeyは公開鍵を表していると主張していますが、そのassign_rsa()メソッドはRSA鍵ペアを受け取ることを宣言しています(「これはこの時点で秘密鍵を意味すると思います」。これまでのところ、自己署名証明書を作成するためだけのものであることがわかりました(M2Crypto独自の単体テストを含みます。サードパーティのx509要求を受け取り、実際に通常見られるような独自のCA証明書とキーで署名するテストはありません。ユニットテストは、X509リクエストに秘密鍵が含まれていないため、一般的なCSRに署名する方法を理解するのに役立ちません。ただし、ユニットテストの例は、自己署名されており、署名者がすでに秘密にアクセスできるため、正常に機能します。キー。実際、test_mkcertテストは、x509要求を生成するmkreqメソッドによって返される秘密鍵を取得することを正確に実行します。
M2Cryptoのドキュメントは、pk、pkey、さらにはpubkeyという用語を同じ意味で使用しているため、混乱を招きます。