# **Các loại tấn công RSA**
**Nếu bạn chưa biết gì về RSA, đề nghị quay ra, và tìm hiểu về RSA, hoặc có thể đọc write_ups tại đây https://github.com/trananhnhatviet/CryptoHack/blob/main/RSA/00_RSA_Knowledge_Basic.md**
- Trường hợp 1: Nếu như Alice người muốn giao tiếp với nhiều người với cùng 1 nội dung tin nhắn, nhưng Alice lại quá lười để thay đổi hai số nguyên tố p và q, thì đây có thể là 1 cách tấn công của Eve để biết được nội dung tin nhắn
- Giả sử, Alice muốn gửi 1 tin nhắn cho Bob và Carl với nội dung: message = b'i love you so much !'
- Chuyển sang dạng long sẽ là m = 600167100838453472459358035297984386711465500705
- Alice nhận 2 số e từ Bob và Carl là: e1 = 31 và e2 = 71 và chỉ có 1 số N = 19085995833312192524007220630153244389942263922006889142154298425751808612835625879164268530070480609
- Và Alice sẽ gửi cho Bob và Carl 2 ciphertext:
c1=7248000011746393608920764478555324889797098623177063575022710990560749986650254745111540462514063633
c2=11182172287733531215626356979925885819483390539286301041874693701292216053376480402307816910743778627
- Cụ thể sẽ có dạng như thế này:
- Khi đó Eve sẽ có được cả c1, c2, e1, e2, n
- Các bước sẽ như sau:
+ Nếu gcd(e1,e2) = 1 và tồn tại e1*a + e2*b = 1 (tìm a,b bằng thuật toán extended Euclidean)
+ Khi đó, 
+ Ta thấy a = -16 và b = 7, vì a âm nên ta cần phải tìm inverse của c1 với N: c1_inverse = pow(c1,-1,N)
+ Qua đó, m = ( pow(c1_inverse,a,n) * pow(c2,b,N) ) % N
+ Chuyển về bytes, ta sẽ được message ban đầu
```
from Crypto.Util.number import *
def egcd(a, b):
x,y, u,v = 0,1, 1,0
while a != 0:
q, remainder = b//a, b%a
m, n = x-u*q, y-v*q
b,a, x,y, u,v = a,remainder, u,v, m,n
gcd = b
return gcd, x, y
gcd,x,y=egcd(31,71)
N = 19085995833312192524007220630153244389942263922006889142154298425751808612835625879164268530070480609
c1=7248000011746393608920764478555324889797098623177063575022710990560749986650254745111540462514063633
c2=11182172287733531215626356979925885819483390539286301041874693701292216053376480402307816910743778627
c1in = pow(c1,-1,N)
print(long_to_bytes((pow(c1in,-x,N)*pow(c2,y,N))%N))
#output b'i love you so much !'
```