手作りSSH の1 - PKCS/RSA鍵フォーマット

まず、

あたりを参照。
RSAアルゴリズムなどについては死ぬほど解説が有ると思うので省略。

を見ること。

鍵の供給

いわゆるid_rsaファイルの内容を知る必要がある。
id_rsaファイルは、ASN.1 BERをさらにBASE64することで記録されたファイルになっている。
ASN.1とはXMLのような物だと考えれば良い。ただし、XMLとは異なり、エンコード(representation)が分離され、BERはバイナリ方式なので通常の人間には読み取ることが出来ない。
opensslコマンドを使うことで内容をチェックすることが出来る。ただし、パスフレーズがかかっている場合は暗号化されているのでそのままでは見れない。ssh-keygenコマンドでパスフレーズの無い鍵を作る。

openssl asn1parse -in id_rsa

すごい大きさの整数が出てくるが、まぁRSAとはそういうもんなので諦める。
BERで記録されたデータはXMLのタグに相当するデータを持っていないため、処理する側がデータが記述される順番を予め知っていなければならない。この順番は、PKCS#1に記述されている。

RSA暗号は2つの素数の積の素因数分解が困難であることを利用した暗号というのは良く知られているが、実際にその2つの素数をいきなり公開鍵として使っているわけではない。
鍵ペア(公開鍵と秘密鍵のペア)として使っているのは、先頭の3つの値、つまり、modulus、publicExponent、privateExponentが相当する。
modulusは両方で共有する値で、これが生成した2つの素数の積となっている。