Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

DoJaでベキ乗剰余計算をしたい

初めまして!
今、携帯電話上でベキ乗剰余演算を実装したいと考えているのですが、どうすればいいのか全く分かりません。
1024bit=約300桁(10進数)を扱わなくてはならないのです;
よろしくお願い致します。 

ベキ乗剰余演算というのは、主に暗号で使われる演算で、

c = m^e mod n (ただし,nは素数p,qの積)

(mをe乗したものをnで割ったときの余りをcとする.)

この場合はRSA暗号です。

そして,1024bitといったのは、nの部分なのです。

12

回答

79206

閲覧

12件の回答

評価

0

作ったことないんで分かりませんが、BigIntegerはどうでしょう。

評価

0

mioさん、返信ありがとうございます。

>作ったことないんで分かりませんが、BigIntegerはどうでしょう。

私もそう思い、使おうとしたのですが、DoJaでは使えないみたいなのです。

ん〜どうすればいいんだろう?

評価

0

>使えないみたい
とは、どうやって判断したんですか?

評価

0

>とは、どうやって判断したんですか?

DoJaに詳しい人に聞いたんですが

評価

0

>DoJaに詳しい人に聞いたんですが
その信憑性の度合いは?

ご自分で実際に試して確認したりはしていないんでしょうか
話としてはこんなところみたいだけど
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33761&forum=13

評価

0

今、BigIntegerを実際に使ってみているところです。

ん〜、プログラミングの経験がほとんど無いからキツイですけど・・・

評価

0

>ん〜、プログラミングの経験がほとんど無いからキツイですけど・・・
それは仕方ない
やりたいなら、やらなきゃ

評価

0

やりたいではなくて、やらなくちゃいけないんですが・・・

評価

0

それにしても、BREWには暗号ライブラリが用意されているから、DoJaと比べれば簡単に処理ができるんだけど、DoJaには何故ないんだろう〜

また、同じようなことをしている人も少ないのかな?

評価

0

>DoJaには何故ないんだろう〜
C++と違って、Javaはライブラリが豊富で使いまわせるからでは?

評価

0

>やらなくちゃいけないんですが・・・
読み替えりゃ同じことだと思うけど
いやいやなら、やらないと言った方がいいんではないかと・・

で、2006-09-28 14:03辺りまで
>今、BigIntegerを実際に使ってみているところです。
やってなかった・・・ということよね?

やらにゃならんと思っているのなら、頑張りなさいな

評価

0

RSAの勉強をするのであれば、話は別ですが、ライブラリを使用のが良いかと思いますよ。RSAを勉強するなら、「Javaで学ぶ暗号プログラミング」がわかり易いかと思います。

また、どのようなデータを暗号化するのかわかりませんが、携帯ではつらいかも・・・
共通鍵をRSAで暗号化して渡すとかが良いかも知れません。

// p,q は、異る大素数, SIZEは、大素数のビット数
// cは、素数性確立に関連した整数 (see BigInteger#isProbablePrime )
p = new BigInteger(SIZE, c, new Random());
do {
  q = new BigInteger(SIZE, c, new Random());
while (q.compareTo(p));

N = p.multiply(p);
// P =  (p-1)(q-1)
P = p.subtract(BigInteger.valueOf(1));
P = P.multiply(q.subtract(BigInteger.valueOf(1)));
// 公開鍵
do {
e = new BigInteger(2*SIZE, new Random());
} while ((e.compareTo(p) != -1) || (e.gcd(P).compareTo(BigInteger.valueOf(1)) != 0));
// 暗号化
enc = msg.modPow(e, N); //  msg < N
// 秘密鍵 d = e mod P の逆元
d = e.modInverse(P);
// 復号
plane = enc.modPow(d, N):

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。