使用N(分解)找到D

时间:2015-11-16 10:13:41

标签: algorithm encryption rsa

我试图通过分解N来找到D.左

我的@objc(PPSelectionIndexesCountIsExactlyOneTransformer) public class PPSelectionIndexesCountIsExactlyOneTransformer: NSValueTransformer { override public class func allowsReverseTransformation() -> Bool { return false } override public class func transformedValueClass() -> AnyClass { return NSNumber.self } override public func transformedValue(value: AnyObject?) -> AnyObject? { var retval: AnyObject? if let indexSet = value as? NSIndexSet { retval = NSNumber(bool: indexSet.count == 1) } return retval } }

我找到了P& Q使用

N is 265291078722948385089717069136983657793

同样地,我发现ɸ使用

 n = p.q 

P - 14716976826788780483 
Q -18026193955816294571

下一步说

ɸ = (p - 1).(q - 1)

现在我陷入了这一步,我无法继续。我不确定这是否是分解N以找到D的正确方法。

P.S - 最后一步是Select e; such that, e is relatively prime to ɸ and e < ɸ, gcd (e, ɸ) = 1 使用这个步骤我应该找到D.但是我仍然坚持到倒数第二步。

感谢任何帮助。 :)

编辑(答案): E = 65537(2 ^ 16 + 1),它是最常用的加密形式,并被广泛使用。

Select d; such that, d.e mod ɸ = 1 or e = 1 mod ɸ

现在只需使用上述逻辑来获取D的可能值:)

2 个答案:

答案 0 :(得分:0)

我建议先从e = 3开始,然后尝试e = 5,7,11等等。 满足的条件是

(d * e) % φ(n) = 1

在你的例子中φ(n)= 265291078722948385056973898354378582740

所以,为了找到d,我会做一个表

For e=3, d = (φ(n)+1) / e
           =  265291078722948385056973898354378582741 / 3
           = 88430359574316128352324632784792860913

现在找到e = 5,7等等

答案 1 :(得分:0)

您不需要猜测e,因为它是公共指数,它应该在公共场所与公共密钥n一起出现在(e, n)一对。否则你有一半的密钥,ɸ(n)的任何数字联合,gcd(e, ɸ(n)) = 1是候选公共指数。

在对模n进行分解之后,你已经完成了很多工作。只需使用公开指数e,然后找到e (mod ɸ(n))的{​​{3}},即d . e ≡ 1 (mod ɸ(n))。您必须获得d,因为eɸ(n)必须是共同素数才能获得反转。