bigint.js v0.5 beta10
2003-12-31
少なくとも360ビットまでは、遅い Mozilla でも十分に動作する。
128ビットはかなり速い。
360ビットでは、鍵生成で30秒~数分かかる。
基本的に109桁の素因数分解になるから、個人の攻撃に対しては、相当の耐性がある。
素因数分解専用のソフトを投入しても2003年時点では109桁は簡単には壊れない。
暗号化は速い。復号化は128ビットで1~2秒程度、360ビットでは10~30秒かかる。
鍵生成のコストは確率的で、運に左右される。
暗号化・復号化は確定的な時間で動作し、運が悪くて待たされるということはない。
2003年5月にやったときは、
128ビットも苦しかったが、今は128ビットは楽勝だ。今2003年5月のデモをやると、あまりの遅さにびっくりする。
エラトステネスを1回通過するだけで10秒くらい待たされる。
これは今なら10ミリ秒オーダーで終わる場所だ。
前回からの更新
- 3で割り切れるかどうかの判定を10倍に高速化。大勢には影響ないが、エラトステネスが高速化。
-
misc.js でインクルードされるインスタンスメソッド toKanji は、
5万7344桁までの巨大整数を、漢字で位取りを記した文字列に高速変換する。
手元では、3011桁ある2**10000を0.1秒未満で漢字出力できた。
ただし2**10000の計算それ自体に0.5秒ほどかかる。
72桁以内であれば無量大数を使った標準の万進法による。
ただし10**24はU+79ED 秭 とする。73~112桁は下56桁をB、残りをAとして「A頻波羅B」と表記する。
ここでAとBは最大「9999恒河沙」台の数である。以下同様に
「無量大数の彼方へ」にある華厳経の方式で再帰的に展開する。
Demo1は「17無量大数」台の2**230を計算する。
- 前回発生した割る数が14桁のときのエンバグを修正。
- Opera 7.50でも動作確認。
使い方
最初に鍵ペアを作ってみてください。
次にそのうちの公開鍵を使ってテキストを暗号化してみてください。
最後に秘密鍵で暗号を解除してみてください。
鍵生成のとき、IEはステータスバー、MozillaはProgressフィールドに進行状況を表示します。
-はエラトステネスのふるいではねられた。
*は強擬素数テストではねられた。^は強擬素数テストに1回通過。
- [Key Generation] で鍵ペアを新規に生成します。既存の鍵を鍵フィールドにペーストすることでもOKです。
- [Key Info] は一つまたは両方の鍵フィールドに今ある鍵の情報を調べます。
- [Encrypt] は今 Public Key フィールドにある鍵を使って Input フィールドを暗号化します。
-
[Decrypt] は今 Secret Key フィールドにある鍵を使って Input フィールドの暗号を解除します。
暗号化したときの鍵に対応する秘密鍵が必要です。
[index]