7 : 03 強擬素数

← 7‒02 p↑ もくじ i 7‒04 n →

ミラーテストと強擬素数きょうぎそすう

2003年 1月29日
記事ID d30129


RSA()()() - JavaScript 調 JavaScript  Miller()()()()





n12

n = 12377  n1 n1  n1 = 12376 2
12376 ÷ 2 = 6188
6188 ÷ 2 = 3094
3094 ÷ 2 = 1547
2
12377  1 = 12376 = 23×1547

4
1547, 3094, 6188, 12376
 n1 2  n1 22 b2
21547, 23094, 26188, 212376
212376 n n1   1 (mod n) 
212376  1 (mod 12377)


21547, 23094, 26188, 212376
222
(21547)2 = 21547×2 = 23094

 mod 12377 212376  1   1   1   1  12376 (mod 12377)   1  ±1   調
<script type="text/javascript">
_debug( Bigint.powmod( 2, 1547, 12377 ) );
_debug( Bigint.powmod( 2, 1547*2, 12377 ) );
_debug( Bigint.powmod( 2, 1547*4, 12377 ) );
_debug( Bigint.powmod( 2, 1547*8, 12377 ) );
</script>
結果
Debug: 12376.
Debug: 1.
Debug: 1.
Debug: 1.


21547, 23094, 26188, 212376
mod 12377 
1, 1, 1, 1
11113
31547, 33094, 36188, 312376

<script type="text/javascript">
_debug( Bigint.powmod( 3, 1547, 12377 ) );
_debug( Bigint.powmod( 3, 1547*2, 12377 ) );
_debug( Bigint.powmod( 3, 1547*4, 12377 ) );
_debug( Bigint.powmod( 3, 1547*8, 12377 ) );
</script>
結果
Debug: 11703.
Debug: 8704.
Debug: 12376.
Debug: 1.

3 123761 212376  1547×8  12376 n1 1 n11   1  n  mod n 
1, 1, 1, ... , 1
 1 
... , 1, 1, 1, ... , 1
  1  1 

x21  x±1 


x1x ±1  329mod 8 
32  1 (mod 8)
±131 111 n1±1n n nZn n 2b 1 (mod n) 
b2 n1
1:
b21 n
a2b2 = (a+b)(ab) 使
b21 = (b+1)(b1)
nnn b  (b+1)  (b1)   (b+1)  (b1) n b+1  b1 n
b+1  0  b1  0 (mod n)
b  1  b  1 (mod n)
nmod n 1±1 nn n=6 
b21 = (b+1)(b1)
6(b+1)  (b1) 6 b+1b16b+12b13(b+1)(b1)6623  n=77 b+1 b1 7


n1 1 





3n1 n1 2:
n1 = 2kss

 mod n  n1 1  1 
2s, 22s, 222s, 223s, ... , 22k1s, 22ks

2
20s, 21s, 22s, ..., 2k1s, 2ks





n
22ks = 2n1  1 (mod n)
 1  n111 11 11 11 1 1



b2 2n  b=2 使 n3535n35 mod n b <n n100


n 11 1 1

1 1 11k1 n11 1

n±11 1 11 ±11 1 n11 n1 1 ±11 1±1 1

Zn1 1 RSAn100

()()()() 100001229 222:
341, 561, 645, 1105, 1387, 1729, 1905, 2047, 2465, 2701, 2821, 3277, 4033, 4369, 4371, 4681, 5461, 6601, 7957, 8321, 8481, 8911
 2047, 3277, 4033, 4681, 8321 5

1387 = 19×73 
<script type="text/javascript">
// 1387-1 = 1386 = 2×693
_debug( Bigint.powmod( 2, 693, 1387 ) );
_debug( Bigint.powmod( 2, 693*2, 1387 ) );
</script>
結果
Debug: 512.
Debug: 1.

2 Bigint.powmod( 2, 1387-1, 1387 )  1 ±1  512 
512×512 = 262144  1 (mod 1387)

 4033 = 37×109 
40331 = 4032 = 64×63 
<script type="text/javascript">
_debug( Bigint.powmod( 2, 63, 4033 ) );
_debug( Bigint.powmod( 2, 63*2, 4033 ) );
_debug( Bigint.powmod( 2, 63*4, 4033 ) );
_debug( Bigint.powmod( 2, 63*8, 4033 ) );
_debug( Bigint.powmod( 2, 63*16, 4033 ) );
_debug( Bigint.powmod( 2, 63*32, 4033 ) );
_debug( Bigint.powmod( 2, 63*64, 4033 ) );
</script>
結果
Debug: 3521.
Debug: 4032.
Debug: 1.
Debug: 1.
Debug: 1.
Debug: 1.
Debug: 1.

2 40321 131  3
<script type="text/javascript">
_debug( Bigint.powmod( 3, 63, 4033 ) );
_debug( Bigint.powmod( 3, 63*2, 4033 ) );
_debug( Bigint.powmod( 3, 63*4, 4033 ) );
_debug( Bigint.powmod( 3, 63*8, 4033 ) );
_debug( Bigint.powmod( 3, 63*16, 4033 ) );
_debug( Bigint.powmod( 3, 63*32, 4033 ) );
_debug( Bigint.powmod( 3, 63*64, 4033 ) );
</script>
結果
Debug: 3551.
Debug: 2443.
Debug: 3442.
Debug: 2443.
Debug: 3442.
Debug: 2443.
Debug: 3442.

  2443  3442  mod 4033 13  11 ω, ω2  ω  ω2 : (ω2)2 = ω4 = ω3ω = ω  ω3 = 1 4033 x3  1 3148
  63, 3969; 655, 1527; 935, 3097; 2443, 3442

31
<script type="text/javascript">
var a0 = Bigint.powmod( 3, 63, 4033 );
var a1 = Bigint.powmod( a0, 2, 4033 );
var a2 = Bigint.powmod( a1, 2, 4033 );
var a3 = Bigint.powmod( a2, 2, 4033 );
var a4 = Bigint.powmod( a3, 2, 4033 );
var a5 = Bigint.powmod( a4, 2, 4033 );
</script>

1 1 1  ±1 1 1±1 1111 1

RabinMiller  1/4  5
(1/4)5  0.00098
使

関連記事

この記事のURL


128ビットRSAの鍵生成のデモ: JavaScript

2003年 5月24日
記事ID d30524


2003 128RSA JavaScript  20041024RSA JavaScript: RSA20042


JavaScript12040 128160


2000PCPentium  850 MHz使101623 100RSAJavaScript 64JavaScript JavaScript53 21041006100081100104108 1001 210

2003使 使 ()()() Nb
bN-11 (mod N)
A, B, CABC
Bigint.powmod()

Bigint.prototype.isProbablePrime = function( oBase ) {
    var oResult = Bigint.powmod( oBase , this.minus(1), this );
    return ( oResult.isEqualTo(1) ) ;
}

false true


JavaScriptJavaScriptCPU

... 20 10000
[63908 83314 43524 40433] Skipped (7)...[63908 83314 43524 40439] Skipped (13)...
20() 2357

10000X1調 23 23

PGP 1RSA isStrongProbablePrime(2)isStrongProbablePrime(3)
isProbablePrime( base )
isStrongProbablePrime( base )


PQ2 RSA

1 23

20 RSA128160RSAJavaScript WindowsJavaScriptMSIE Netscape 4 MozillaJavaSciript



1000 2323PGPPGP 2.6*114 202 42 20028

RSA HD 126210044000 203040 getRandom(20)203040

使

NOTE

JavaScript

CC++Perl JavaScript

.js HTML253-1
<script type="text/javascript">
    A = ( Bigint.pow( 2 , 53 ) ).minus(1);
    _Debug( "253乗ひく1" , A );
    _Debug( "3を底としてたぶん素数?", A.isProbablePrime(3) );
</script>


253乗ひく1 : 9 00719 92547 40991

3を底としてたぶん素数? : false

16 JavaScriptC使 HTML .isProbablePrime(3)  117
<script type="text/javascript">
    myNumber = Bigint.Number( "11 11111 11111 111111" );
    _Debug( myNumber.isProbablePrime() ? "たぶんね" : "ちがうよ" );
</script>
128160

PGP512PGP 退

リンク

この記事のURL







使

 


 <メールアドレス>