署名  署名のシステムは公開鍵暗号方式に従う。現在の実装の暗号化アルゴリズムはRSAで ある。メッセージダイジェストのアルゴリズムはMD5である。 文字列と多倍長整数間の変換アルゴリズム  文字列の最下位6ビットからBase64アルゴリズムの変換テーブルに準拠して変換する。 文字列の先頭文字が整数の最下位6ビットに対応し、文字列の最後尾が最上位ビットに 対応する。このとき、想定される字数に足りない時は0が補充される。つまり、文字変 換時にAが足される。 鍵文字の圧縮アルゴリズム  与えられた鍵文字列のMD5を求める。そして、求めた値をBase64アルゴリズムでエン コードする。最後に、変換結果の先頭11文字を圧縮した鍵とする。 鍵生成アルゴリズム  素数テストにはミラーテストを使用する。最初の10個の素数に対して、テストをパス した擬素数を素数とみなす。公開乗数eは65537とする。トリップ生成文字列から生成す る素数をp、qとする。MD5の計算アルゴリズムをmd5()と定義する。 ステップ1 ハッシュの計算  トリップ生成文字列をhashsとする。ここでの+演算は文字列の連結である。 hashs = md5($key) + md5($key + 'pad1') + md5($key + 'pad2') + md5($key + 'pad3') ステップ2 ハッシュ文字列からp、qへの変換  hashsの0から27バイト、28から63バイトをそれぞれp、qに代入する。このとき、リト ルエンディアンで処理する。つまり、hashsの最上位バイトがp(q)の最下位バイトにな るようにする。 pのnum[0]-num[6] := hashs[0-27] (28バイト) qのnum[0]-num[8] := hashs[28-63](36バイト) ステップ3 p、qの前処理  ステップ2で求めたp、qに対して、次の演算を行う。pが216bitより小さな因数になる のを防ぐために(1)の演算をする。qが280bitより小さな因数になるのを防ぐために(2) の演算をする。これにより、公開鍵nが496bitを下回ることがないようにする。 (1)p.num[6]の下から24bit目(216bit目、第215bit)を1にする (2)q.num[8]の下から24bit目(280bit目、第279bit)を1にする ステップ4 p、qをRSAに適する素数にする変換  qをq以上で最小の擬素数とする。pをp以上で最小の擬素数とする。次の関係が成立す るp、qを求める。 (p-1)(q-1)とeが互いに素 かつ t = 0x7743、de ≡ 1 mod(p-1)(q-1) n = pq なるt、d、nに対し t^ed ≡ t (mod n)  上記の関係を満たすp、qが出るまで、p+=2、q+=2として素数テストから繰り返す。 ステップ5 鍵の命名  ステップ4で生成したnを公開鍵、dを秘密鍵と称する。文字列に変換する際は上記変 換則を用いて86文字とする。 署名アルゴリズム  RSA暗号化 m^d ≡ c (mod n)に使用するmを求める。与えられた署名対象ハッシュ文 字列をMes[0-63]とする。64バイトに満たない場合、空きには0を仮定する。 64バイトを超える場合、超えた部分は無視する。 m.num[0-15] := Mes[0-63](64バイト)  ただし、リトルエンディアンで処理する。つまり、Mesの最初のバイトはmの最下位バ イトである。