0

M2Crypto pythonパッケージ(Python用のOpenSSLラッパー)のPKeyクラスのドキュメントでは、PKeyは公開鍵への参照であると言われています。

代わりに、PKeyクラスのinitメソッドがevp_pkey_new openssl関数を呼び出し、このリンクからhttp://linux.die.net/man/3/evp_pkey_newを割り当てる必要があるため、これは秘密鍵への参照であると私は考えています。秘密鍵構造への新しい参照!

考えられる説明は2つだけです。M2Cryptoのドキュメントが間違っているか、私が報告したリンクの情報が間違っています。

誰かが私が真実を見つけるのを手伝ってくれる?

4

2 に答える 2

2

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という用語を同じ意味で使用しているため、混乱を招きます。

于 2011-12-12T22:32:15.737 に答える
1

OpenSSLのドキュメントは不完全です。EVP_PKEYによって割り当てられた構造は、秘密鍵または公開鍵のEVP_PKEY_new()いずれかを格納するために使用されます。キーのタイプは、後で構造にロードするものによって決まります。

(たとえば、両方EVP_SealInit()とパラメータをEVP_OpenInit取得しEVP_PKEYます)。

于 2010-05-03T01:44:59.253 に答える