公開鍵の秘密 -5- 完結編 ― 2007/02/09 00:19
完結編。
やはり,まずは標準にあたるべきである。
RFC 2313 - PKCS #1: RSA Encryption Version 1.5のセクション 7.2 にこうある。
7.2 Private-key syntax An RSA private key shall have ASN.1 type RSAPrivateKey: RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER -- (inverse of q) mod p } Version ::= INTEGER The fields of type RSAPrivateKey have the following meanings: o version is the version number, for compatibility with future revisions of this document. It shall be 0 for this version of the document. o modulus is the modulus n. o publicExponent is the public exponent e. o privateExponent is the private exponent d. o prime1 is the prime factor p of n. o prime2 is the prime factor q of n. o exponent1 is d mod (p-1). o exponent2 is d mod (q-1). o coefficient is the Chinese Remainder Theorem coefficient q-1 mod p.
つまり,秘密鍵には encryption exponent も decryption exponent も両方格納されている。ご丁寧に,直後の note には,
2. The presence of the public exponent e is intended to make it straightforward to derive a public key from the private key.
ここで public exponent といっているのは,encryption exponent と同義だ。つまりは,public exponent(公開指数,暗号化指数)がここにあるのは,秘密鍵から公開鍵を容易に生成できるようにするためであると明解に書かれている。
あー。すっきりした。
つまりは,秘密鍵から公開鍵を生成できないというのは,僕の単なる思い込みなのであった。
正確には decryption exponent (d) と moduli (n) の組み合わせ(これが厳密な意味での秘密鍵だ)からは,encryption exponent (e) と moduli (n) の組み合わせ -- 公開鍵 -- は推測できない。だが,秘密鍵を格納しているファイルには,公開鍵を生成するための encryption exponent (public exponent)が仕込まれていたんである。
ソースを追いかけること 3時間。無駄だったのか,楽しかったのか...
コメント
_ ガヂェット ― 2007/02/09 00:39
RSA暗号って n = p×q で、pとqがそれぞれでかいとnを素因数分解するのが難しいからnからp×qを導きだせないんですよね。nが公開鍵で、p×qが秘密鍵とすると、秘密鍵から公開鍵を求めるのは簡単だけど、公開鍵から秘密鍵を求められないわけですね。お疲れさまでした。
_ えて ― 2007/02/09 01:45
いやぁ。勉強になりました。久しく何かを突っ込んで調べることをしなかったので,楽しかったです。