tôi đang thực hiện một nhiệm vụ về mật mã và cần một gợi ý (VUI LÒNG KHÔNG CÓ GIẢI PHÁP).
Nhiệm vụ là:
Tôi có thể gửi Tin nhắn (Số kỹ thuật số) tới Bộ chứa Docker. Phản hồi là các giá trị p,q,g,z1,s,r và giá trị băm(m+z1). Vì vậy... khi tôi nhập số 1, tôi nhận được các giá trị DSA được sử dụng để ký.
Unknown là giá trị của k, z2 và x (khóa riêng)
Được biết, p,q,g,z1,z2 được cố định cho mọi tin nhắn. Vì vậy, chúng giống nhau mọi lúc.
Được biết, giá trị của k được tính:
k = g^(giá trị băm + z2) mod q
vì vậy - theo cách hiểu của tôi: Để tìm ra giá trị của k tôi phải tìm 2 tin nhắn đang sử dụng cùng một k. Nếu tôi thành công, tôi có thể tính toán khóa với
k = (M1 - M2) / (s1 - s2)
Nhưng làm cách nào tôi có thể phát hiện ra rằng 2 thông báo sử dụng cùng một k với các giá trị đã cho?
Những gì tôi thực sự đang làm:
Tôi đã viết một Chương trình Python lặp qua mọi tin nhắn, bắt đầu từ tin nhắn = 0. Sau đó Tính k bằng công thức và bỏ qua z2 (tôi nghĩ điều này hoàn toàn sai...). Lưu các giá trị từ k được tính trong một mảng. Sau đó tăng thông báo += 1 và làm tương tự. Sau đó, tôi so sánh k từ tin nhắn thực tế với các giá trị đã lưu từ tin nhắn trước đó nếu nó giống nhau. Nhưng bây giờ tôi đang ở tin nhắn 2000000. Vì vậy - tôi nghĩ rằng tôi đang làm sai.
Tôi có hoàn toàn đi sai đường không?
Tôi có thể lấy thêm giá trị bằng các thông báo khác nếu cần. Ai đó có thể giúp tôi?