Advertisement
Guest User

Атака винера на малую секретную константу(для RSA)

a guest
Apr 18th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. # ПЕРВАЯ ЧАСТЬ, здесь константные значения для всех случаев
  2. p =next_prime(10^10)
  3. q =next_prime(2*p)
  4. n=p*q
  5. print 'p,q,n:',p,q,n
  6. my_phi=(p-1)*(q-1)
  7. h=p/q *1.0
  8. alpha=(h+1)/sqrt(h) *1.0
  9. d_krit=floor(1/sqrt(2*alpha)*n^(0.25))
  10. print 'd_krit:', d_krit
  11. d_border=d_krit^2
  12. print 'd_border',d_border
  13.  
  14. print '1 случай, когда d1<d_krit и r<1:'
  15.  
  16. for d in range(d_krit-1,2,-1):
  17. if GCD(d,my_phi)==1:
  18. d1=d
  19. break
  20.  
  21. print 'd1',d1 , d1<d_krit
  22.  
  23. r=(d1/d_krit)*1.0
  24. print 'r:', r, r<1
  25.  
  26. e = 1/d1 % my_phi
  27. k= (e*d1 - 1)/ my_phi
  28.  
  29. print 'e,k:',e,k
  30.  
  31. e_n=continued_fraction(e/n)
  32. #print e_n
  33. i=0
  34. while ( e_n.numerator(i) != k ) and (i<len(e_n)):
  35. i=i+1
  36.  
  37. print 'i',i
  38. print e_n.numerator(i)/e_n.denominator(i),':',e/n *1.0, e_n.numerator(i)/e_n.denominator(i) *1.0, k/d1 in e_n.convergents()
  39.  
  40. print '2 случай, когда d2> d_krit и k<k_krit и r>1:'
  41.  
  42. d2=d_krit+1
  43. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  44. d2=d2+1
  45.  
  46. print 'd2:',d2 , d2>d_krit
  47.  
  48. e = 1/d2 % my_phi
  49. k= (e*d2 - 1)/ my_phi
  50.  
  51. print 'e,k:',e,k
  52.  
  53. r=d2/d_krit *1.0
  54. print 'r:',r, r>1
  55.  
  56. k_krit = d_krit/r *1.0
  57.  
  58. while (k>= k_krit):
  59. d2=d2+1
  60. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  61. d2=d2+1
  62. e = 1/d2 % my_phi
  63. k= (e*d2 - 1)/ my_phi
  64.  
  65. print 'k_krit:',k_krit, k < k_krit
  66.  
  67. e_n=continued_fraction(e/n)
  68. #print e_n
  69. i=0
  70. while ( e_n.numerator(i) != k ) and (i<len(e_n)):
  71. i=i+1
  72.  
  73. print 'i',i
  74. print e_n.numerator(i)/e_n.denominator(i),':',e/n *1.0, e_n.numerator(i)/e_n.denominator(i) *1.0, k/d2 in e_n.convergents()
  75.  
  76. print '3 случай, когда d2> d_krit и k_krit<k<2*k_krit и r>1:'
  77.  
  78. d2=d_krit+1
  79. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  80. d2=d2+1
  81.  
  82. e = 1/d2 % my_phi
  83. k= (e*d2 - 1)/ my_phi
  84. if (k_krit<k) and (k<2*k_krit):
  85. k=k
  86. else:
  87. while ((k_krit >= k) or (k >= 2*k_krit)) and (d2<d_border):
  88. #print 'd2:',d2
  89. d2=d2+1
  90. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  91. d2=d2+1
  92. e = 1/d2 % my_phi
  93. k= (e*d2 - 1)/ my_phi
  94. if d2==d_border:
  95. print 'd2!!!'
  96. print 'd2:', d2, d2> d_krit
  97. print 'e,k:',e,k
  98. print 'r:', d2/d_krit *1.0, r>1
  99.  
  100. e_n=continued_fraction(e/n)
  101. print len(e_n)
  102. #print e_n
  103. i=0
  104. while (e_n.numerator(i) != k ) and (i<len(e_n)):
  105. i=i+1
  106. if i==len(e_n):
  107. print('k/d - не является подходящей дробью')
  108. else:
  109. print 'i',i
  110. print e_n.numerator(i)/e_n.denominator(i),':',e/n *1.0, e_n.numerator(i)/e_n.denominator(i) *1.0, k/d2 in e_n.convergents()
  111.  
  112.  
  113. print '3 случай, когда d2> d_krit и k_krit<k<2*k_krit и r>1, находит случай, когда к/d не является подходящей дробью:'
  114.  
  115. while i!=len(e_n):
  116. d2=d2+1
  117. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  118. d2=d2+1
  119. e = 1/d2 % my_phi
  120. k= (e*d2 - 1)/ my_phi
  121. if (k_krit<k) and (k<2*k_krit):
  122. k=k
  123. else:
  124. while ((k_krit >= k) or (k >= 2*k_krit)) and (d2<d_border):
  125. d2=d2+1
  126. while ( GCD(d2,my_phi)!=1 ) and (d2<d_border):
  127. d2=d2+1
  128. e = 1/d2 % my_phi
  129. k= (e*d2 - 1)/ my_phi
  130. if d2==d_border:
  131. print 'd2!!!'
  132. sys.exit()
  133. e_n=continued_fraction(e/n)
  134. i=0
  135. while (e_n.numerator(i) != k ) and (i<len(e_n)):
  136. i=i+1
  137. print 'd2:', d2 , d2> d_krit
  138. print 'e,k:',e,k , k_krit<k, k<2*k_krit
  139. print 'r:', d2/d_krit *1.0, r>1
  140.  
  141. print k/d2 in e_n.convergents()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement