แนวคิดหลักที่นี่คือ $m_1$ (หรือ $m_2$) มีค่าน้อยมากเมื่อเทียบกับโมดูลัส สิ่งนี้ช่วยให้เราใช้ เทคนิค Coppersmith ตามปกติ.
เรารู้ว่า $c_1 = m_1^p \bmod n$ซึ่งรวมถึง $c_1 \equiv m_1 \bmod p$. จากนี้เรารู้ว่า $c_1 - m_1 = t\cdot p$, สำหรับบางคน $t$. กล่าวอีกนัยหนึ่ง $\gcd(c_1 - x, n) = p \ge n^{1/2}$ สำหรับบางคน $x = m_1 \le n^{1/4}$. ที่นี่เราคาดหวัง $x = m_1$ มีขนาดเล็กกว่ามาก $n^{1/4}$ในความเป็นจริงซึ่งทำให้การคำนวณง่ายขึ้น
สิ่งนี้ทำซ้ำได้ง่ายใน Sage:
ปราชญ์: p = Random_prime(2^1024, lbound=2^1023+2^1022)
ปัญญาชน: q = Random_prime(2^1000, lbound=2^999+2^998)
ปราชญ์: n = p*q
ปราชญ์:
ปราชญ์: m1 = randint(0, 2^200)
ปราชญ์: m2 = randint(0, 2^200)
ปัญญาชน: c1 = power_mod(m1, p, n)
ปราชญ์: c2 = power_mod (m2, q, n)
ปราชญ์:
ปราชญ์: P.<x> = Zmod(n)[]
ปราชญ์: f = (c1 - x).monic()
ปราชญ์: f.small_roots (เบต้า = 0.5)
[1106883791702122199703869965196585780508362129433642126297878]
ปราชญ์: m1
1106883791702122199703869965196585780508362129433642126297878
กำลังฟื้นตัว $m_2$ สามารถทำได้เช่นเดียวกันหรือจะถวายปัจจัยครั้งเดียวก็ได้ $m_1$ ได้รับการกู้คืนแล้ว â$p = \gcd(c_1 - m_1, n)$âและถอดรหัส $m_2$ โดยทั่วไป.