ウォンツテック

そでやまのーと

RSA

多倍長演算クラス

RSA

多倍長演算クラスの和差部分のbug fix終了。 次は乗算を書く。多倍長演算クラスソース

正の整数A,B,Cの正の和のオーバーフローについて詳しく考える。 まず32bit値の変数を考えたときオーバーフローを起こすのは数値が2^32以上の値になった時であるのでその境界値をMと置く。 するとA+B+Cのオーバーフローは以下のように考えられる B+Cがオーバ…

多倍長整数を32bitのunsigned long値を要素とするvectorで管理するのだけれども、演算した際の桁あふれをどう扱うか考えてみた。まずCPUのレジスタにアクセス出来るならばフラグレジスタのCFビットを検査し、桁あふれが起きたかどうかを確認する事が出来る。…

多倍長整数の乱数を生成する方法についてもう少し詳しく考えてみた。 生成した乱数を桁数をLとする 種を生成する(srand(),rand()を16回行い64バイトの整数を生成) 種を初期カウンタ値としてセットする while (true) { カウンタ値をハッシュ関数(md5)にかけ…

ランダムな素数を作るためにまずランダムな整数を作る必要がある。(ランダムな素数はその整数が素数かどうかを調べ、素数が見つかるまで繰り返す方法を取る) そこでランダムな整数を作る方法にはどんなのがあるかというと以下の方法があるらしい。(擬似乱…

前回平文を1バイトずつ暗号化すると書いたけど、これだとECBといわれる方式であり単なる巨大な変換表を作成するだけとなってしまうので、CBCというわれるブロック方式を採用する。CBC(Cipher Block Chaining)の概要を書くと以下のようになる。 平文をRSAで使…

STLの勉強をするのにただつまらないコードを書いてもあれなのでRSAの暗号アルゴリズムによるkey(公開鍵、秘密鍵)の生成とファイルの暗号、復号化のコードを書いてみようと思う。 ざっくり調べてみたところRSA Algorithmとその周辺には以下の要素がある。 1…