RSA暗号と署名 4ADM3126 喜田 雄一 はじめに RSAのフォルダを作成して今日の資料、課題を そこにコピーしてください cp ~jyeff/Java/RSA/* ~自分のID/Java/RSA 流れ ① ② ③ RSAの復習 BigInteger 演習問題 RSA BigInteger 150~300桁の計算 素数の生成 本格的な暗号計算ができる! RSAkeyGen.javaの概要 ランダムに鍵を生成するプログラム class RSAkeyGen{ public static void main(String[] args){ 変数の宣言 鍵の生成 暗号化 復号化 } } 鍵の生成① 素数 p、q 9 10 p = new BigInteger( bit , k , rnd ); q = new BigInteger( bit , k , rnd ); 5 10 Random() n=p×q ⑫ n = p.multiply( q ); 鍵の生成② l=(p-1)*(q–1) ⑬ l = p .subtract(Biginteger.ONE) ⑭ .multiply( qq .subtract(Biginteger. ONE )) 整数の1 鍵の生成③ e=3 (lと互いに素、e<l) ⑮ e = BigInteger.valueOf( 3l ); d=e^(-1)modl ⑯ d = e .modInverse( l ); 暗号化、複合化 平文 ⑱ m = new BigInteger( bit bit, rnd ).mod( n n ); 暗号化 c = m^e mod n ⑲ c = m .modPow( e , nn ); 復号化 ⑳ m2 = cc .modPow( d , n ); コンストラクタ、メソッドまとめ BigInteger( x , 10 , rnd ) x ビットの素数 x.multiply( y ) x*y x.subtract( y ) x–y BigInteger.valueOf( x ) 整数値 x x.modInverse( z ) x ^ (-1)mod z x.modPow( y , z ) x ^ y mod z 演習 RSA_JCE.java RSA_JCE.javaを改良し、暗号化に使用した 秘密鍵とペアの公開鍵以外では、複合化でき ないことを確認せよ RSA_JCE.java パッケージを利用した暗号化と複合化 import.java.security.*; import.javax.cypto.*; class RSA_JCE{ public static void main(String[] args){ 鍵の生成 暗号化 復号化 } }
© Copyright 2024 ExpyDoc